From dafb2d8f5b4b8ce45ab9a719bc08ede546c9fb17 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Sat, 25 Nov 2023 20:45:16 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=B0=81=E8=A3=85=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E9=85=8D=E7=BD=AE=EF=BC=8C=E9=99=8D=E4=BD=8E=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=A4=8D=E6=9D=82=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpringDocAutoConfiguration.java | 4 ++ .../src/main/resources/default-api-doc.yml | 16 +++++++ .../SaTokenAutoConfiguration.java | 3 ++ .../main/resources/default-auth-satoken.yml | 10 ++++ .../handler/GeneralPropertySourceFactory.java | 46 +++++++++++++++++++ .../MybatisPlusAutoConfiguration.java | 3 ++ .../resources/default-data-mybatis-plus.yml | 17 +++++++ .../JacksonAutoConfiguration.java | 3 ++ .../main/resources/default-json-jackson.yml | 21 +++++++++ 9 files changed, 123 insertions(+) create mode 100644 continew-starter-api-doc/src/main/resources/default-api-doc.yml create mode 100644 continew-starter-auth/continew-starter-auth-satoken/src/main/resources/default-auth-satoken.yml create mode 100644 continew-starter-core/src/main/java/top/charles7c/continew/starter/core/handler/GeneralPropertySourceFactory.java create mode 100644 continew-starter-data/continew-starter-data-mybatis-plus/src/main/resources/default-data-mybatis-plus.yml create mode 100644 continew-starter-json/continew-starter-json-jackson/src/main/resources/default-json-jackson.yml diff --git a/continew-starter-api-doc/src/main/java/top/charles7c/continew/starter/apidoc/autoconfigure/SpringDocAutoConfiguration.java b/continew-starter-api-doc/src/main/java/top/charles7c/continew/starter/apidoc/autoconfigure/SpringDocAutoConfiguration.java index 9082010b..18f701fe 100644 --- a/continew-starter-api-doc/src/main/java/top/charles7c/continew/starter/apidoc/autoconfigure/SpringDocAutoConfiguration.java +++ b/continew-starter-api-doc/src/main/java/top/charles7c/continew/starter/apidoc/autoconfigure/SpringDocAutoConfiguration.java @@ -26,7 +26,10 @@ 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.PropertySource; import top.charles7c.continew.starter.core.autoconfigure.ProjectProperties; +import top.charles7c.continew.starter.core.handler.GeneralPropertySourceFactory; + /** * API 文档自动配置 @@ -37,6 +40,7 @@ import top.charles7c.continew.starter.core.autoconfigure.ProjectProperties; @Slf4j @AutoConfiguration @ConditionalOnProperty(name = "springdoc.swagger-ui.enabled", havingValue = "true") +@PropertySource(value = "classpath:default-api-doc.yml", factory = GeneralPropertySourceFactory.class) public class SpringDocAutoConfiguration { /** diff --git a/continew-starter-api-doc/src/main/resources/default-api-doc.yml b/continew-starter-api-doc/src/main/resources/default-api-doc.yml new file mode 100644 index 00000000..46e4abcf --- /dev/null +++ b/continew-starter-api-doc/src/main/resources/default-api-doc.yml @@ -0,0 +1,16 @@ +--- ### 接口文档配置 +springdoc: + swagger-ui: + path: /swagger-ui.html + tags-sorter: alpha + operations-sorter: alpha + show-extensions: true + api-docs: + enabled: ${springdoc.swagger-ui.enabled} + path: /v3/api-docs +## 接口文档增强配置 +knife4j: + enable: true + setting: + language: zh_cn + swagger-model-name: 实体类列表 diff --git a/continew-starter-auth/continew-starter-auth-satoken/src/main/java/top/charles7c/continew/starter/auth/satoken/autoconfigure/SaTokenAutoConfiguration.java b/continew-starter-auth/continew-starter-auth-satoken/src/main/java/top/charles7c/continew/starter/auth/satoken/autoconfigure/SaTokenAutoConfiguration.java index efadeeb9..4d990c9f 100644 --- a/continew-starter-auth/continew-starter-auth-satoken/src/main/java/top/charles7c/continew/starter/auth/satoken/autoconfigure/SaTokenAutoConfiguration.java +++ b/continew-starter-auth/continew-starter-auth-satoken/src/main/java/top/charles7c/continew/starter/auth/satoken/autoconfigure/SaTokenAutoConfiguration.java @@ -31,8 +31,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.PropertySource; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import top.charles7c.continew.starter.core.handler.GeneralPropertySourceFactory; /** * Sa-Token 自动配置 @@ -45,6 +47,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @RequiredArgsConstructor @EnableConfigurationProperties(SaTokenExtensionProperties.class) @ConditionalOnProperty(prefix = "sa-token.extension", name = "enabled", havingValue = "true") +@PropertySource(value = "classpath:default-auth-satoken.yml", factory = GeneralPropertySourceFactory.class) public class SaTokenAutoConfiguration implements WebMvcConfigurer { private final SaTokenExtensionProperties properties; diff --git a/continew-starter-auth/continew-starter-auth-satoken/src/main/resources/default-auth-satoken.yml b/continew-starter-auth/continew-starter-auth-satoken/src/main/resources/default-auth-satoken.yml new file mode 100644 index 00000000..01c7cf9f --- /dev/null +++ b/continew-starter-auth/continew-starter-auth-satoken/src/main/resources/default-auth-satoken.yml @@ -0,0 +1,10 @@ +--- ### Sa-Token 配置(https://sa-token.cc/doc.html#/use/config) +sa-token: + # token 前缀(例如填写 Bearer,实际传参 token 键: Bearer xxxx-xxxx-xxxx-xxxx) + token-prefix: Bearer + # 是否尝试从 请求体 里读取 Token + is-read-body: true + # 是否尝试从 header 里读取 Token + is-read-header: true + # 是否尝试从 cookie 里读取 Token(此值为 false 后,StpUtil.login(id) 登录时也不会再往前端注入 Cookie,适合前后端分离模式) + is-read-cookie: false diff --git a/continew-starter-core/src/main/java/top/charles7c/continew/starter/core/handler/GeneralPropertySourceFactory.java b/continew-starter-core/src/main/java/top/charles7c/continew/starter/core/handler/GeneralPropertySourceFactory.java new file mode 100644 index 00000000..aa5e3d6d --- /dev/null +++ b/continew-starter-core/src/main/java/top/charles7c/continew/starter/core/handler/GeneralPropertySourceFactory.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + *

+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.gnu.org/licenses/lgpl.html + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.continew.starter.core.handler; + +import cn.hutool.core.util.StrUtil; +import org.springframework.boot.env.YamlPropertySourceLoader; +import org.springframework.core.env.PropertySource; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.DefaultPropertySourceFactory; +import org.springframework.core.io.support.EncodedResource; +import org.springframework.lang.Nullable; + +import java.io.IOException; + +/** + * 通用配置文件读取工厂(DefaultPropertySourceFactory 仅支持 properties 配置文件读取,详见:YAML Shortcomings) + * + * @author Charles7c + * @since 1.0.0 + */ +public class GeneralPropertySourceFactory extends DefaultPropertySourceFactory { + + @Override + public PropertySource createPropertySource(@Nullable String name, EncodedResource encodedResource) throws IOException { + Resource resource = encodedResource.getResource(); + String resourceName = resource.getFilename(); + if (StrUtil.isNotBlank(resourceName) && StrUtil.endWithAny(resourceName, ".yml", ".yaml")) { + return new YamlPropertySourceLoader().load(resourceName, resource).get(0); + } + return super.createPropertySource(name, encodedResource); + } +} diff --git a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/autoconfigure/MybatisPlusAutoConfiguration.java b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/autoconfigure/MybatisPlusAutoConfiguration.java index e446a28a..856161fe 100644 --- a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/autoconfigure/MybatisPlusAutoConfiguration.java +++ b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/charles7c/continew/starter/data/mybatis/plus/autoconfigure/MybatisPlusAutoConfiguration.java @@ -33,7 +33,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.PropertySource; import org.springframework.transaction.annotation.EnableTransactionManagement; +import top.charles7c.continew.starter.core.handler.GeneralPropertySourceFactory; /** * MyBatis Plus 自动配置 @@ -47,6 +49,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement(proxyTargetClass = true) @EnableConfigurationProperties(MyBatisPlusExtensionProperties.class) @ConditionalOnProperty(prefix = "mybatis-plus.extension", name = "enabled", havingValue = "true") +@PropertySource(value = "classpath:default-data-mybatis-plus.yml", factory = GeneralPropertySourceFactory.class) public class MybatisPlusAutoConfiguration { /** diff --git a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/resources/default-data-mybatis-plus.yml b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/resources/default-data-mybatis-plus.yml new file mode 100644 index 00000000..1b015553 --- /dev/null +++ b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/resources/default-data-mybatis-plus.yml @@ -0,0 +1,17 @@ +--- ### MyBatis Plus 配置(https://baomidou.com/pages/56bac0/#%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE) +mybatis-plus: + # 启动时是否检查 MyBatis XML 文件的存在(默认:false 不检查) + check-config-location: true + ## MyBatis 原生支持配置 + configuration: + # 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名)到经典 Java 属性名 aColumn(驼峰命名)的类似映射 + # 此属性在 MyBatis 中原默认值为 false,在 MyBatis-Plus 中,此属性也将用于生成最终的 SQL 的 select body,如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名 + map-underscore-to-camel-case: true + # MyBatis 自动映射时未知列或未知属性处理策略,通过该配置可指定 MyBatis 在自动映射过程中遇到未知列或者未知属性时如何处理 + # NONE:不做任何处理 (默认值);WARNING:以日志的形式打印相关警告信息;FAILING:当作映射失败处理,并抛出异常和详细信息 + auto-mapping-unknown-column-behavior: NONE + # 日志配置 + # 默认:org.apache.ibatis.logging.slf4j.Slf4jImpl + # 更详细(会有性能损耗):org.apache.ibatis.logging.stdout.StdOutImpl + # 关闭(可单纯使用 p6spy 分析):org.apache.ibatis.logging.nologging.NoLoggingImpl + log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl diff --git a/continew-starter-json/continew-starter-json-jackson/src/main/java/top/charles7c/continew/starter/json/jackson/autoconfigure/JacksonAutoConfiguration.java b/continew-starter-json/continew-starter-json-jackson/src/main/java/top/charles7c/continew/starter/json/jackson/autoconfigure/JacksonAutoConfiguration.java index 3516f2fb..d62cb5c2 100644 --- a/continew-starter-json/continew-starter-json-jackson/src/main/java/top/charles7c/continew/starter/json/jackson/autoconfigure/JacksonAutoConfiguration.java +++ b/continew-starter-json/continew-starter-json-jackson/src/main/java/top/charles7c/continew/starter/json/jackson/autoconfigure/JacksonAutoConfiguration.java @@ -28,6 +28,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.PropertySource; +import top.charles7c.continew.starter.core.handler.GeneralPropertySourceFactory; import top.charles7c.continew.starter.json.jackson.serializer.BigNumberSerializer; import java.math.BigInteger; @@ -45,6 +47,7 @@ import java.util.TimeZone; */ @Slf4j @AutoConfiguration +@PropertySource(value = "classpath:default-json-jackson.yml", factory = GeneralPropertySourceFactory.class) public class JacksonAutoConfiguration { @Bean diff --git a/continew-starter-json/continew-starter-json-jackson/src/main/resources/default-json-jackson.yml b/continew-starter-json/continew-starter-json-jackson/src/main/resources/default-json-jackson.yml new file mode 100644 index 00000000..54306816 --- /dev/null +++ b/continew-starter-json/continew-starter-json-jackson/src/main/resources/default-json-jackson.yml @@ -0,0 +1,21 @@ +--- ### Spring 配置 +spring: + ## MVC 配置 + mvc: + format: + # 日期格式化(针对 java.util.Date) + date-time: yyyy-MM-dd HH:mm:ss + ## Jackson 配置 + jackson: + # 时区配置 + time-zone: GMT+8 + # 日期格式化(针对 java.util.Date) + date-format: yyyy-MM-dd HH:mm:ss + # 序列化配置(Bean -> JSON) + serialization: + # 允许序列化无属性的 Bean + FAIL_ON_EMPTY_BEANS: false + # 反序列化配置(JSON -> Bean) + deserialization: + # 允许反序列化不存在的属性 + FAIL_ON_UNKNOWN_PROPERTIES: false