diff --git a/README.md b/README.md
index 5bbf6152588742b35e207eb5a0e9934df9083e7e..11aeb682afa49b32dbddcc3eb741bc32cae3af7b 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,10 @@ dependencies {
详细信息参考`apijson-spring-boot-examples`项目
+## 支持数据源
+
+支持 jdbc, druid, Hikari数据源,详细信息请参考示例项目`apijson-spring-boot-example-datasource`
+
## 所有的配置属性
diff --git a/apijson-spring-boot-autoconfigure/pom.xml b/apijson-spring-boot-autoconfigure/pom.xml
index 1c2ec46d3a2f01a7f6c35d0e4947c071d652c1ea..294d579a19b8cc2778f9e3cb16962e21f4306bb3 100644
--- a/apijson-spring-boot-autoconfigure/pom.xml
+++ b/apijson-spring-boot-autoconfigure/pom.xml
@@ -32,6 +32,11 @@
spring-webmvc
true
+
+ org.springframework
+ spring-beans
+ true
+
cn.hutool
hutool-core
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/fastjson2/Fastjson2SimpleCallback.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/fastjson2/Fastjson2SimpleCallback.java
index 17ef1171002e007484170770729fff59fae23ff6..87fe4a7a5749c0805ee34ca6dbf02975463e8833 100644
--- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/fastjson2/Fastjson2SimpleCallback.java
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/fastjson2/Fastjson2SimpleCallback.java
@@ -13,7 +13,7 @@ import java.util.List;
import java.util.Map;
/**
- * {@link AbstractSQLConfig.SimpleCallback} 子类,默认实现
+ * {@link AbstractSQLConfig.SimpleCallback} 子类,fastjson2回调类
*
* @author yangyunjiao
* @see AbstractSQLConfig.Callback
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonAutoConfiguration.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonAutoConfiguration.java
index 2f8d6d279fc41af6a1d04b8d66071b329d5c5c74..ba2ad4ff50403d92b2395e95983aacad7e3a9121 100644
--- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonAutoConfiguration.java
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonAutoConfiguration.java
@@ -63,7 +63,7 @@ public class ApijsonAutoConfiguration {
/**
- * 配置统计api访问前缀
+ * 配置rest api访问前缀
* @return {@link WebMvcConfigurer} 实例
*/
@Bean
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonInitAutoConfiguration.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonInitAutoConfiguration.java
index dbc6f0b503c2800148f0495d0dfc5edde588a7dd..4948178eb04671391360e2b57b8afbcc49b4b548 100644
--- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonInitAutoConfiguration.java
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonInitAutoConfiguration.java
@@ -1,18 +1,15 @@
package io.yunjiao.apijson.spring.boot.autoconfigure;
-import apijson.framework.*;
-import io.yunjiao.apijson.spring.boot.ApijsonFunctionParserConfigurer;
-import io.yunjiao.apijson.spring.boot.ApijsonSqlConfigConfigurer;
-import io.yunjiao.apijson.spring.boot.ApijsonVerifierConfigurer;
-import io.yunjiao.apijson.util.ApijsonUtils;
+import io.yunjiao.apijson.spring.boot.bean.ApijsonInitializingBean;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonFunctionParserConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonSqlConfigConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonVerifierConfigurer;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfiguration;
-
-import java.rmi.ServerException;
-import java.util.stream.Collectors;
+import org.springframework.context.annotation.Bean;
/**
* APIJSON初始化自动配置
@@ -23,125 +20,38 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
@AutoConfiguration
public class ApijsonInitAutoConfiguration {
- /**
- * 解析器配置
- */
- private final ApijsonParserProperties parserProperties;
-
- /**
- * 校验器配置
- */
- private final ApijsonVerifierProperties verifierProperties;
-
- /**
- * sql配置
- */
- private final ApijsonSqlProperties sqlProperties;
-
- /**
- * sql配置器用户配置
- */
- private final ObjectProvider sqlConfigConfigurers;
-
- /**
- * 校验器用户配置
- */
- private final ObjectProvider apijsonVerifierConfigurers;
-
- /**
- * 远程函数解析器用户配置
- */
- private final ObjectProvider apijsonFunctionParserConfigurers;
-
- /**
- * {@link PostConstruct} 注解的方法,实现静态属性配置
- *
- * @throws ServerException 强制加载类失败
- */
@PostConstruct
- public void postConstruct() throws ServerException {
- forceInitClass();
- initSqlConfig();
- initSqlExecutor();
- initVerifier();
- initRequestParaser();
- initObjectParser();
- initFunctionParser();
- }
-
- /**
- * 强迫加载类,执行静态(static {})代码块逻辑
- */
- void forceInitClass() {
- ApijsonUtils.forceInit(APIJSONApplication.class);
- ApijsonUtils.forceInit(APIJSONConstant.class);
- ApijsonUtils.forceInit(APIJSONController.class);
- ApijsonUtils.forceInit(APIJSONFunctionParser.class);
- ApijsonUtils.forceInit(APIJSONObjectParser.class);
- ApijsonUtils.forceInit(APIJSONParser.class);
- ApijsonUtils.forceInit(APIJSONSQLConfig.class);
- ApijsonUtils.forceInit(APIJSONSQLExecutor.class);
- ApijsonUtils.forceInit(APIJSONVerifier.class);
- ApijsonUtils.forceInit(ColumnUtil.class);
+ public void postConstruct() {
+ log.info("Apijson Init AutoConfiguration");
}
- /**
- * 初始化sql配置器静态属性
- */
- void initSqlConfig() {
- log.info( "APIJSON Sql Config Init");
-
- ApijsonSqlProperties.Config config = sqlProperties.getConfig();
- ApijsonUtils.buildAPIJSONSQLConfigStatic(config, sqlConfigConfigurers.orderedStream().collect(Collectors.toList()));
- ColumnUtil.init();
- }
-
- /**
- * 初始化sql执行器静态属性
- */
- void initSqlExecutor() {
- log.info("APIJSON Sql Executor Init");
-
- ApijsonSqlProperties.Executor executor = sqlProperties.getExecutor();
- ApijsonUtils.buildAPIJSONSQLExecutorStatic(executor);
- }
-
- /**
- * 初始化校验器器静态属性
- */
- void initVerifier() throws ServerException {
- log.info("APIJSON Verifier Init");
-
- ApijsonUtils.buildAPIJSONVerifierStatic(verifierProperties, apijsonVerifierConfigurers.orderedStream().collect(Collectors.toList()));
- }
/**
- * 初始化请求解析器静态属性
- */
- void initRequestParaser() {
- log.info("APIJSON Request Parser Init");
-
- ApijsonParserProperties.Request request = parserProperties.getRequest();
- ApijsonUtils.buildAPIJSONParserStatic(request);
- }
-
- /**
- * 初始化对象解析器静态属性
- */
- void initObjectParser() {
- log.info("APIJSON Object Parser Init");
-
- ApijsonParserProperties.Object object = parserProperties.getObject();
- ApijsonUtils.buildAPIJSONObjectParserStatic(object);
+ * {@link ApijsonInitializingBean} 初始化
+ *
+ * @param parserProperties 解析器配置
+ * @param verifierProperties 校验器配置
+ * @param sqlProperties sql配置
+ * @param sqlConfigConfigurers sql配置器用户配置
+ * @param apijsonVerifierConfigurers 校验器用户配置
+ * @param apijsonFunctionParserConfigurers 远程函数解析器用户配置
+ * @return 实例
+ * @see ApijsonInitializingBean
+ */
+ @Bean
+ ApijsonInitializingBean apijsonInitializingBean(ApijsonParserProperties parserProperties,
+ ApijsonVerifierProperties verifierProperties,
+ ApijsonSqlProperties sqlProperties,
+ ObjectProvider sqlConfigConfigurers,
+ ObjectProvider apijsonVerifierConfigurers,
+ ObjectProvider apijsonFunctionParserConfigurers) {
+ ApijsonInitializingBean bean = new ApijsonInitializingBean(parserProperties, verifierProperties,
+ sqlProperties, sqlConfigConfigurers,apijsonVerifierConfigurers,apijsonFunctionParserConfigurers);
+ if (log.isDebugEnabled()) {
+ log.debug("Configure Bean [Apijson Initializing Bean]");
+ }
+ return bean;
}
- /**
- *
- */
- void initFunctionParser() {
- log.info("APIJSON Function Parser Init");
- ApijsonParserProperties.Function function = parserProperties.getFunction();
- ApijsonUtils.buildAPIJSONFunctionParserStatic(function, apijsonFunctionParserConfigurers.orderedStream().collect(Collectors.toList()));
- }
}
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/Fastjson2ApplicationAutoConfiguration.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/Fastjson2ApplicationAutoConfiguration.java
index c8028966ee1c02a4dc62e64a5bd642f454212a2e..48f5af2836a8f854a9ffd9a6286ef381480ce405 100644
--- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/Fastjson2ApplicationAutoConfiguration.java
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/Fastjson2ApplicationAutoConfiguration.java
@@ -1,17 +1,20 @@
package io.yunjiao.apijson.spring.boot.autoconfigure;
-import apijson.Log;
-import apijson.fastjson2.*;
-import io.yunjiao.apijson.fastjson2.*;
+import apijson.fastjson2.APIJSONApplication;
+import io.yunjiao.apijson.fastjson2.Fastjson2Creator;
+import io.yunjiao.apijson.fastjson2.Fastjson2EXtRestController;
+import io.yunjiao.apijson.fastjson2.Fastjson2RestController;
+import io.yunjiao.apijson.fastjson2.Fastjson2SimpleCallback;
import io.yunjiao.apijson.orm.IdKeyStrategy;
import io.yunjiao.apijson.orm.NewIdStrategy;
import io.yunjiao.apijson.spring.boot.autoconfigure.condition.ApllicationCondition;
+import io.yunjiao.apijson.spring.boot.bean.Fastjson2InitializingBean;
import io.yunjiao.apijson.util.ApijsonConsts;
-import io.yunjiao.apijson.util.ApijsonUtils;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
@@ -28,48 +31,24 @@ import javax.sql.DataSource;
@RequiredArgsConstructor
@AutoConfiguration(after = {ApijsonInitAutoConfiguration.class})
@Conditional(ApllicationCondition.OnFastjson2.class)
+@ConditionalOnClass({APIJSONApplication.class})
public class Fastjson2ApplicationAutoConfiguration {
- /**
- * 主键名称策略
- */
- private final IdKeyStrategy idKeyStrategy;
-
- /**
- * 主键生成策略
- */
- private final NewIdStrategy newIdStrategy;
-
- /**
- * 数据源
- */
- private final DataSource dataSource;
-
- /**
- * sql配置属性
- */
- private final ApijsonSqlProperties sqlProperties;
-
- /**
- * 配置属性
- */
- private final ApijsonProperties properties;
- /**
- * {@link PostConstruct} 注解方法
- */
@PostConstruct
public void postConstruct() {
log.info("Fastjson2 Application Auto Configuration");
- forceInitClass();
}
/**
- * Fastjson2创建器
- * @return {@link Fastjson2Creator}实例
+ * Fastjson2创建器 实例化
+ * @param dataSource 数据源
+ * @param sqlProperties sql配置属性
+ * @return {@link Fastjson2Creator} 实例
*/
@Bean
@ConditionalOnMissingBean
- Fastjson2Creator fastjson2Creator() {
+ Fastjson2Creator fastjson2Creator(DataSource dataSource,
+ ApijsonSqlProperties sqlProperties) {
Fastjson2Creator bean = new Fastjson2Creator(dataSource, sqlProperties);
if (log.isDebugEnabled()) {
log.debug("Configure Bean [Fastjson2 Creator]");
@@ -78,13 +57,15 @@ public class Fastjson2ApplicationAutoConfiguration {
}
/**
- * 回调函数
- *
- * @return {@link Fastjson2SimpleCallback}实例
+ * fastjson2回调 实例化
+ * @param idKeyStrategy 主键名称策略
+ * @param newIdStrategy 主键生成策略
+ * @return {@link Fastjson2SimpleCallback} 实例
*/
@Bean
@ConditionalOnMissingBean
- Fastjson2SimpleCallback fastjson2SimpleCallback() {
+ Fastjson2SimpleCallback fastjson2SimpleCallback(IdKeyStrategy idKeyStrategy,
+ NewIdStrategy newIdStrategy) {
Fastjson2SimpleCallback bean = new Fastjson2SimpleCallback(idKeyStrategy, newIdStrategy);
if (log.isDebugEnabled()) {
log.debug("Configure Bean [Fastjson2 Simple Callback]");
@@ -92,16 +73,22 @@ public class Fastjson2ApplicationAutoConfiguration {
return bean;
}
-
- void forceInitClass() {
- ApijsonUtils.forceInit(APIJSONApplication.class);
- ApijsonUtils.forceInit(APIJSONController.class);
- ApijsonUtils.forceInit(APIJSONFunctionParser.class);
- ApijsonUtils.forceInit(APIJSONObjectParser.class);
- ApijsonUtils.forceInit(APIJSONParser.class);
- ApijsonUtils.forceInit(APIJSONSQLConfig.class);
- ApijsonUtils.forceInit(APIJSONSQLExecutor.class);
- ApijsonUtils.forceInit(APIJSONVerifier.class);
+ /**
+ * Fastjson2 应用初始化Bean 实例化
+ * @param fastjson2SimpleCallback fastjson2回调
+ * @param fastjson2Creator Fastjson2创建器
+ * @param properties APIJSON 配置属性
+ * @return @return {@link Fastjson2InitializingBean} 实例
+ */
+ @Bean
+ Fastjson2InitializingBean fastjson2InitializingBean(Fastjson2SimpleCallback fastjson2SimpleCallback,
+ Fastjson2Creator fastjson2Creator,
+ ApijsonProperties properties) {
+ Fastjson2InitializingBean bean = new Fastjson2InitializingBean(fastjson2SimpleCallback, fastjson2Creator, properties);
+ if (log.isDebugEnabled()) {
+ log.debug("Configure Bean [Fastjson2 Initializing Bean]");
+ }
+ return bean;
}
/**
@@ -145,29 +132,4 @@ public class Fastjson2ApplicationAutoConfiguration {
}
}
- /**
- * 初始化
- */
- @RequiredArgsConstructor
- @AutoConfiguration
- static
- class Fastjson2ApplicationInitConfiguration {
- private final Fastjson2SimpleCallback fastjson2SimpleCallback;
-
- private final Fastjson2Creator fastjson2Creator;
-
- private final ApijsonProperties properties;
-
- @PostConstruct
- public void postConstruct() throws Exception {
- log.info("Fastjson2 Application Init");
-
- Fastjson2SqlConfig.SIMPLE_CALLBACK = fastjson2SimpleCallback;
- Log.DEBUG = properties.isLogDebug();
- APIJSONApplication.init(properties.isShutdownWhenServerError(), fastjson2Creator);
- if (properties.isEnableOnStartup()) {
- Fastjson2Verifier.init(properties.isShutdownWhenServerError(), fastjson2Creator);
- }
- }
- }
}
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/GsonApplicationAutoConfiguration.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/GsonApplicationAutoConfiguration.java
index 364bf388c675cb25574e549a21a1a93b462420f3..1017b51362014c30c0262dafe3a84128a43fb9cd 100644
--- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/GsonApplicationAutoConfiguration.java
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/GsonApplicationAutoConfiguration.java
@@ -1,16 +1,20 @@
package io.yunjiao.apijson.spring.boot.autoconfigure;
-import apijson.gson.*;
-import io.yunjiao.apijson.gson.*;
+import apijson.gson.APIJSONApplication;
+import io.yunjiao.apijson.gson.GsonCreator;
+import io.yunjiao.apijson.gson.GsonEXtRestController;
+import io.yunjiao.apijson.gson.GsonRestController;
+import io.yunjiao.apijson.gson.GsonSimpleCallback;
import io.yunjiao.apijson.orm.IdKeyStrategy;
import io.yunjiao.apijson.orm.NewIdStrategy;
import io.yunjiao.apijson.spring.boot.autoconfigure.condition.ApllicationCondition;
+import io.yunjiao.apijson.spring.boot.bean.GsonInitializingBean;
import io.yunjiao.apijson.util.ApijsonConsts;
-import io.yunjiao.apijson.util.ApijsonUtils;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
@@ -27,27 +31,24 @@ import javax.sql.DataSource;
@RequiredArgsConstructor
@AutoConfiguration(after = {ApijsonInitAutoConfiguration.class})
@Conditional(ApllicationCondition.OnGson.class)
+@ConditionalOnClass({APIJSONApplication.class})
public class GsonApplicationAutoConfiguration {
- private final IdKeyStrategy idKeyStrategy;
-
- private final NewIdStrategy newIdStrategy;
-
- private final DataSource dataSource;
-
- private final ApijsonSqlProperties sqlProperties;
-
- private final ApijsonProperties properties;
-
@PostConstruct
public void postConstruct() {
log.info("Gson Application Auto Configuration");
- forceInitClass();
}
+ /**
+ * Gson创建器 实例化
+ * @param dataSource 数据源
+ * @param sqlProperties sql配置属性
+ * @return {@link GsonCreator} 实例
+ */
@Bean
@ConditionalOnMissingBean
- GsonCreator gsonCreator() {
+ GsonCreator gsonCreator(DataSource dataSource,
+ ApijsonSqlProperties sqlProperties) {
GsonCreator bean = new GsonCreator(dataSource, sqlProperties);
if (log.isDebugEnabled()) {
log.debug("Configure Bean [Gson Creator]");
@@ -55,9 +56,16 @@ public class GsonApplicationAutoConfiguration {
return bean;
}
+ /**
+ * Gson回调 实例化
+ * @param idKeyStrategy 主键名称策略
+ * @param newIdStrategy 主键生成策略
+ * @return {@link GsonSimpleCallback} 实例
+ */
@Bean
@ConditionalOnMissingBean
- GsonSimpleCallback gsonSimpleCallback() {
+ GsonSimpleCallback gsonSimpleCallback(IdKeyStrategy idKeyStrategy,
+ NewIdStrategy newIdStrategy) {
GsonSimpleCallback bean = new GsonSimpleCallback(idKeyStrategy, newIdStrategy);
if (log.isDebugEnabled()) {
log.debug("Configure Bean [Gson Simple Callback]");
@@ -65,15 +73,22 @@ public class GsonApplicationAutoConfiguration {
return bean;
}
- void forceInitClass() {
- ApijsonUtils.forceInit(APIJSONApplication.class);
- ApijsonUtils.forceInit(APIJSONController.class);
- ApijsonUtils.forceInit(APIJSONFunctionParser.class);
- ApijsonUtils.forceInit(APIJSONObjectParser.class);
- ApijsonUtils.forceInit(APIJSONParser.class);
- ApijsonUtils.forceInit(APIJSONSQLConfig.class);
- ApijsonUtils.forceInit(APIJSONSQLExecutor.class);
- ApijsonUtils.forceInit(APIJSONVerifier.class);
+ /**
+ * Gson 应用初始化Bean 实例化
+ * @param gsonSimpleCallback fastjson2回调
+ * @param gsonCreator Fastjson2创建器
+ * @param properties APIJSON 配置属性
+ * @return @return {@link GsonInitializingBean} 实例
+ */
+ @Bean
+ GsonInitializingBean gsonInitializingBean(GsonSimpleCallback gsonSimpleCallback,
+ GsonCreator gsonCreator,
+ ApijsonProperties properties) {
+ GsonInitializingBean bean = new GsonInitializingBean(gsonSimpleCallback, gsonCreator, properties);
+ if (log.isDebugEnabled()) {
+ log.debug("Configure Bean [Fastjson2 Initializing Bean]");
+ }
+ return bean;
}
/**
@@ -106,29 +121,4 @@ public class GsonApplicationAutoConfiguration {
return bean;
}
}
-
- /**
- * 初始化
- */
- @RequiredArgsConstructor
- @AutoConfiguration
- static
- class GsonApplicationInitConfiguration {
- private final GsonSimpleCallback gsonSimpleCallback;
-
- private final GsonCreator gsonCreator;
-
- private final ApijsonProperties properties;
-
- @PostConstruct
- public void postConstruct() throws Exception {
- log.info("Gson Application Init");
-
- GsonSqlConfig.SIMPLE_CALLBACK = gsonSimpleCallback;
- APIJSONApplication.init(properties.isShutdownWhenServerError(), gsonCreator);
- if (properties.isEnableOnStartup()) {
- GsonVerifier.init(false, gsonCreator);
- }
- }
- }
}
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/bean/ApijsonInitializingBean.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/bean/ApijsonInitializingBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..f0850b1f739abd604ca019686c0bf5953e581027
--- /dev/null
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/bean/ApijsonInitializingBean.java
@@ -0,0 +1,128 @@
+package io.yunjiao.apijson.spring.boot.bean;
+
+import apijson.framework.*;
+import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonParserProperties;
+import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonSqlProperties;
+import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonVerifierProperties;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonFunctionParserConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonSqlConfigConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonVerifierConfigurer;
+import io.yunjiao.apijson.util.ApijsonUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.ObjectProvider;
+
+import java.util.stream.Collectors;
+
+/**
+ * APIJSON初始化Bean, 主要初始化静态属性
+ *
+ * @author yangyunjiao
+ */
+@RequiredArgsConstructor
+public class ApijsonInitializingBean implements InitializingBean {
+ /**
+ * 解析器配置
+ */
+ private final ApijsonParserProperties parserProperties;
+
+ /**
+ * 校验器配置
+ */
+ private final ApijsonVerifierProperties verifierProperties;
+
+ /**
+ * sql配置
+ */
+ private final ApijsonSqlProperties sqlProperties;
+
+ /**
+ * sql配置器用户配置
+ */
+ private final ObjectProvider sqlConfigConfigurers;
+
+ /**
+ * 校验器用户配置
+ */
+ private final ObjectProvider apijsonVerifierConfigurers;
+
+ /**
+ * 远程函数解析器用户配置
+ */
+ private final ObjectProvider apijsonFunctionParserConfigurers;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ forceInitClass();
+ initSqlConfig();
+ initSqlExecutor();
+ initVerifier();
+ initRequestParaser();
+ initObjectParser();
+ initFunctionParser();
+ }
+
+ /**
+ * 强迫加载类,执行静态(static {})代码块逻辑
+ */
+ void forceInitClass() {
+ ApijsonUtils.forceInit(APIJSONApplication.class);
+ ApijsonUtils.forceInit(APIJSONConstant.class);
+ ApijsonUtils.forceInit(APIJSONController.class);
+ ApijsonUtils.forceInit(APIJSONFunctionParser.class);
+ ApijsonUtils.forceInit(APIJSONObjectParser.class);
+ ApijsonUtils.forceInit(APIJSONParser.class);
+ ApijsonUtils.forceInit(APIJSONSQLConfig.class);
+ ApijsonUtils.forceInit(APIJSONSQLExecutor.class);
+ ApijsonUtils.forceInit(APIJSONVerifier.class);
+ ApijsonUtils.forceInit(ColumnUtil.class);
+ }
+
+ /**
+ * 初始化sql配置器静态属性
+ */
+ void initSqlConfig() {
+ ApijsonSqlProperties.Config config = sqlProperties.getConfig();
+ ApijsonUtils.buildAPIJSONSQLConfigStatic(config, sqlConfigConfigurers.orderedStream().collect(Collectors.toList()));
+ ColumnUtil.init();
+ }
+
+ /**
+ * 初始化sql执行器静态属性
+ */
+ void initSqlExecutor() {
+ ApijsonSqlProperties.Executor executor = sqlProperties.getExecutor();
+ ApijsonUtils.buildAPIJSONSQLExecutorStatic(executor);
+ }
+
+ /**
+ * 初始化校验器器静态属性
+ */
+ void initVerifier() {
+ ApijsonUtils.buildAPIJSONVerifierStatic(verifierProperties, apijsonVerifierConfigurers.orderedStream().collect(Collectors.toList()));
+ }
+
+ /**
+ * 初始化请求解析器静态属性
+ */
+ void initRequestParaser() {
+ ApijsonParserProperties.Request request = parserProperties.getRequest();
+ ApijsonUtils.buildAPIJSONParserStatic(request);
+ }
+
+ /**
+ * 初始化对象解析器静态属性
+ */
+ void initObjectParser() {
+ ApijsonParserProperties.Object object = parserProperties.getObject();
+ ApijsonUtils.buildAPIJSONObjectParserStatic(object);
+ }
+
+ /**
+ *
+ */
+ void initFunctionParser() {
+ ApijsonParserProperties.Function function = parserProperties.getFunction();
+ ApijsonUtils.buildAPIJSONFunctionParserStatic(function, apijsonFunctionParserConfigurers.orderedStream().collect(Collectors.toList()));
+ }
+}
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/bean/Fastjson2InitializingBean.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/bean/Fastjson2InitializingBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e2209ca9da050f267b9def6138317a1b978d92d
--- /dev/null
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/bean/Fastjson2InitializingBean.java
@@ -0,0 +1,60 @@
+package io.yunjiao.apijson.spring.boot.bean;
+
+import apijson.Log;
+import apijson.fastjson2.*;
+import io.yunjiao.apijson.fastjson2.Fastjson2Creator;
+import io.yunjiao.apijson.fastjson2.Fastjson2SimpleCallback;
+import io.yunjiao.apijson.fastjson2.Fastjson2SqlConfig;
+import io.yunjiao.apijson.fastjson2.Fastjson2Verifier;
+import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonProperties;
+import io.yunjiao.apijson.util.ApijsonUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.InitializingBean;
+
+/**
+ * Fastjson2 应用初始化Bean
+ *
+ * @author yangyunjiao
+ */
+@RequiredArgsConstructor
+public class Fastjson2InitializingBean implements InitializingBean {
+ private final Fastjson2SimpleCallback fastjson2SimpleCallback;
+
+ private final Fastjson2Creator fastjson2Creator;
+
+ private final ApijsonProperties properties;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ forceInitClass();
+ initAPIJSONApplication();
+ }
+
+ /**
+ * 强迫加载类,执行静态代码块
+ */
+ void forceInitClass() {
+ ApijsonUtils.forceInit(APIJSONApplication.class);
+ ApijsonUtils.forceInit(APIJSONController.class);
+ ApijsonUtils.forceInit(APIJSONFunctionParser.class);
+ ApijsonUtils.forceInit(APIJSONObjectParser.class);
+ ApijsonUtils.forceInit(APIJSONParser.class);
+ ApijsonUtils.forceInit(APIJSONSQLConfig.class);
+ ApijsonUtils.forceInit(APIJSONSQLExecutor.class);
+ ApijsonUtils.forceInit(APIJSONVerifier.class);
+ }
+
+ /**
+ * {@link APIJSONApplication} 初始化
+ *
+ * @throws Exception 初始化化异常
+ */
+ void initAPIJSONApplication() throws Exception {
+ Fastjson2SqlConfig.SIMPLE_CALLBACK = fastjson2SimpleCallback;
+ Log.DEBUG = properties.isLogDebug();
+ APIJSONApplication.init(properties.isShutdownWhenServerError(), fastjson2Creator);
+ if (properties.isEnableOnStartup()) {
+ Fastjson2Verifier.init(properties.isShutdownWhenServerError(), fastjson2Creator);
+ }
+ }
+}
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/bean/GsonInitializingBean.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/bean/GsonInitializingBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..e06d9140ce5467108b9ca3f283cf275175ddb310
--- /dev/null
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/bean/GsonInitializingBean.java
@@ -0,0 +1,53 @@
+package io.yunjiao.apijson.spring.boot.bean;
+
+import apijson.gson.*;
+import io.yunjiao.apijson.gson.GsonCreator;
+import io.yunjiao.apijson.gson.GsonSimpleCallback;
+import io.yunjiao.apijson.gson.GsonSqlConfig;
+import io.yunjiao.apijson.gson.GsonVerifier;
+import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonProperties;
+import io.yunjiao.apijson.util.ApijsonUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.InitializingBean;
+
+/**
+ * Fastjson2 应用初始化Bean
+ *
+ * @author yangyunjiao
+ */
+@RequiredArgsConstructor
+public class GsonInitializingBean implements InitializingBean {
+ private final GsonSimpleCallback gsonSimpleCallback;
+
+ private final GsonCreator gsonCreator;
+
+ private final ApijsonProperties properties;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ forceInitClass();
+ initAPIJSONApplication();
+ }
+
+ /**
+ * 强迫加载类,执行静态代码块
+ */
+ void forceInitClass() {
+ ApijsonUtils.forceInit(APIJSONApplication.class);
+ ApijsonUtils.forceInit(APIJSONController.class);
+ ApijsonUtils.forceInit(APIJSONFunctionParser.class);
+ ApijsonUtils.forceInit(APIJSONObjectParser.class);
+ ApijsonUtils.forceInit(APIJSONParser.class);
+ ApijsonUtils.forceInit(APIJSONSQLConfig.class);
+ ApijsonUtils.forceInit(APIJSONSQLExecutor.class);
+ ApijsonUtils.forceInit(APIJSONVerifier.class);
+ }
+
+ void initAPIJSONApplication() throws Exception {
+ GsonSqlConfig.SIMPLE_CALLBACK = gsonSimpleCallback;
+ APIJSONApplication.init(properties.isShutdownWhenServerError(), gsonCreator);
+ if (properties.isEnableOnStartup()) {
+ GsonVerifier.init(false, gsonCreator);
+ }
+ }
+}
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/ApijsonFunctionParserConfigurer.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonFunctionParserConfigurer.java
similarity index 91%
rename from apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/ApijsonFunctionParserConfigurer.java
rename to apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonFunctionParserConfigurer.java
index b3ba3f91dca87129c4e03221969c7d3241b0e9e8..770193b63c9d0327f8442b7c2c89ed6567e74579 100644
--- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/ApijsonFunctionParserConfigurer.java
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonFunctionParserConfigurer.java
@@ -1,4 +1,4 @@
-package io.yunjiao.apijson.spring.boot;
+package io.yunjiao.apijson.spring.boot.configurer;
import apijson.orm.script.ScriptExecutor;
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/ApijsonSqlConfigConfigurer.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonSqlConfigConfigurer.java
similarity index 93%
rename from apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/ApijsonSqlConfigConfigurer.java
rename to apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonSqlConfigConfigurer.java
index 3365d0fb32534503e0b73bb82e2863322b88d80a..f895159a71f25fb092bcca26fb085f080a78d6f1 100644
--- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/ApijsonSqlConfigConfigurer.java
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonSqlConfigConfigurer.java
@@ -1,4 +1,4 @@
-package io.yunjiao.apijson.spring.boot;
+package io.yunjiao.apijson.spring.boot.configurer;
import java.util.List;
import java.util.Map;
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/ApijsonVerifierConfigurer.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonVerifierConfigurer.java
similarity index 96%
rename from apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/ApijsonVerifierConfigurer.java
rename to apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonVerifierConfigurer.java
index 82a4ac98e3ac3cd771d8decd1254c730651f75ba..a6874f02564e00af9d072ecf7463e5d6bef5a482 100644
--- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/ApijsonVerifierConfigurer.java
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonVerifierConfigurer.java
@@ -1,4 +1,4 @@
-package io.yunjiao.apijson.spring.boot;
+package io.yunjiao.apijson.spring.boot.configurer;
import apijson.RequestMethod;
import apijson.orm.Entry;
diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/util/ApijsonUtils.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/util/ApijsonUtils.java
index 09f232acf0c8721b03a577b706c87775fabf92c5..f761e21ad8f6364d75c2c25d39e7df83b2bdab5d 100644
--- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/util/ApijsonUtils.java
+++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/util/ApijsonUtils.java
@@ -7,9 +7,9 @@ import apijson.orm.AbstractSQLConfig;
import apijson.orm.AbstractVerifier;
import apijson.orm.Entry;
import apijson.orm.script.ScriptExecutor;
-import io.yunjiao.apijson.spring.boot.ApijsonFunctionParserConfigurer;
-import io.yunjiao.apijson.spring.boot.ApijsonSqlConfigConfigurer;
-import io.yunjiao.apijson.spring.boot.ApijsonVerifierConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonFunctionParserConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonSqlConfigConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonVerifierConfigurer;
import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonParserProperties;
import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonSqlProperties;
import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonVerifierProperties;
@@ -50,11 +50,12 @@ public final class ApijsonUtils {
return;
}
- if (!(o instanceof Collection> collection)) {
+ if (!(o instanceof Collection>)) {
throw new IllegalArgumentException(o + " 不符合 Array 数组类型! 结构必须是 [] !");
}
int i = -1;
+ Collection> collection = (Collection>)o;
for (Object item : collection) {
i++;
checkFn.accept(item, i);
diff --git a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonInitAutoConfigurationTest.java b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonInitAutoConfigurationTest.java
index cf5a870a4b7c1f737b8b02f0fa033feb1b5f05e5..70f8f3db24f975e3954cca82675c6953d98bc411 100644
--- a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonInitAutoConfigurationTest.java
+++ b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonInitAutoConfigurationTest.java
@@ -1,8 +1,9 @@
package io.yunjiao.apijson.spring.boot.autoconfigure;
-import io.yunjiao.apijson.spring.boot.ApijsonFunctionParserConfigurer;
-import io.yunjiao.apijson.spring.boot.ApijsonSqlConfigConfigurer;
-import io.yunjiao.apijson.spring.boot.ApijsonVerifierConfigurer;
+import io.yunjiao.apijson.spring.boot.bean.ApijsonInitializingBean;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonFunctionParserConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonSqlConfigConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonVerifierConfigurer;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
@@ -34,6 +35,7 @@ public class ApijsonInitAutoConfigurationTest {
assertThat(context).doesNotHaveBean(ApijsonSqlConfigConfigurer.class);
assertThat(context).doesNotHaveBean(ApijsonVerifierConfigurer.class);
assertThat(context).doesNotHaveBean(ApijsonFunctionParserConfigurer.class);
+ assertThat(context).hasSingleBean(ApijsonInitializingBean.class);
});
}
@@ -45,6 +47,7 @@ public class ApijsonInitAutoConfigurationTest {
assertThat(context).hasSingleBean(ApijsonSqlConfigConfigurer.class);
assertThat(context).hasSingleBean(ApijsonVerifierConfigurer.class);
assertThat(context).hasSingleBean(ApijsonFunctionParserConfigurer.class);
+ assertThat(context).hasSingleBean(ApijsonInitializingBean.class);
});
}
diff --git a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/Fastjson2ApplicationAutoConfigurationIT.java b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/Fastjson2ApplicationAutoConfigurationIT.java
index e7bf7a3276c2d853ebe9f6dca602c0b1b70f2b77..f30e003788672c114b03130a73e53baae00422bd 100644
--- a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/Fastjson2ApplicationAutoConfigurationIT.java
+++ b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/Fastjson2ApplicationAutoConfigurationIT.java
@@ -2,6 +2,7 @@ package io.yunjiao.apijson.spring.boot.autoconfigure;
import io.yunjiao.apijson.fastjson2.Fastjson2Creator;
import io.yunjiao.apijson.fastjson2.Fastjson2SimpleCallback;
+import io.yunjiao.apijson.spring.boot.bean.Fastjson2InitializingBean;
import io.yunjiao.apijson.util.ApijsonConsts;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -25,7 +26,7 @@ public class Fastjson2ApplicationAutoConfigurationIT {
}
@Test
- public void testNewIdSnowflakeStrategy() {
+ public void testDefault() {
applicationContextRunner
.withPropertyValues(ApijsonConsts.PROPERTY_PREFIX_APIJSON_APPLICATION + "=" + ApijsonProperties.Application.fastjson2,
ApijsonConsts.PROPERTY_PREFIX_APIJSON_NEWIDSTRATEGY + "=" + ApijsonProperties.NewIdStrategy.timestamp,
@@ -37,6 +38,7 @@ public class Fastjson2ApplicationAutoConfigurationIT {
.run(context -> {
assertThat(context).hasSingleBean(Fastjson2Creator.class);
assertThat(context).hasSingleBean(Fastjson2SimpleCallback.class);
+ assertThat(context).hasSingleBean(Fastjson2InitializingBean.class);
});
}
diff --git a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/GsonApplicationAutoConfigurationIT.java b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/GsonApplicationAutoConfigurationIT.java
index 1cefbb9e8d3c13b08d1f1b9384bcc9fcfab22b10..525d9e5215b67b2de96eb9e431b08e07fe600dae 100644
--- a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/GsonApplicationAutoConfigurationIT.java
+++ b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/GsonApplicationAutoConfigurationIT.java
@@ -4,6 +4,7 @@ package io.yunjiao.apijson.spring.boot.autoconfigure;
import io.yunjiao.apijson.gson.GsonCreator;
import io.yunjiao.apijson.gson.GsonRestController;
import io.yunjiao.apijson.gson.GsonSimpleCallback;
+import io.yunjiao.apijson.spring.boot.bean.GsonInitializingBean;
import io.yunjiao.apijson.util.ApijsonConsts;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -42,6 +43,7 @@ public class GsonApplicationAutoConfigurationIT {
assertThat(context).hasSingleBean(GsonCreator.class);
assertThat(context).hasSingleBean(GsonSimpleCallback.class);
assertThat(context).hasSingleBean(GsonRestController.class);
+ assertThat(context).hasSingleBean(GsonInitializingBean.class);
});
}
diff --git a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/ApijsonFunctionParserConfigurerTest.java b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonFunctionParserConfigurerTest.java
similarity index 92%
rename from apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/ApijsonFunctionParserConfigurerTest.java
rename to apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonFunctionParserConfigurerTest.java
index defb9db86211fbdfcde39641eb0f85eea1836b20..4580fb34ecbe2c26c6d3f80f2812852ce82d227f 100644
--- a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/ApijsonFunctionParserConfigurerTest.java
+++ b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonFunctionParserConfigurerTest.java
@@ -1,8 +1,9 @@
-package io.yunjiao.apijson.spring.boot;
+package io.yunjiao.apijson.spring.boot.configurer;
import apijson.orm.AbstractFunctionParser;
import apijson.orm.script.ScriptExecutor;
import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonParserProperties;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonFunctionParserConfigurer;
import io.yunjiao.apijson.util.ApijsonUtils;
import org.junit.jupiter.api.Test;
diff --git a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/ApijsonSqlConfigConfigurerTest.java b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonSqlConfigConfigurerTest.java
similarity index 93%
rename from apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/ApijsonSqlConfigConfigurerTest.java
rename to apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonSqlConfigConfigurerTest.java
index 62daa7a162e96d2aeb31271551db3addf37eb06a..a91dfe02526d3b27f5f4a3c2b3c3de294525faed 100644
--- a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/ApijsonSqlConfigConfigurerTest.java
+++ b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonSqlConfigConfigurerTest.java
@@ -1,8 +1,9 @@
-package io.yunjiao.apijson.spring.boot;
+package io.yunjiao.apijson.spring.boot.configurer;
import apijson.framework.ColumnUtil;
import apijson.orm.AbstractSQLConfig;
import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonSqlProperties;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonSqlConfigConfigurer;
import io.yunjiao.apijson.util.ApijsonUtils;
import org.junit.jupiter.api.Test;
diff --git a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/ApijsonVerifierConfigurerTest.java b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonVerifierConfigurerTest.java
similarity index 94%
rename from apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/ApijsonVerifierConfigurerTest.java
rename to apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonVerifierConfigurerTest.java
index 5bd59fc1cbb29a952e79dac95be96988b650cca4..c1f1b4a539072a0c7051b18cda0b0903399c0ddd 100644
--- a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/ApijsonVerifierConfigurerTest.java
+++ b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/configurer/ApijsonVerifierConfigurerTest.java
@@ -1,9 +1,10 @@
-package io.yunjiao.apijson.spring.boot;
+package io.yunjiao.apijson.spring.boot.configurer;
import apijson.RequestMethod;
import apijson.orm.AbstractVerifier;
import apijson.orm.Entry;
import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonVerifierProperties;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonVerifierConfigurer;
import io.yunjiao.apijson.util.ApijsonUtils;
import org.junit.jupiter.api.Test;
diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleFunctionParserConfigurer.java b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleFunctionParserConfigurer.java
index f172a1f6a6db21c55191cbb3dae8d127088683f4..08224380388ebdd51cfb38a4afd93252efcfdb13 100644
--- a/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleFunctionParserConfigurer.java
+++ b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleFunctionParserConfigurer.java
@@ -2,7 +2,7 @@ package io.yunjiao.apijson.example.config;
import apijson.orm.script.JavaScriptExecutor;
import apijson.orm.script.ScriptExecutor;
-import io.yunjiao.apijson.spring.boot.ApijsonFunctionParserConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonFunctionParserConfigurer;
import org.springframework.context.annotation.Configuration;
import java.util.List;
diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleSqlConfigConfigurer.java b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleSqlConfigConfigurer.java
index 31ec1173096ade4825d67f5c42566b05f3378cf1..b9ac2cef852a1685f97c88df55b9f277ec28e600 100644
--- a/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleSqlConfigConfigurer.java
+++ b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleSqlConfigConfigurer.java
@@ -1,7 +1,7 @@
package io.yunjiao.apijson.example.config;
import apijson.StringUtil;
-import io.yunjiao.apijson.spring.boot.ApijsonSqlConfigConfigurer;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonSqlConfigConfigurer;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleVerifierConfigurer.java b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleVerifierConfigurer.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebf12c7fc0696338e45a530c45196a01064e6293
--- /dev/null
+++ b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleVerifierConfigurer.java
@@ -0,0 +1,27 @@
+package io.yunjiao.apijson.example.config;
+
+import apijson.RequestMethod;
+import apijson.StringUtil;
+import apijson.orm.Entry;
+import io.yunjiao.apijson.spring.boot.configurer.ApijsonVerifierConfigurer;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.regex.Pattern;
+
+/**
+ * 校验器配置
+ *
+ * @author yangyunjiao
+ */
+@Configuration
+public class ExampleVerifierConfigurer implements ApijsonVerifierConfigurer {
+ @Override
+ public void configure(Map> roleMap, List operationKeyList, Map> systemAccessMap, Map> accessNap, Map compileMap, Map>> requestMap) {
+ compileMap.put("PHONE", StringUtil.PATTERN_PHONE);
+ compileMap.put("EMAIL", StringUtil.PATTERN_EMAIL);
+ compileMap.put("ID_CARD", StringUtil.PATTERN_ID_CARD);
+ }
+}
diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/README.md b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/README.md
index 7bbd4b377696ec35c2e486f12f9c205958767184..988f4ef3e46551b3d0d9c08901e3002265d3dc54 100644
--- a/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/README.md
+++ b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/README.md
@@ -55,7 +55,7 @@ Configure Bean [Driver Manager DataSource]
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/apijson_ut?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
+ url: jdbc:mysql://localhost:3306/apijson?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
```
@@ -88,7 +88,7 @@ INFO 22560 --- [ main] com.zaxxer.hikari.HikariDataSource : Hika
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/apijson_ut?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
+ url: jdbc:mysql://localhost:3306/apijson?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/resources/application.yml b/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/resources/application.yml
index c9e88164d95efa96f7b41db035529a455415df1e..6809d65a9c92428015605180a035c24800f1f502 100644
--- a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/resources/application.yml
+++ b/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/resources/application.yml
@@ -13,7 +13,7 @@ spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/apijson_ut?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
+ url: jdbc:mysql://localhost:3306/apijson?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
username: root
password: root