diff --git a/README.md b/README.md index de24e896d7248697ea2a76668a532f19570a0132..5bbf6152588742b35e207eb5a0e9934df9083e7e 100644 --- a/README.md +++ b/README.md @@ -2,88 +2,53 @@ ## 项目列表 -- apijson-spring-boot-autoconfigure:配置项目 -- apijson-spring-boot-dependencies:依赖项目 -- apijson-spring-boot-examples:示例父项目 -- apijson-spring-boot-example-common: 格式(不影响代码运行的变动) -- apijson-spring-boot-example-gson:使用gson的应用 -- apijson-spring-boot-example-seed:默认应用,使用fastjson2 -- apijson-spring-boot-starter:APIJSON Spring Boot 启动器 +| 项目 | 说明 | +|-----------------------------------|-------------------------| +| apijson-spring-boot-autoconfigure | 自动配置 | +| apijson-spring-boot-dependencies | 项目依赖 | +| apijson-spring-boot-examples | 示例项目 | +| apijson-spring-boot-starter | APIJSON Spring Boot 启动器 | ## 使用 Gradle + ```gradle dependencies { compile "io.gitee.yunjiao-source:apijson-spring-boot-starter:$version" } ``` + ## 使用 Maven + ```xml + io.gitee.yunjiao-source apijson-spring-boot-starter ${version} ``` + 详细信息参考`apijson-spring-boot-examples`项目 ## 所有的配置属性 -```yaml -spring: - apijson: - rest-prefix: api-json - application: fastjson2 - new-id-strategy: timestamp - need-verify-login: true - need-verify-role: true - need-verify-content: true - enable-on-startup: false - shutdown-when-server-error: true - log-debug: false - sql: - config: - enable-column-config: false - default-database: MYSQL - default-schema: sys - default-catalog: - default-namespace: - version: 5.7.22 - executor: - enable-output-null-column: false - key-raw-list: '@RAW@LIST' - key-vice-item: '@VICE@ITEM' - parser: - function: - parse-arg-value: false - enable-remote-function: true - enable-script-function: true - request: - print-request-string-log: false - print-big-log: false - print-request-endtime-log: false - return-stack-trace: true - start-from1: false - verifier: - enable-verify-column: true - enable-apijson-router: false - update-must-have-id-condition: true - enable-verify-role: true - enable-verify-content: true -``` + +参考[application-all.yaml](./apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/resources/application-all.yml) + ## 支持的接口 -| 接口url | 方法 | 说明 | -|----------------------|-----|-------------------------------------------------| -| common/{method} | POST | 支持GET,HEAD,GETS,HEADS,POST,PUT,DELETE,CRUD等 | +| 接口url | 方法 | 说明 | +|-----------------------|------|--------------------------------------------------| +| common/{method} | POST | 支持GET,HEAD,GETS,HEADS,POST,PUT,DELETE,CRUD等 | | common/{method}/{tag} | POST | 增删改查统一接口,这个一个接口可替代 7 个万能通用接口,牺牲一些路由解析性能来提升一点开发效率 | -| ext/reload | POST | 重新加载配置 | -| ext/post/verify | POST | 生成验证码 | -| ext/gets/verify | POST | 获取验证码 | -| ext/heads/verify | POST | 校验验证码 | -| ext/login | POST | 用户登录 | -| ext/logout | POST | 退出登录,清空session | -| ext/register | POST | 注册 | -| ext/put/password | POST | 设置密码 | +| ext/reload | POST | 重新加载配置 | +| ext/post/verify | POST | 生成验证码 | +| ext/gets/verify | POST | 获取验证码 | +| ext/heads/verify | POST | 校验验证码 | +| ext/login | POST | 用户登录 | +| ext/logout | POST | 退出登录,清空session | +| ext/register | POST | 注册 | +| ext/put/password | POST | 设置密码 | 请求示例 @@ -97,6 +62,7 @@ curl --location --request POST 'http://localhost:8080/api-json/common/get' \ }' ``` -* 接口添加了统一的前缀,默认是`api-json`,配置属性`spring.apijson.rest-prefix` +* 默认是开启的,可以关闭这些接口,配置属性 `spring.apijson.rest-api.enable=false` +* 接口添加了统一的前缀,默认是`api-json`,配置属性`spring.apijson.rest-api.prefix=YOURE-PREFIX` * 在`config/api`目录下有`apifox`及`postman`工具文件,导入json文件 diff --git a/apijson-spring-boot-autoconfigure/pom.xml b/apijson-spring-boot-autoconfigure/pom.xml index 3f2d1952cbff67aa93ccae048c61aa1e201cc7d3..1c2ec46d3a2f01a7f6c35d0e4947c071d652c1ea 100644 --- a/apijson-spring-boot-autoconfigure/pom.xml +++ b/apijson-spring-boot-autoconfigure/pom.xml @@ -30,19 +30,23 @@ org.springframework spring-webmvc + true cn.hutool hutool-core + true jakarta.annotation jakarta.annotation-api + true jakarta.servlet jakarta.servlet-api + true diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/annotation/ApijsonRest.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/annotation/ApijsonRest.java index 124cfce1c6fae651e28dc315d8315d25420d7837..d3be8b29da30a83f2f9176138f5ccaeb77a579b3 100644 --- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/annotation/ApijsonRest.java +++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/annotation/ApijsonRest.java @@ -3,6 +3,7 @@ package io.yunjiao.apijson.annotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -11,7 +12,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * @author yangyunjiao */ -@Target({TYPE}) +@Target({TYPE, METHOD}) @Retention(RUNTIME) public @interface ApijsonRest { } 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 9b94458f6d6f40b7f225365fa941af2551e231bd..2f8d6d279fc41af6a1d04b8d66071b329d5c5c74 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 @@ -72,7 +72,7 @@ public class ApijsonAutoConfiguration { return new WebMvcConfigurer() { @Override public void configurePathMatch(@Nonnull PathMatchConfigurer configurer) { - configurer.addPathPrefix(apijsonProperties.getRestPrefix(), + configurer.addPathPrefix(apijsonProperties.getRestApi().getPrefix(), c -> c.isAnnotationPresent(ApijsonRest.class)); } }; diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonProperties.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonProperties.java index f2d7e0a1282e985fc784b6d7fc84bd7bbebb7cb1..03c323e8696e97f6b8936469c49d0f5bfd8263b8 100644 --- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonProperties.java +++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonProperties.java @@ -3,6 +3,7 @@ package io.yunjiao.apijson.spring.boot.autoconfigure; import io.yunjiao.apijson.util.ApijsonConsts; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * APIJSON 配置属性 @@ -12,7 +13,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @Data @ConfigurationProperties(prefix = ApijsonConsts.PROPERTY_PREFIX_APIJSON) public class ApijsonProperties { - private String restPrefix = "api-json"; + @NestedConfigurationProperty + private RestApi restApi = new RestApi(); /** * 请求需要校验,默认true,开发时应该设置成false @@ -79,7 +81,7 @@ public class ApijsonProperties { database, /** - * uuid组件 + * uuid字符串 */ uuid, @@ -98,4 +100,21 @@ public class ApijsonProperties { */ custom } + + /** + * APIJSON接口配置 + */ + @Data + public static class RestApi { + /** + * 开启接口,默认true + */ + private boolean enable = true; + + /** + * 接口前缀,默认api-json + */ + private String prefix = "api-json"; + } + } diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonSqlProperties.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonSqlProperties.java index 94af1b3fe0fee79e2534a493cb5c3a04464e5038..68608f401152e1386831fadd35fac3e1b97416af 100644 --- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonSqlProperties.java +++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/spring/boot/autoconfigure/ApijsonSqlProperties.java @@ -38,7 +38,7 @@ public class ApijsonSqlProperties { private boolean enableColumnConfig = false; /** - * 默认的类型, 默认MYSQL + * 默认的数据库类型, 默认MYSQL */ private String defaultDatabase = ApijsonConsts.SQL_CONFIG_DEFAULT_DATABASE; 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 5eed9cce8fb779b0fcf893d5e3c21427489ebb82..c8028966ee1c02a4dc62e64a5bd642f454212a2e 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 @@ -6,12 +6,14 @@ import io.yunjiao.apijson.fastjson2.*; 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.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.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; @@ -90,34 +92,6 @@ public class Fastjson2ApplicationAutoConfiguration { return bean; } - /** - * rest api 接口 - * - * @return {@link Fastjson2RestController}实例 - */ - @Bean - Fastjson2RestController fastjson2RestController() { - Fastjson2RestController bean = new Fastjson2RestController(properties); - if (log.isDebugEnabled()) { - log.debug("Configure Bean [Fastjson2 Rest Controller]"); - } - return bean; - } - - /** - * rest api 扩展接口 - * - * @return {@link Fastjson2EXtRestController}实例 - */ - @Bean - Fastjson2EXtRestController fastjson2ExtRestController() { - Fastjson2EXtRestController bean = new Fastjson2EXtRestController(); - if (log.isDebugEnabled()) { - log.debug("Configure Bean [Fastjson2 Rest Ext Controller]"); - } - return bean; - } - void forceInitClass() { ApijsonUtils.forceInit(APIJSONApplication.class); @@ -130,6 +104,47 @@ public class Fastjson2ApplicationAutoConfiguration { ApijsonUtils.forceInit(APIJSONVerifier.class); } + /** + * rest api 自动配置 + */ + @RequiredArgsConstructor + @AutoConfiguration + @ConditionalOnProperty(name = {ApijsonConsts.PROPERTY_PREFIX_APIJSON_RESTAPI_ENABLE}, + havingValue = "true", + matchIfMissing = true) + static + class Fastjson2RestApiAutoConfiguration { + private final ApijsonProperties properties; + + /** + * rest api 接口 + * + * @return {@link Fastjson2RestController}实例 + */ + @Bean + Fastjson2RestController fastjson2RestController() { + Fastjson2RestController bean = new Fastjson2RestController(properties); + if (log.isDebugEnabled()) { + log.debug("Configure Bean [Fastjson2 Rest Controller]"); + } + return bean; + } + + /** + * rest api 扩展接口 + * + * @return {@link Fastjson2EXtRestController}实例 + */ + @Bean + Fastjson2EXtRestController fastjson2ExtRestController() { + Fastjson2EXtRestController bean = new Fastjson2EXtRestController(); + if (log.isDebugEnabled()) { + log.debug("Configure Bean [Fastjson2 Rest Ext Controller]"); + } + return bean; + } + } + /** * 初始化 */ @@ -151,7 +166,7 @@ public class Fastjson2ApplicationAutoConfiguration { Log.DEBUG = properties.isLogDebug(); APIJSONApplication.init(properties.isShutdownWhenServerError(), fastjson2Creator); if (properties.isEnableOnStartup()) { - Fastjson2Verifier.init(false, fastjson2Creator); + 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 6945452a3ee8c101ee7f202e8b10ec99191569cb..364bf388c675cb25574e549a21a1a93b462420f3 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 @@ -5,12 +5,14 @@ import io.yunjiao.apijson.gson.*; 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.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.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; @@ -63,24 +65,6 @@ public class GsonApplicationAutoConfiguration { return bean; } - @Bean - GsonRestController gsonRestController() { - GsonRestController bean = new GsonRestController(properties); - if (log.isDebugEnabled()) { - log.debug("Configure Bean [Gson Rest Controller]"); - } - return bean; - } - - @Bean - GsonEXtRestController gsonEXtRestController() { - GsonEXtRestController bean = new GsonEXtRestController(); - if (log.isDebugEnabled()) { - log.debug("Configure Bean [Gson Ext Rest Controller]"); - } - return bean; - } - void forceInitClass() { ApijsonUtils.forceInit(APIJSONApplication.class); ApijsonUtils.forceInit(APIJSONController.class); @@ -92,6 +76,37 @@ public class GsonApplicationAutoConfiguration { ApijsonUtils.forceInit(APIJSONVerifier.class); } + /** + * rest api 自动配置 + */ + @RequiredArgsConstructor + @AutoConfiguration + @ConditionalOnProperty(name = {ApijsonConsts.PROPERTY_PREFIX_APIJSON_RESTAPI_ENABLE}, + havingValue = "true", + matchIfMissing = true) + static + class GsonRestApiAutoConfiguration { + private final ApijsonProperties properties; + + @Bean + GsonRestController gsonRestController() { + GsonRestController bean = new GsonRestController(properties); + if (log.isDebugEnabled()) { + log.debug("Configure Bean [Gson Rest Controller]"); + } + return bean; + } + + @Bean + GsonEXtRestController gsonEXtRestController() { + GsonEXtRestController bean = new GsonEXtRestController(); + if (log.isDebugEnabled()) { + log.debug("Configure Bean [Gson Ext Rest Controller]"); + } + return bean; + } + } + /** * 初始化 */ diff --git a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/util/ApijsonConsts.java b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/util/ApijsonConsts.java index dd8b59d1d6427b155687f38c900c51a5b29ece8e..5b6ccea21a56df5491b04da9f5e1f02250bdb8f1 100644 --- a/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/util/ApijsonConsts.java +++ b/apijson-spring-boot-autoconfigure/src/main/java/io/yunjiao/apijson/util/ApijsonConsts.java @@ -30,6 +30,16 @@ public final class ApijsonConsts { */ public static final String PROPERTY_PREFIX_APIJSON = PROPERTY_PREFIX_SPRING + ".apijson"; + /** + * rest api 属性 + */ + public static final String PROPERTY_PREFIX_APIJSON_RESTAPI = PROPERTY_PREFIX_APIJSON + ".rest-api"; + + /** + * rest api 开启属性 + */ + public static final String PROPERTY_PREFIX_APIJSON_RESTAPI_ENABLE = PROPERTY_PREFIX_APIJSON_RESTAPI + PROPERTY_ENABLED; + /** * sql 属性 */ 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 c62273643ec87e28b7805f41ae01ce0ce8174acc..e7bf7a3276c2d853ebe9f6dca602c0b1b70f2b77 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 @@ -1,7 +1,6 @@ package io.yunjiao.apijson.spring.boot.autoconfigure; import io.yunjiao.apijson.fastjson2.Fastjson2Creator; -import io.yunjiao.apijson.fastjson2.Fastjson2RestController; import io.yunjiao.apijson.fastjson2.Fastjson2SimpleCallback; import io.yunjiao.apijson.util.ApijsonConsts; import org.junit.jupiter.api.BeforeEach; @@ -27,7 +26,6 @@ public class Fastjson2ApplicationAutoConfigurationIT { @Test public void testNewIdSnowflakeStrategy() { - applicationContextRunner .withPropertyValues(ApijsonConsts.PROPERTY_PREFIX_APIJSON_APPLICATION + "=" + ApijsonProperties.Application.fastjson2, ApijsonConsts.PROPERTY_PREFIX_APIJSON_NEWIDSTRATEGY + "=" + ApijsonProperties.NewIdStrategy.timestamp, @@ -39,7 +37,6 @@ public class Fastjson2ApplicationAutoConfigurationIT { .run(context -> { assertThat(context).hasSingleBean(Fastjson2Creator.class); assertThat(context).hasSingleBean(Fastjson2SimpleCallback.class); - assertThat(context).hasSingleBean(Fastjson2RestController.class); }); } diff --git a/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/RestApiAutoConfigurationTest.java b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/RestApiAutoConfigurationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..55effbe2c7ef12a588442ba598d258b2141af8ad --- /dev/null +++ b/apijson-spring-boot-autoconfigure/src/test/java/io/yunjiao/apijson/spring/boot/autoconfigure/RestApiAutoConfigurationTest.java @@ -0,0 +1,72 @@ +package io.yunjiao.apijson.spring.boot.autoconfigure; + +import io.yunjiao.apijson.fastjson2.Fastjson2EXtRestController; +import io.yunjiao.apijson.fastjson2.Fastjson2RestController; +import io.yunjiao.apijson.gson.GsonEXtRestController; +import io.yunjiao.apijson.gson.GsonRestController; +import io.yunjiao.apijson.util.ApijsonConsts; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * rest api 接口单元测试用例 + * + * @author yangyunjiao + */ +public class RestApiAutoConfigurationTest { + private ApplicationContextRunner applicationContextRunner; + + @BeforeEach + public void setUp() { + applicationContextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(ApijsonAutoConfiguration.class)); + } + + @Test + public void fastjson2RestApiEnabled() { + applicationContextRunner + .withPropertyValues(ApijsonConsts.PROPERTY_PREFIX_APIJSON_RESTAPI_ENABLE + "=true") + .withUserConfiguration(Fastjson2ApplicationAutoConfiguration.Fastjson2RestApiAutoConfiguration.class) + .run(context -> { + assertThat(context).hasSingleBean(Fastjson2RestController.class); + assertThat(context).hasSingleBean(Fastjson2EXtRestController.class); + }); + } + + @Test + public void fastjson2RestApiDisabled() { + applicationContextRunner + .withPropertyValues(ApijsonConsts.PROPERTY_PREFIX_APIJSON_RESTAPI_ENABLE + "=false") + .withUserConfiguration(Fastjson2ApplicationAutoConfiguration.Fastjson2RestApiAutoConfiguration.class) + .run(context -> { + assertThat(context).doesNotHaveBean(Fastjson2RestController.class); + assertThat(context).doesNotHaveBean(Fastjson2EXtRestController.class); + }); + } + + @Test + public void GsonRestApiEnabled() { + applicationContextRunner + .withPropertyValues(ApijsonConsts.PROPERTY_PREFIX_APIJSON_RESTAPI_ENABLE + "=true") + .withUserConfiguration(GsonApplicationAutoConfiguration.GsonRestApiAutoConfiguration.class) + .run(context -> { + assertThat(context).hasSingleBean(GsonRestController.class); + assertThat(context).hasSingleBean(GsonEXtRestController.class); + }); + } + + @Test + public void GsonRestApiDisabled() { + applicationContextRunner + .withPropertyValues(ApijsonConsts.PROPERTY_PREFIX_APIJSON_RESTAPI_ENABLE + "=false") + .withUserConfiguration(GsonApplicationAutoConfiguration.GsonRestApiAutoConfiguration.class) + .run(context -> { + assertThat(context).doesNotHaveBean(GsonRestController.class); + assertThat(context).doesNotHaveBean(GsonEXtRestController.class); + }); + } +} diff --git a/apijson-spring-boot-dependencies/pom.xml b/apijson-spring-boot-dependencies/pom.xml index 213384bc3d6e5c760d3c449df62aa73ad1eb1748..74509748905ba60728389f9c08cfc9484d4a3726 100644 --- a/apijson-spring-boot-dependencies/pom.xml +++ b/apijson-spring-boot-dependencies/pom.xml @@ -24,6 +24,7 @@ 7.2.2 1.0.0 1.0.2 + 1.2.25 17 ${java.version} @@ -75,12 +76,17 @@ ${apijson-gson.version} + + com.alibaba + druid-spring-boot-starter + ${druid-spring-boot-starter.version} + + io.gitee.yunjiao-source apijson-spring-boot-autoconfigure ${revision} - io.gitee.yunjiao-source apijson-spring-boot-starter diff --git a/apijson-spring-boot-examples/README.md b/apijson-spring-boot-examples/README.md index a650e6b8d1be71f6a8a7280e351661507bff06b1..c00ce7f2a653704df15a4dba646f2b43bd443239 100644 --- a/apijson-spring-boot-examples/README.md +++ b/apijson-spring-boot-examples/README.md @@ -2,6 +2,15 @@ 示例项目 +## 项目列表 + +| 项目 | 说明 | +|----------------------------------------|-----------------------------| +| apijson-spring-boot-example-common | 自动配置 | +| apijson-spring-boot-example-gson | 项目依赖 | +| apijson-spring-boot-example-seed | 示例项目 | +| apijson-spring-boot-example-datasource | 支持数据源:jdbc, druid, HikariCP | + ## apijson-spring-boot-example-seed 优先选择此项目测试,步骤如下: diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-common/pom.xml b/apijson-spring-boot-examples/apijson-spring-boot-example-common/pom.xml index 67f313a9e8f41cc4ff475deca8f6c656fa2f2135..7fe6a70eb93286fc68c0133a91e1ff03f201996c 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-common/pom.xml +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-common/pom.xml @@ -20,12 +20,5 @@ apijson-spring-boot-starter ${revision} - - - - org.springframework - spring-jdbc - - \ No newline at end of file diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleAutoConfiguration.java b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleAutoConfiguration.java index 974bd493a8945eba69a1fcc210f601c7ad834026..6823850d35613295ae6cfc2e917318707dee8bf0 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleAutoConfiguration.java +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/config/ExampleAutoConfiguration.java @@ -6,12 +6,9 @@ import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import javax.sql.DataSource; - /** * 通用配置 * @@ -25,18 +22,6 @@ public class ExampleAutoConfiguration { log.info("Example Auto Configuration"); } - @Bean - public DataSource dataSource() { - log.debug("Configure Bean [DataSource]"); - DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); - dataSource.setUrl("jdbc:mysql://localhost:3306/apijson_ut?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"); // 内存模式 - dataSource.setUsername("root"); - dataSource.setPassword("root"); - return dataSource; - } - - @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/fastjson2/CustomFastjson2Creator.java b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/fastjson2/CustomFastjson2Creator.java similarity index 100% rename from apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/fastjson2/CustomFastjson2Creator.java rename to apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/fastjson2/CustomFastjson2Creator.java diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/fastjson2/CustomFastjson2FunctionParser.java b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/fastjson2/CustomFastjson2FunctionParser.java similarity index 100% rename from apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/fastjson2/CustomFastjson2FunctionParser.java rename to apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/fastjson2/CustomFastjson2FunctionParser.java diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/gson/CustomGsonCreator.java b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/gson/CustomGsonCreator.java similarity index 100% rename from apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/gson/CustomGsonCreator.java rename to apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/gson/CustomGsonCreator.java diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/gson/CustomGsonFunctionParser.java b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/gson/CustomGsonFunctionParser.java similarity index 100% rename from apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/gson/CustomGsonFunctionParser.java rename to apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/java/io/yunjiao/apijson/example/gson/CustomGsonFunctionParser.java diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/resources/application-all.yml b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/resources/application-all.yml index 61b85db884e3fcb910d8ffa1b80b962679e6623c..8f615ba919552fc3f1f101770d1c1f90589ed04a 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/resources/application-all.yml +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-common/src/main/resources/application-all.yml @@ -1,40 +1,42 @@ spring: apijson: - rest-prefix: api-json - application: fastjson2 - new-id-strategy: timestamp - need-verify-login: true - need-verify-role: true - need-verify-content: true - enable-on-startup: false - shutdown-when-server-error: true - log-debug: false + rest-api: + enable: true # 是否初始化Rest接口,默认true。框架已提供APIJSON统一接口实现 + prefix: api-json # Rest接口前缀,默认api-json。访问接口如:http://localhost:8080/api-json/common/get + application: fastjson2 # 集成apijson-fastjson2包 + new-id-strategy: timestamp # 主键生成策略,默认timestamp。支持:database(数据库自增),uuid(uuid字符串), timestamp(当前时间毫秒数),snowflake(雪花算法),custom(用户自定义) + need-verify-login: true # 每次访问Rest接口时是否需要校验登录 + need-verify-role: true # 每次访问Rest接口时是否需要校验角色权限 + need-verify-content: true # 每次访问Rest接口时开启校验请求传参内容 + enable-on-startup: false # 在启动时初始化,如:APIJSONVerifier(校验器)初始化 + shutdown-when-server-error: true # 启动遇到异常时停止 + log-debug: false # 日志 sql: config: - enable-column-config: false - default-database: MYSQL - default-schema: sys + enable-column-config: false # 支持 !key 反选字段 和 字段名映射, 默认false + default-database: MYSQL # 默认的数据库类型, 默认MYSQL。支持多种数据库,请参考SQLConfig类定义,注意名称全大写 + default-schema: sys # 默认数据库名/模式,默认sys。 设置含有APIJSON系统表的数据库 default-catalog: default-namespace: - version: 5.7.22 + version: 5.7.22 # 数据库版本, 默认'5.7.22' executor: - enable-output-null-column: false + enable-output-null-column: false # 是否返回 值为null的字段, 默认false key-raw-list: '@RAW@LIST' key-vice-item: '@VICE@ITEM' parser: function: - parse-arg-value: false - enable-remote-function: true - enable-script-function: true + parse-arg-value: false # 是否解析参数 key 的对应的值 + enable-remote-function: true # 开启支持远程函数 + enable-script-function: true # 开启支持远程函数中的 JavaScript 脚本形式 request: - print-request-string-log: false - print-big-log: false - print-request-endtime-log: false - return-stack-trace: true - start-from1: false + print-request-string-log: false # 是否打印关键的接口请求内容 + print-big-log: false # 打印大数据量日志的标识 + print-request-endtime-log: false # 是否打印关键的接口请求结束时间 + return-stack-trace: true # 控制返回 trace:stack 字段 + start-from1: false # 分页页码是否从 1 开始,默认为从 0 开始 verifier: enable-verify-column: true enable-apijson-router: false - update-must-have-id-condition: true - enable-verify-role: true - enable-verify-content: true + update-must-have-id-condition: true # 为 PUT, DELETE 强制要求必须有 id/id{}/id{}@ 条件 + enable-verify-role: true # 开启校验请求角色权限 + enable-verify-content: true # 开启校验请求传参内容 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 new file mode 100644 index 0000000000000000000000000000000000000000..7bbd4b377696ec35c2e486f12f9c205958767184 --- /dev/null +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/README.md @@ -0,0 +1,103 @@ +# apijson-spring-boot-datasource + +数据源示例项目, + +## 使用 DriverManagerDataSource + +标准 JDBC 数据源的一个简单实现类,它用于开发简单的应用和程序测试,并且不支持连接池,每次连接数据库都是创建新的连接对象。 + +* 注意:生产环境中,建议不要使用这个方式 + +在`pom`文件中添加依赖 + +```xml + + org.springframework + spring-jdbc + +``` + +在自动配置类中添加 + +```java + @Bean + public DataSource DriverManagerDataSource() { + log.debug("Configure Bean [Driver Manager DataSource]"); + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://localhost:3306/apijson_ut?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"); // 内存模式 + dataSource.setUsername("root"); + dataSource.setPassword("root"); + return dataSource; + } +``` + +启动应用服务,控制台如下提示说明配置成功 + +```text +Configure Bean [Driver Manager DataSource] +``` + +## 使用 hikari + +在`pom`文件中添加依赖 + +```xml + + org.springframework.boot + spring-boot-starter-data-jdbc + +``` + +在`application.yml`中添加配置 + +```yaml +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 + username: root + password: root +``` +启动应用服务,控制台如下提示说明配置成功 + +```text +INFO 22560 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +``` + +## 使用 druid + +在`pom`文件中添加依赖 + +```xml + + com.alibaba + druid-spring-boot-starter + + + + org.springframework + spring-jdbc + + +``` + +在`application.yml`中添加配置 + +```yaml +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 + username: root + password: root + type: com.alibaba.druid.pool.DruidDataSource +``` +启动应用服务,控制台如下提示说明配置成功 + +```text +INFO 19108 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited +``` + + + diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/pom.xml b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..7409b21aa50804b7e7b48f53dc7a7646c9911794 --- /dev/null +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/pom.xml @@ -0,0 +1,68 @@ + + + + io.gitee.yunjiao-source + apijson-spring-boot-examples + ${revision} + + 4.0.0 + + apijson-spring-boot-example-datasource + jar + APIJSON Spring Boot :: Examples :: DataSource + 支持数据源:jdbc, druid, Hikari + + + + io.gitee.yunjiao-source + apijson-spring-boot-example-common + ${revision} + + + + + + + + + org.springframework.boot + spring-boot-starter-data-jdbc + + + + + + + + + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + repackage + + + + + + + \ No newline at end of file diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/ApijsonExampleGsonApplication.java b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/src/main/java/io/yunjiao/apijson/example/ExampleDataSourceApplication.java similarity index 70% rename from apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/ApijsonExampleGsonApplication.java rename to apijson-spring-boot-examples/apijson-spring-boot-example-datasource/src/main/java/io/yunjiao/apijson/example/ExampleDataSourceApplication.java index bf7d00d897816096e4c2d2ad15475bf9845f9103..e23e8d96ee6d8d78a928d671046a7daefb6ba1e3 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/ApijsonExampleGsonApplication.java +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/src/main/java/io/yunjiao/apijson/example/ExampleDataSourceApplication.java @@ -9,8 +9,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @author yangyunjiao */ @SpringBootApplication -public class ApijsonExampleGsonApplication { +public class ExampleDataSourceApplication { public static void main(String[] args) { - SpringApplication.run(ApijsonExampleGsonApplication.class, args); + SpringApplication.run(ExampleDataSourceApplication.class, args); } } diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/src/main/java/io/yunjiao/apijson/example/ExampleDataSourceAutoConfiguration.java b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/src/main/java/io/yunjiao/apijson/example/ExampleDataSourceAutoConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..289a87c5c61af143e9462f54e3e1d31cf8486d97 --- /dev/null +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/src/main/java/io/yunjiao/apijson/example/ExampleDataSourceAutoConfiguration.java @@ -0,0 +1,48 @@ +package io.yunjiao.apijson.example; + +import io.yunjiao.apijson.example.fastjson2.CustomFastjson2Creator; +import io.yunjiao.apijson.fastjson2.Fastjson2Creator; +import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonSqlProperties; +import io.yunjiao.apijson.spring.boot.autoconfigure.condition.ApllicationCondition; +import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; + +/** + * 通用配置 + * + * @author yangyunjiao + */ +@Slf4j +@Conditional(ApllicationCondition.OnFastjson2.class) +@Configuration +public class ExampleDataSourceAutoConfiguration { + @PostConstruct + public void postConstruct() { + log.info("Example DataSource Auto Configuration"); + } + +// @Bean +// public DataSource DriverManagerDataSource() { +// log.debug("Configure Bean [Driver Manager DataSource]"); +// DriverManagerDataSource dataSource = new DriverManagerDataSource(); +// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); +// dataSource.setUrl("jdbc:mysql://localhost:3306/apijson_ut?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"); // 内存模式 +// dataSource.setUsername("root"); +// dataSource.setPassword("root"); +// return dataSource; +// } + + @Bean + public Fastjson2Creator customFastjson2Creator(DataSource dataSource, + ApijsonSqlProperties sqlProperties) { + log.debug("Configure Bean [Custom Fastjson2 Creator]"); + return new CustomFastjson2Creator(dataSource, sqlProperties); + } + + +} diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/src/main/resources/application.yml b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..61f41883c9a676cecf27b5493c6843a62a556663 --- /dev/null +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-datasource/src/main/resources/application.yml @@ -0,0 +1,28 @@ +spring: + apijson: + application: fastjson2 + new-id-strategy: timestamp + need-verify-login: false + need-verify-role: false + log-debug: true + sql: + config: + default-database: MYSQL + default-schema: apijson + version: 8.0.11 + + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + 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 + + +logging: + level: + root: info + org.springframework: info + io.yunjiao: debug + diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/pom.xml b/apijson-spring-boot-examples/apijson-spring-boot-example-gson/pom.xml index e8d3fde64cb95c38b9e3ae009c007b86d8da677b..df56ba039e6eeb50c32169454e21d4e866d3af25 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/pom.xml +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-gson/pom.xml @@ -22,8 +22,8 @@ - com.github.APIJSON - apijson-gson + org.springframework + spring-jdbc diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/ApijsonExampleSeedApplication.java b/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/ExampleGsonApplication.java similarity index 70% rename from apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/ApijsonExampleSeedApplication.java rename to apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/ExampleGsonApplication.java index 6d84adfb7933549a5d49f5acbb4f27a748af3eb1..41dc9168b687095c2015257fb0edade75a09323a 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/ApijsonExampleSeedApplication.java +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/ExampleGsonApplication.java @@ -9,8 +9,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @author yangyunjiao */ @SpringBootApplication -public class ApijsonExampleSeedApplication { +public class ExampleGsonApplication { public static void main(String[] args) { - SpringApplication.run(ApijsonExampleSeedApplication.class, args); + SpringApplication.run(ExampleGsonApplication.class, args); } } diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/gson/ExampleGsonAutoConfiguration.java b/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/ExampleGsonAutoConfiguration.java similarity index 49% rename from apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/gson/ExampleGsonAutoConfiguration.java rename to apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/ExampleGsonAutoConfiguration.java index 191e8aeebea7ab5c32bbc6b3367aa0115ead9f96..978d317b3831c4068dc4c1380dac613eab3e74a8 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/gson/ExampleGsonAutoConfiguration.java +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/java/io/yunjiao/apijson/example/ExampleGsonAutoConfiguration.java @@ -1,5 +1,7 @@ -package io.yunjiao.apijson.example.gson; +package io.yunjiao.apijson.example; +import io.yunjiao.apijson.example.gson.CustomGsonCreator; +import io.yunjiao.apijson.gson.GsonCreator; import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonSqlProperties; import io.yunjiao.apijson.spring.boot.autoconfigure.condition.ApllicationCondition; import jakarta.annotation.PostConstruct; @@ -7,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; @@ -25,8 +28,19 @@ public class ExampleGsonAutoConfiguration { } @Bean - public CustomGsonCreator customGsonCreator(DataSource dataSource, - ApijsonSqlProperties sqlProperties) { + public DataSource DriverManagerDataSource() { + log.debug("Configure Bean [Driver Manager DataSource]"); + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://localhost:3306/apijson?userSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8"); // 内存模式 + dataSource.setUsername("root"); + dataSource.setPassword("root"); + return dataSource; + } + + @Bean + public GsonCreator customGsonCreator(DataSource dataSource, + ApijsonSqlProperties sqlProperties) { log.debug("Configure Bean [Custom Gson Creator]"); return new CustomGsonCreator(dataSource, sqlProperties); } diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/resources/application.yml b/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/resources/application.yml index 0758f849c2d317c335995d42ad8416822bd704e6..47f1fa76541944a8066b71f2ba6661fda5831877 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/resources/application.yml +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-gson/src/main/resources/application.yml @@ -12,8 +12,6 @@ spring: default-schema: apijson version: 8.0.11 - - logging: level: root: info diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/pom.xml b/apijson-spring-boot-examples/apijson-spring-boot-example-seed/pom.xml index 4a2c115e8816a278cd5377ad716f870584006ba2..dbdeb542a42394c709bf0f9fd506acde81b77aca 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/pom.xml +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-seed/pom.xml @@ -22,8 +22,8 @@ - com.github.APIJSON - apijson-fastjson2 + org.springframework.boot + spring-boot-starter-data-jdbc diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/ExampleSeedApplication.java b/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/ExampleSeedApplication.java new file mode 100644 index 0000000000000000000000000000000000000000..4e47de5607d0e09b60b67701413e03bdaf5084a5 --- /dev/null +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/ExampleSeedApplication.java @@ -0,0 +1,16 @@ +package io.yunjiao.apijson.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 程序入口 + * + * @author yangyunjiao + */ +@SpringBootApplication +public class ExampleSeedApplication { + public static void main(String[] args) { + SpringApplication.run(ExampleSeedApplication.class, args); + } +} diff --git a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/fastjson2/ExampleFastjson2AutoConfiguration.java b/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/ExampleSeedAutoConfiguration.java similarity index 69% rename from apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/fastjson2/ExampleFastjson2AutoConfiguration.java rename to apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/ExampleSeedAutoConfiguration.java index 1e85138361585ce0d438cdd9e038836523470ab7..5ededb9a02be0c8f0872665137159d664f726c73 100644 --- a/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/fastjson2/ExampleFastjson2AutoConfiguration.java +++ b/apijson-spring-boot-examples/apijson-spring-boot-example-seed/src/main/java/io/yunjiao/apijson/example/ExampleSeedAutoConfiguration.java @@ -1,5 +1,7 @@ -package io.yunjiao.apijson.example.fastjson2; +package io.yunjiao.apijson.example; +import io.yunjiao.apijson.example.fastjson2.CustomFastjson2Creator; +import io.yunjiao.apijson.fastjson2.Fastjson2Creator; import io.yunjiao.apijson.spring.boot.autoconfigure.ApijsonSqlProperties; import io.yunjiao.apijson.spring.boot.autoconfigure.condition.ApllicationCondition; import jakarta.annotation.PostConstruct; @@ -18,15 +20,15 @@ import javax.sql.DataSource; @Slf4j @Conditional(ApllicationCondition.OnFastjson2.class) @Configuration -public class ExampleFastjson2AutoConfiguration { +public class ExampleSeedAutoConfiguration { @PostConstruct public void postConstruct() { log.info("Example Fastjson2 Auto Configuration"); } @Bean - public CustomFastjson2Creator customFastjson2Creator(DataSource dataSource, - ApijsonSqlProperties sqlProperties) { + public Fastjson2Creator customFastjson2Creator(DataSource dataSource, + ApijsonSqlProperties sqlProperties) { log.debug("Configure Bean [Custom Fastjson2 Creator]"); return new CustomFastjson2Creator(dataSource, sqlProperties); } 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 ff2bf5976a9f8f8553714a0f6158983f7ff5c04e..c9e88164d95efa96f7b41db035529a455415df1e 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 @@ -11,6 +11,11 @@ spring: default-schema: apijson version: 8.0.11 + 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 + username: root + password: root logging: level: diff --git a/apijson-spring-boot-examples/pom.xml b/apijson-spring-boot-examples/pom.xml index 7b744bbcc9b2ff383045e4db3e4648c2ad0283aa..63c52b5826a6109e98c30cba78043f919ef2a765 100644 --- a/apijson-spring-boot-examples/pom.xml +++ b/apijson-spring-boot-examples/pom.xml @@ -19,6 +19,7 @@ apijson-spring-boot-example-common apijson-spring-boot-example-seed apijson-spring-boot-example-gson + apijson-spring-boot-example-datasource diff --git a/apijson-spring-boot-starter/pom.xml b/apijson-spring-boot-starter/pom.xml index c37df548f686766ee9ba852d84541a0ad2c6944d..d73eef6ff43ecd4a149eb21cf42c990e1aba136d 100644 --- a/apijson-spring-boot-starter/pom.xml +++ b/apijson-spring-boot-starter/pom.xml @@ -31,5 +31,35 @@ com.github.APIJSON apijson-framework + + + jakarta.annotation + jakarta.annotation-api + + + + jakarta.servlet + jakarta.servlet-api + + + + cn.hutool + hutool-core + + + + org.springframework + spring-webmvc + + + + com.github.APIJSON + apijson-fastjson2 + + + + com.github.APIJSON + apijson-gson + \ No newline at end of file