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