Skip to content

Commit b49a061

Browse files
authored
Merge pull request #29 from cloudAndMonkey/master
apijson多数据源-kafka
2 parents e61da33 + 983ad10 commit b49a061

16 files changed

+1282
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# APIJSONDemo
2+
3+
## 支持多数据源-消息队列
4+
5+
示例:kafka
6+
7+
原理说明:
8+
9+
Access表名 = 消息队列 topic
10+
11+
Access表配置说明:
12+
![image](https://user-images.githubusercontent.com/12228225/210956299-204115a7-433c-4f18-af27-5120068dab2e.png)
13+
Request表配置post权限
14+
![image](https://user-images.githubusercontent.com/12228225/210956378-be095589-0ced-4317-bb46-6b296538f26e.png)
15+
16+
apijson发送mq消息:
17+
单条<br/>
18+
{
19+
"@datasource": "kafka",
20+
"Topic_User":{
21+
"message":"test-101"
22+
},
23+
"tag": "Topic_User",
24+
"@explain": false
25+
}<br/>
26+
多条<br/>
27+
{
28+
"Topic_User[]": [
29+
{
30+
"message":"test-100"
31+
},
32+
{
33+
"message":"test-101"
34+
}
35+
],
36+
"tag": "Topic_User[]",
37+
"@datasource": "kafka",
38+
"@explain": true
39+
}
40+
41+
客户端接收消息:
42+
43+
offset = 47, key = null, value = test-101<br/>
44+
offset = 48, key = null, value = test-100<br/>
45+
offset = 49, key = null, value = test-101<br/>
46+
47+
48+
用java代码方式,获取具体数据源,调用即可
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<groupId>org.springframework.boot</groupId>
6+
<artifactId>spring-boot-starter-parent</artifactId>
7+
<version>2.5.13</version>
8+
<!-- <relativePath>./pom.xml</relativePath>-->
9+
</parent>
10+
<groupId>apijson.demo</groupId>
11+
<artifactId>apijsondemo-multidatasource-kafka</artifactId>
12+
<version>5.4.0</version>
13+
14+
<name>apijsondemo-multidatasource-kafka</name>
15+
<description>Demo project for testing APIJSON server based on SpringBoot</description>
16+
17+
<properties>
18+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
19+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
20+
<commons-lang3.version>3.12.0</commons-lang3.version>
21+
<druid.version>1.1.16</druid.version>
22+
<mybatisplus.version>3.5.1</mybatisplus.version>
23+
<mybatis-plus-support.version>2.3.3</mybatis-plus-support.version>
24+
<commons-collections4.version>4.4</commons-collections4.version>
25+
<commons.configuration.version>1.10</commons.configuration.version>
26+
<guava.version>30.1.1-jre</guava.version>
27+
<fastjson.version>1.2.72</fastjson.version>
28+
<hutool.version>4.1.1</hutool.version>
29+
<lombok.version>1.18.4</lombok.version>
30+
<commons-lang3.version>3.12.0</commons-lang3.version>
31+
<commons.io.version>2.5</commons.io.version>
32+
<commons.codec.version>1.10</commons.codec.version>
33+
<commons-collections4.version>4.4</commons-collections4.version>
34+
<commons.configuration.version>1.10</commons.configuration.version>
35+
<apijson.version>5.4.0</apijson.version>
36+
<mysql.version>8.0.31</mysql.version>
37+
<spring-context-support.version>5.3.18</spring-context-support.version>
38+
<spring-boot-configuration-processor.version>2.6.6</spring-boot-configuration-processor.version>
39+
<dynamic-datasource-spring-boot-starter.version>3.5.2</dynamic-datasource-spring-boot-starter.version>
40+
<java.version>1.8</java.version>
41+
<kafka.version>3.2.1</kafka.version>
42+
</properties>
43+
44+
<dependencies>
45+
<!-- JDK 11+ 需要,否则启动报错 NoClassDefFoundError: javax/activation/UnsupportedDataTypeException -->
46+
<dependency>
47+
<groupId>javax.activation</groupId>
48+
<artifactId>activation</artifactId>
49+
<version>1.1.1</version>
50+
</dependency>
51+
52+
<!-- 需要的 APIJSON 相关依赖 -->
53+
<dependency>
54+
<groupId>com.github.Tencent</groupId>
55+
<artifactId>APIJSON</artifactId>
56+
<version>${apijson.version}</version>
57+
</dependency>
58+
<dependency>
59+
<groupId>com.github.APIJSON</groupId>
60+
<artifactId>apijson-framework</artifactId>
61+
<version>${apijson.version}</version>
62+
</dependency>
63+
64+
<!-- 需要用的数据库 JDBC 驱动 -->
65+
66+
<!-- Oracle, SQLServer 等其它数据库的 JDBC 驱动,可以在这里加上 Maven 依赖或 libs 目录放 Jar 包并依赖 -->
67+
68+
<!-- 需要用的 SpringBoot 框架,1.4.0 以上 -->
69+
<dependency>
70+
<groupId>org.springframework.boot</groupId>
71+
<artifactId>spring-boot-starter-web</artifactId>
72+
</dependency>
73+
<dependency>
74+
<groupId>org.springframework</groupId>
75+
<artifactId>spring-context-support</artifactId>
76+
<version>${spring-context-support.version}</version>
77+
</dependency>
78+
<dependency>
79+
<groupId>org.springframework.boot</groupId>
80+
<artifactId>spring-boot-configuration-processor</artifactId>
81+
<version>${spring-boot-configuration-processor.version}</version>
82+
<optional>true</optional>
83+
</dependency>
84+
<dependency>
85+
<groupId>com.alibaba</groupId>
86+
<artifactId>druid-spring-boot-starter</artifactId>
87+
<version>${druid.version}</version>
88+
</dependency>
89+
<dependency>
90+
<groupId>com.baomidou</groupId>
91+
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
92+
<version>${dynamic-datasource-spring-boot-starter.version}</version>
93+
</dependency>
94+
<dependency>
95+
<groupId>com.baomidou</groupId>
96+
<artifactId>mybatis-plus-boot-starter</artifactId>
97+
<version>${mybatisplus.version}</version>
98+
<exclusions>
99+
<exclusion>
100+
<groupId>com.baomidou</groupId>
101+
<artifactId>mybatis-plus-generator</artifactId>
102+
</exclusion>
103+
</exclusions>
104+
</dependency>
105+
<dependency>
106+
<groupId>com.baomidou</groupId>
107+
<artifactId>mybatis-plus-support</artifactId>
108+
<version>${mybatis-plus-support.version}</version>
109+
</dependency>
110+
<dependency>
111+
<groupId>org.apache.commons</groupId>
112+
<artifactId>commons-collections4</artifactId>
113+
<version>${commons-collections4.version}</version>
114+
</dependency>
115+
<dependency>
116+
<groupId>mysql</groupId>
117+
<artifactId>mysql-connector-java</artifactId>
118+
<version>${mysql.version}</version>
119+
</dependency>
120+
<dependency>
121+
<groupId>com.google.guava</groupId>
122+
<artifactId>guava</artifactId>
123+
<version>${guava.version}</version>
124+
</dependency>
125+
<dependency>
126+
<groupId>org.projectlombok</groupId>
127+
<artifactId>lombok</artifactId>
128+
<version>${lombok.version}</version>
129+
</dependency>
130+
<dependency>
131+
<groupId>commons-io</groupId>
132+
<artifactId>commons-io</artifactId>
133+
<version>${commons.io.version}</version>
134+
</dependency>
135+
<dependency>
136+
<groupId>commons-codec</groupId>
137+
<artifactId>commons-codec</artifactId>
138+
<version>${commons.codec.version}</version>
139+
</dependency>
140+
<dependency>
141+
<groupId>commons-configuration</groupId>
142+
<artifactId>commons-configuration</artifactId>
143+
<version>${commons.configuration.version}</version>
144+
</dependency>
145+
<dependency>
146+
<groupId>org.apache.kafka</groupId>
147+
<artifactId>kafka-clients</artifactId>
148+
<version>${kafka.version}</version>
149+
</dependency>
150+
</dependencies>
151+
152+
<build>
153+
<plugins>
154+
<plugin>
155+
<groupId>org.springframework.boot</groupId>
156+
<artifactId>spring-boot-maven-plugin</artifactId>
157+
<configuration>
158+
<fork>true</fork>
159+
<mainClass>apijson.demo.DemoApplication</mainClass>
160+
</configuration>
161+
<executions>
162+
<execution>
163+
<goals>
164+
<goal>repackage</goal>
165+
</goals>
166+
</execution>
167+
</executions>
168+
</plugin>
169+
<plugin>
170+
<groupId>org.apache.maven.plugins</groupId>
171+
<artifactId>maven-compiler-plugin</artifactId>
172+
<configuration>
173+
<source>1.8</source>
174+
<target>1.8</target>
175+
</configuration>
176+
</plugin>
177+
</plugins>
178+
</build>
179+
180+
<repositories>
181+
<!-- APIJSON 必须用到的托管平台 -->
182+
<repository>
183+
<id>jitpack.io</id>
184+
<url>https://jitpack.io</url>
185+
<snapshots>
186+
<enabled>true</enabled>
187+
</snapshots>
188+
</repository>
189+
190+
<repository>
191+
<id>spring-snapshots</id>
192+
<url>https://repo.spring.io/snapshot</url>
193+
<snapshots>
194+
<enabled>true</enabled>
195+
</snapshots>
196+
</repository>
197+
<repository>
198+
<id>spring-milestones</id>
199+
<url>https://repo.spring.io/milestone</url>
200+
</repository>
201+
</repositories>
202+
203+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package apijson.demo;
2+
3+
import org.springframework.beans.factory.annotation.Value;
4+
import org.springframework.context.annotation.Configuration;
5+
6+
@Configuration
7+
public class DataBaseConfig {
8+
private String primary;
9+
10+
@Value("${spring.datasource.dynamic.primary}")
11+
public void setPrimary(String primary) {
12+
this.primary = primary;
13+
}
14+
15+
public String getPrimary() {
16+
return primary;
17+
}
18+
19+
public static DataBaseConfig getInstence() {
20+
return SpringContextUtils.getBean(DataBaseConfig.class);
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package apijson.demo;
2+
3+
import java.util.regex.Matcher;
4+
import java.util.regex.Pattern;
5+
6+
import lombok.extern.log4j.Log4j2;
7+
8+
@Log4j2
9+
public class DataBaseUtil {
10+
11+
/**
12+
* 根据url获取库名
13+
* @param url
14+
* @return
15+
*/
16+
public static String getLibname(String url) {
17+
Pattern p = Pattern.compile("jdbc:(?<db>\\w+):.*((//)|@)(?<host>.+):(?<port>\\d+)(/|(;DatabaseName=)|:)(?<dbName>\\w+)\\??.*");
18+
Matcher m = p.matcher(url);
19+
if(m.find()) {
20+
return m.group("dbName");
21+
}
22+
return null;
23+
}
24+
25+
/***
26+
* primary: master
27+
* strict: false
28+
* @param datasource: 匹配不成功, 自动匹配默认数据库
29+
* @return
30+
*/
31+
public static javax.sql.DataSource getDataSource(String datasource) {
32+
try {
33+
return DynamicDataSource.getDetail(datasource).getDataSource(); // 数据源
34+
} catch (Exception e) {
35+
throw new IllegalArgumentException("动态数据源配置错误 " + datasource);
36+
}
37+
}
38+
39+
public static String getDruidUrl(String datasource) {
40+
return DynamicDataSource.getDetail(datasource).getUrl(); // 数据库连接url
41+
}
42+
43+
public static String getDruidSchema(String datasource) {
44+
return getLibname(DynamicDataSource.getDetail(datasource).getUrl()); // 数据库名;
45+
}
46+
47+
public static String getDruidDBAccount(String datasource) {
48+
return DynamicDataSource.getDetail(datasource).getDbAccount(); // 数据库用户名
49+
}
50+
51+
public static String getDruidDBPassword(String datasource) {
52+
return DynamicDataSource.getDetail(datasource).getDbPassword(); // 数据库密码
53+
}
54+
}

0 commit comments

Comments
 (0)