Skip to content

Commit b26fb7d

Browse files
committed
升级SpringBoot和APIJSON框架版本,优化代码结构
- 将SpringBoot版本从2.7.3升级到3.3.4 - 将APIJSON框架版本从5.1.0升级到7.0.3 - 更新相关依赖,如druid、java版本等 - 优化代码结构,提升代码的泛型化和可维护性 - 重构部分类,如ADDObjectParser、ADDSQLConfig等 - 新增SpringContextUtils工具类,用于获取Spring上下文中的Bean
1 parent 288b10e commit b26fb7d

11 files changed

+191
-127
lines changed

pom.xml

+19-11
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.springframework.boot</groupId>
77
<artifactId>spring-boot-starter-parent</artifactId>
8-
<version>2.7.3</version>
8+
<version>3.3.4</version>
99
<relativePath/> <!-- lookup parent from repository -->
1010
</parent>
1111
<groupId>cn.wubo</groupId>
@@ -14,7 +14,7 @@
1414
<name>apijson-dynamic-datasource</name>
1515
<description>apijson-dynamic-datasource</description>
1616
<properties>
17-
<java.version>1.8</java.version>
17+
<java.version>17</java.version>
1818
</properties>
1919
<dependencies>
2020
<dependency>
@@ -43,7 +43,22 @@
4343
<dependency>
4444
<groupId>com.github.APIJSON</groupId>
4545
<artifactId>apijson-framework</artifactId>
46-
<version>5.1.0</version>
46+
<version>7.0.3</version>
47+
</dependency>
48+
49+
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
50+
<dependency>
51+
<groupId>com.h2database</groupId>
52+
<artifactId>h2</artifactId>
53+
<version>2.2.224</version>
54+
</dependency>
55+
56+
<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
57+
<dependency>
58+
<groupId>jakarta.servlet</groupId>
59+
<artifactId>jakarta.servlet-api</artifactId>
60+
<version>6.1.0</version>
61+
<scope>provided</scope>
4762
</dependency>
4863

4964
<!-- 工具类 -->
@@ -59,13 +74,6 @@
5974
<artifactId>spring-boot-starter-aop</artifactId>
6075
</dependency>
6176

62-
<!--hutool工具包-->
63-
<dependency>
64-
<groupId>cn.hutool</groupId>
65-
<artifactId>hutool-all</artifactId>
66-
<version>5.8.6</version>
67-
</dependency>
68-
6977
<!--druid-->
7078
<dependency>
7179
<groupId>org.springframework.boot</groupId>
@@ -74,7 +82,7 @@
7482
<dependency>
7583
<groupId>com.alibaba</groupId>
7684
<artifactId>druid-spring-boot-starter</artifactId>
77-
<version>1.2.12</version>
85+
<version>1.2.23</version>
7886
</dependency>
7987
</dependencies>
8088

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package cn.wubo.apijson.dynamic.datasource;
2+
3+
import lombok.Getter;
4+
import org.springframework.beans.BeansException;
5+
import org.springframework.context.ApplicationContext;
6+
import org.springframework.context.ApplicationContextAware;
7+
import org.springframework.stereotype.Component;
8+
9+
@Component
10+
public class SpringContextUtils implements ApplicationContextAware {
11+
@Getter
12+
private static ApplicationContext applicationContext = null;
13+
14+
@Override
15+
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
16+
if (SpringContextUtils.applicationContext == null) SpringContextUtils.applicationContext = applicationContext;
17+
}
18+
19+
/**
20+
* 根据指定的名称获取Bean对象。
21+
*
22+
* @param name 要获取的Bean对象的名称
23+
* @return 根据名称获取到的Bean对象
24+
*/
25+
public static Object getBean(String name) {
26+
return getApplicationContext().getBean(name);
27+
}
28+
29+
/**
30+
* 获取指定类型的应用上下文中的Bean对象
31+
*
32+
* @param clazz 要获取的Bean对象的类型
33+
* @param <T> Bean对象的类型
34+
* @return 返回指定类型的应用上下文中的Bean对象
35+
*/
36+
public static <T> T getBean(Class<T> clazz) {
37+
return getApplicationContext().getBean(clazz);
38+
}
39+
40+
/**
41+
* 通过name,以及clazz返回指定的Bean
42+
*
43+
* @param name Bean的名称
44+
* @param clazz Bean的类型
45+
* @param <T> Bean的类型参数
46+
* @return 返回指定的Bean
47+
*/
48+
public static <T> T getBean(String name, Class<T> clazz) {
49+
return getApplicationContext().getBean(name, clazz);
50+
}
51+
52+
/**
53+
* 判断应用上下文中是否包含指定名称的bean
54+
*
55+
* @param name 要判断的bean名称
56+
* @return 如果包含指定名称的bean则返回true,否则返回false
57+
*/
58+
public static boolean containsBean(String name) {
59+
return getApplicationContext().containsBean(name);
60+
}
61+
62+
/**
63+
* 判断给定Bean是否是单例
64+
*
65+
* @param name Bean的名称
66+
* @return 如果Bean是单例则返回true,否则返回false
67+
*/
68+
public static boolean isSingleton(String name) {
69+
return getApplicationContext().isSingleton(name);
70+
}
71+
72+
/**
73+
* 获取指定名称的对象类型。
74+
*
75+
* @param name 对象的名称
76+
* @return 指定名称的对象类型
77+
*/
78+
public static Class<?> getType(String name) {
79+
return getApplicationContext().getType(name);
80+
}
81+
}

src/main/java/cn/wubo/apijson/dynamic/datasource/controller/DemoController.java

+83-80
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,25 @@
1111

1212
package cn.wubo.apijson.dynamic.datasource.controller;
1313

14-
import java.net.URLDecoder;
15-
import java.util.ArrayList;
16-
import java.util.List;
17-
import java.util.Map;
18-
19-
import javax.servlet.http.HttpSession;
20-
14+
import apijson.RequestMethod;
15+
import apijson.StringUtil;
16+
import apijson.framework.APIJSONController;
17+
import apijson.orm.Parser;
2118
import cn.wubo.apijson.dynamic.datasource.controller.dto.RecordDTO;
2219
import cn.wubo.apijson.dynamic.datasource.framework.ADDTransactional;
2320
import com.alibaba.fastjson.JSON;
2421
import com.alibaba.fastjson.JSONArray;
2522
import com.alibaba.fastjson.JSONObject;
26-
import org.springframework.web.bind.annotation.GetMapping;
27-
import org.springframework.web.bind.annotation.PathVariable;
28-
import org.springframework.web.bind.annotation.PostMapping;
29-
import org.springframework.web.bind.annotation.RequestBody;
30-
import org.springframework.web.bind.annotation.RequestMapping;
31-
import org.springframework.web.bind.annotation.RequestParam;
32-
import org.springframework.web.bind.annotation.RestController;
23+
import jakarta.servlet.http.HttpSession;
24+
import org.springframework.web.bind.annotation.*;
3325

34-
import apijson.RequestMethod;
35-
import apijson.StringUtil;
36-
import apijson.framework.APIJSONController;
37-
import apijson.orm.Parser;
26+
import java.net.URLDecoder;
27+
import java.util.List;
28+
import java.util.Map;
3829

3930

40-
/**请求路由入口控制器,包括通用增删改查接口等,转交给 APIJSON 的 Parser 来处理
31+
/**
32+
* 请求路由入口控制器,包括通用增删改查接口等,转交给 APIJSON 的 Parser 来处理
4133
* 具体见 SpringBoot 文档
4234
* https://www.springcloud.cc/spring-boot.html#boot-features-spring-mvc
4335
* 以及 APIJSON 通用文档 3.设计规范 3.1 操作方法
@@ -46,76 +38,87 @@
4638
* <br > 1.减少代码 - 客户端无需写HTTP GET,PUT等各种方式的请求代码
4739
* <br > 2.提高性能 - 无需URL encode和decode
4840
* <br > 3.调试方便 - 建议使用 APIAuto(http://apijson.cn/api) 或 Postman
41+
*
4942
* @author Lemon
5043
*/
5144
@RestController
5245
@RequestMapping("")
5346
public class DemoController extends APIJSONController<Long> {
5447

55-
@Override
56-
public Parser<Long> newParser(HttpSession session, RequestMethod method) {
57-
return super.newParser(session, method).setNeedVerify(false); // TODO 这里关闭校验,方便新手快速测试,实际线上项目建议开启
58-
}
48+
@Override
49+
public Parser<Long> newParser(HttpSession session, RequestMethod method) {
50+
return super.newParser(session, method).setNeedVerify(false); // TODO 这里关闭校验,方便新手快速测试,实际线上项目建议开启
51+
}
5952

60-
/**
61-
* 批量处理增删改查
62-
* @param records
63-
* @param session
64-
* @return
65-
*/
66-
@PostMapping(value = "saveBatch") // 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method} 或 Controller 注解 @RequestMapping("crud")
67-
@ADDTransactional
68-
public JSONArray crud(@RequestBody List<RecordDTO> records, HttpSession session) {
69-
JSONArray ja = new JSONArray();
70-
for (RecordDTO rec : records) {
71-
JSONObject jo = JSON.parseObject(super.crud(rec.getMethod(), rec.getData().toJSONString(), session));
72-
if(jo.containsKey("code") && jo.getInteger("code") != 200) throw new RuntimeException(jo.getString("msg"));
73-
ja.add(jo);
74-
}
75-
return ja;
76-
}
53+
/**
54+
* 批量处理增删改查
55+
*
56+
* @param records
57+
* @param session
58+
* @return
59+
*/
60+
@PostMapping(value = "saveBatch")
61+
// 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method} 或 Controller 注解 @RequestMapping("crud")
62+
@ADDTransactional
63+
public JSONArray crud(@RequestBody List<RecordDTO> records, HttpSession session) {
64+
JSONArray ja = new JSONArray();
65+
for (RecordDTO rec : records) {
66+
JSONObject jo = JSON.parseObject(super.crud(rec.getMethod(), rec.getData().toJSONString(), session));
67+
if (jo.containsKey("code") && jo.getInteger("code") != 200) throw new RuntimeException(jo.getString("msg"));
68+
ja.add(jo);
69+
}
70+
return ja;
71+
}
7772

78-
/**增删改查统一接口,这个一个接口可替代 7 个万能通用接口,牺牲一些路由解析性能来提升一点开发效率
79-
* @param method
80-
* @param request
81-
* @param session
82-
* @return
83-
*/
84-
@PostMapping(value = "{method}") // 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method} 或 Controller 注解 @RequestMapping("crud")
85-
@Override
86-
public String crud(@PathVariable String method, @RequestBody String request, HttpSession session) {
87-
return super.crud(method, request, session);
88-
}
73+
/**
74+
* 增删改查统一接口,这个一个接口可替代 7 个万能通用接口,牺牲一些路由解析性能来提升一点开发效率
75+
*
76+
* @param method
77+
* @param request
78+
* @param session
79+
* @return
80+
*/
81+
@PostMapping(value = "{method}")
82+
// 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method} 或 Controller 注解 @RequestMapping("crud")
83+
@Override
84+
public String crud(@PathVariable String method, @RequestBody String request, HttpSession session) {
85+
return super.crud(method, request, session);
86+
}
8987

90-
/**增删改查统一接口,这个一个接口可替代 7 个万能通用接口,牺牲一些路由解析性能来提升一点开发效率
91-
* @param method
92-
* @param tag
93-
* @param params
94-
* @param request
95-
* @param session
96-
* @return
97-
*/
98-
@PostMapping("{method}/{tag}") // 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method}/{tag} 或 Controller 注解 @RequestMapping("crud")
99-
@Override
100-
public String crudByTag(@PathVariable String method, @PathVariable String tag, @RequestParam Map<String, String> params, @RequestBody String request, HttpSession session) {
101-
return super.crudByTag(method, tag, params, request, session);
102-
}
88+
/**
89+
* 增删改查统一接口,这个一个接口可替代 7 个万能通用接口,牺牲一些路由解析性能来提升一点开发效率
90+
*
91+
* @param method
92+
* @param tag
93+
* @param params
94+
* @param request
95+
* @param session
96+
* @return
97+
*/
98+
@PostMapping("{method}/{tag}")
99+
// 如果和其它的接口 URL 冲突,可以加前缀,例如改为 crud/{method}/{tag} 或 Controller 注解 @RequestMapping("crud")
100+
@Override
101+
public String crudByTag(@PathVariable String method, @PathVariable String tag, @RequestParam Map<String, String> params, @RequestBody String request, HttpSession session) {
102+
return super.crudByTag(method, tag, params, request, session);
103+
}
103104

104-
/**获取
105-
* 只为兼容HTTP GET请求,推荐用HTTP POST,可删除
106-
* @param request 只用String,避免encode后未decode
107-
* @param session
108-
* @return
109-
* @see {@link RequestMethod#GET}
110-
*/
111-
@GetMapping("get/{request}")
112-
public String openGet(@PathVariable String request, HttpSession session) {
113-
try {
114-
request = URLDecoder.decode(request, StringUtil.UTF_8);
115-
} catch (Exception e) {
116-
// Parser 会报错
117-
}
118-
return get(request, session);
119-
}
105+
/**
106+
* 获取
107+
* 只为兼容HTTP GET请求,推荐用HTTP POST,可删除
108+
*
109+
* @param request 只用String,避免encode后未decode
110+
* @param session
111+
* @return
112+
* @see {@link RequestMethod#GET}
113+
*/
114+
@GetMapping("get/{request}")
115+
public String openGet(@PathVariable String request, HttpSession session) {
116+
try {
117+
request = URLDecoder.decode(request, StringUtil.UTF_8);
118+
} catch (Exception e) {
119+
// Parser 会报错
120+
}
121+
return get(request, session);
122+
}
120123

121124
}

src/main/java/cn/wubo/apijson/dynamic/datasource/framework/ADDApplication.java

-4
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@
1212
/**
1313
* ADDApplication
1414
* apijson启动入口
15-
*
16-
* @author 吴博
17-
* @version 1.0
18-
* @date 2022.09.05
1915
*/
2016
public class ADDApplication extends APIJSONApplication {
2117

src/main/java/cn/wubo/apijson/dynamic/datasource/framework/ADDApplicationRunner.java

-4
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@
1212
/**
1313
* ADDApplicationRunner
1414
* 项目启动时初始化paijson
15-
*
16-
* @author 吴博
17-
* @version 1.0
18-
* @date 2022.09.05
1915
*/
2016
@Configuration
2117
public class ADDApplicationRunner implements ApplicationRunner {

src/main/java/cn/wubo/apijson/dynamic/datasource/framework/ADDAspect.java

-4
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@
1919
/**
2020
* ADDAspect
2121
* 用于事务管理一致性的提交和回滚
22-
*
23-
* @author 吴博
24-
* @version 1.0
25-
* @date 2022.09.05
2622
*/
2723
@Aspect
2824
@Component

src/main/java/cn/wubo/apijson/dynamic/datasource/framework/ADDConnectionPool.java

-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88
/**
99
* ConnectionPool
1010
* 管理连接池,进行统一提交
11-
*
12-
* @author 吴博
13-
* @version 1.0
14-
* @date 2022.09.05
1511
*/
1612
public class ADDConnectionPool {
1713

0 commit comments

Comments
 (0)