Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e08fc87

Browse files
Java:APIJSONBoot 适配连接池;APIJSONBoot 提供 MariaDB, OceanBase 等对接说明;APIJSONBoot 升级 apijson-orm 和 apijson-framework 版本分别为 4.3.0 和 4.4.5,并针对新版特性来调整代码
1 parent 9951d66 commit e08fc87

File tree

7 files changed

+50
-19
lines changed

7 files changed

+50
-19
lines changed

‎APIJSON-Java-Server/APIJSONBoot/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>apijson.boot</groupId>
77
<artifactId>apijson-boot</artifactId>
8-
<version>4.4.0</version>
8+
<version>4.4.5</version>
99
<packaging>jar</packaging>
1010

1111
<name>APIJSONBoot</name>
@@ -41,12 +41,12 @@
4141
<dependency>
4242
<groupId>com.github.Tencent</groupId>
4343
<artifactId>APIJSON</artifactId>
44-
<version>4.2.5</version>
44+
<version>4.3.0</version>
4545
</dependency>
4646
<dependency>
4747
<groupId>com.github.APIJSON</groupId>
4848
<artifactId>apijson-framework</artifactId>
49-
<version>4.4.3</version>
49+
<version>4.4.5</version>
5050
</dependency>
5151
<!-- 可使用 libs 目录的 apijson-orm.jar 和 apijson-framework.jar 来替代,两种方式二选一 >>>>>>>>>> -->
5252

‎APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/boot/DemoApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@
4747
import apijson.demo.DemoVerifier;
4848
import apijson.framework.APIJSONApplication;
4949
import apijson.framework.APIJSONCreator;
50+
import apijson.orm.AbstractVerifier;
5051
import apijson.orm.FunctionParser;
5152
import apijson.orm.Parser;
5253
import apijson.orm.SQLConfig;
5354
import apijson.orm.SQLExecutor;
54-
import apijson.orm.Structure;
5555
import apijson.orm.Verifier;
5656
import unitauto.MethodUtil;
5757
import unitauto.MethodUtil.Argument;
@@ -73,7 +73,7 @@ public class DemoApplication implements ApplicationContextAware {
7373
static {
7474
// APIJSON 配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
7575

76-
Map<String, Pattern> COMPILE_MAP = Structure.COMPILE_MAP;
76+
Map<String, Pattern> COMPILE_MAP = AbstractVerifier.COMPILE_MAP;
7777
COMPILE_MAP.put("PHONE", StringUtil.PATTERN_PHONE);
7878
COMPILE_MAP.put("EMAIL", StringUtil.PATTERN_EMAIL);
7979
COMPILE_MAP.put("ID_CARD", StringUtil.PATTERN_ID_CARD);

‎APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/boot/DemoController.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@
7979
import apijson.demo.model.Verify;
8080
import apijson.framework.APIJSONController;
8181
import apijson.framework.BaseModel;
82-
import apijson.framework.StructureUtil;
8382
import apijson.orm.JSONRequest;
8483
import apijson.orm.exception.ConditionErrorException;
8584
import apijson.orm.exception.ConflictException;
@@ -299,30 +298,30 @@ public JSONObject reload(@RequestBody String request) {
299298

300299
boolean reloadAll = StringUtil.isEmpty(type, true) || "ALL".equals(type);
301300

302-
if (reloadAll || "FUNCTION".equals(type)) {
301+
if (reloadAll || "ACCESS".equals(type)) {
303302
try {
304-
result.put(FUNCTION_, DemoFunctionParser.init());
303+
result.put(ACCESS_, DemoVerifier.initAccess());
305304
} catch (ServerException e) {
306305
e.printStackTrace();
307-
result.put(FUNCTION_, DemoParser.newErrorResult(e));
306+
result.put(ACCESS_, DemoParser.newErrorResult(e));
308307
}
309308
}
310309

311-
if (reloadAll || "REQUEST".equals(type)) {
310+
if (reloadAll || "FUNCTION".equals(type)) {
312311
try {
313-
result.put(REQUEST_, StructureUtil.init());
312+
result.put(FUNCTION_, DemoFunctionParser.init());
314313
} catch (ServerException e) {
315314
e.printStackTrace();
316-
result.put(REQUEST_, DemoParser.newErrorResult(e));
315+
result.put(FUNCTION_, DemoParser.newErrorResult(e));
317316
}
318317
}
319318

320-
if (reloadAll || "ACCESS".equals(type)) {
319+
if (reloadAll || "REQUEST".equals(type)) {
321320
try {
322-
result.put(ACCESS_, DemoVerifier.init());
321+
result.put(REQUEST_, DemoVerifier.initRequest());
323322
} catch (ServerException e) {
324323
e.printStackTrace();
325-
result.put(ACCESS_, DemoParser.newErrorResult(e));
324+
result.put(REQUEST_, DemoParser.newErrorResult(e));
326325
}
327326
}
328327

‎APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLConfig.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import apijson.orm.AbstractSQLConfig;
2525

2626

27-
/**SQL配置
27+
/**SQL 配置
2828
* TiDB 用法和 MySQL 一致
2929
* @author Lemon
3030
*/
@@ -38,7 +38,7 @@ public DemoSQLConfig(RequestMethod method, String table) {
3838
}
3939

4040
static {
41-
DEFAULT_DATABASE = DATABASE_MYSQL; //TODO 默认数据库类型,改成你自己的
41+
DEFAULT_DATABASE = DATABASE_MYSQL; //TODO 默认数据库类型,改成你自己的。TiDB, MariaDB, OceanBase 这类兼容 MySQL 的可当做 MySQL 使用
4242
DEFAULT_SCHEMA = "sys"; //TODO 默认模式名,改成你自己的,默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle:
4343

4444
//表名和数据库不一致的,需要配置映射关系。只使用 APIJSONORM 时才需要;
@@ -90,6 +90,8 @@ public String getUserIdKey(String database, String schema, String table) {
9090
}
9191

9292

93+
// 如果 DemoSQLExecutor.getConnection 能拿到连接池的有效 Connection,则这里不需要配置 dbVersion, dbUri, dbAccount, dbPassword
94+
9395
@Override
9496
public String getDBVersion() {
9597
if (isMySQL()) {
@@ -112,7 +114,9 @@ public String getDBVersion() {
112114
@Override
113115
public String getDBUri() {
114116
if (isMySQL()) {
115-
return "jdbc:mysql://localhost:3306"; //TODO 改成你自己的,TiDB 可以当成 MySQL 使用,默认端口为 4000
117+
// 这个是 MySQL 8.0 及以上,要加 userSSL=false return "jdbc:mysql://localhost:3306?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8";
118+
// 以下是 MySQL 5.7 及以下
119+
return "jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"; //TODO 改成你自己的,TiDB 可以当成 MySQL 使用,默认端口为 4000
116120
}
117121
if (isPostgreSQL()) {
118122
return "jdbc:postgresql://localhost:5432/postgres"; //TODO 改成你自己的

‎APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/demo/DemoSQLExecutor.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,17 @@
1414

1515
package apijson.demo;
1616

17+
import java.sql.Connection;
18+
19+
import javax.sql.DataSource;
20+
21+
import apijson.Log;
22+
import apijson.boot.DemoApplication;
1723
import apijson.framework.APIJSONSQLExecutor;
24+
import apijson.orm.SQLConfig;
1825

1926

20-
/**executor for query(read) or update(write) MySQL database
27+
/**SQL 执行
2128
* @author Lemon
2229
*/
2330
public class DemoSQLExecutor extends APIJSONSQLExecutor {
@@ -37,4 +44,25 @@ public class DemoSQLExecutor extends APIJSONSQLExecutor {
3744
// super.removeCache(sql, type);
3845
// }
3946

47+
// 适配连接池,如果这里能拿到连接池的有效 Connection,则 SQLConfig 不需要配置 dbVersion, dbUri, dbAccount, dbPassword
48+
@Override
49+
public Connection getConnection(SQLConfig config) throws Exception {
50+
Connection c = connectionMap.get(config.getDatabase());
51+
if (c == null || c.isClosed()) {
52+
try {
53+
DataSource ds = DemoApplication.getApplicationContext().getBean(DataSource.class);
54+
// 另一种方式是 DruidConfig 初始化获取到 Datasource 后给静态变量 DATA_SOURCE 赋值: ds = DruidConfig.DATA_SOURCE.getConnection();
55+
connectionMap.put(config.getDatabase(), ds == null ? null : ds.getConnection());
56+
} catch (Exception e) {
57+
Log.e(TAG, "DemoSQLExecutor.getConnection try { "
58+
+ "DataSource ds = DemoApplication.getApplicationContext().getBean(DataSource.class); .."
59+
+ "} catch (Exception e) = " + e.getMessage());
60+
}
61+
}
62+
63+
// 必须最后执行 super 方法,因为里面还有事务相关处理。
64+
// 如果这里是 return c,则会导致 增删改 多个对象时只有第一个会 commit,即只有第一个对象成功插入数据库表
65+
return super.getConnection(config);
66+
}
67+
4068
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /