From 378de684e1c1b5b3e56b5ab5520834d8e9fdbc8b Mon Sep 17 00:00:00 2001 From: liuchen864 <23082234@qq.com> Date: Tue, 26 Sep 2023 09:35:10 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9B=86=E6=88=90shardingSphere,=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- win-dependencies/pom.xml | 8 +- .../win-spring-boot-starter-mybatis/pom.xml | 4 + .../WinDataSourceAutoConfiguration.java | 78 ++++++++- .../datasource/core/enums/DataSourceEnum.java | 8 +- .../com/win/server/WinServerApplication.java | 23 +-- .../src/main/resources/application-dev.yaml | 97 ++++++----- .../src/main/resources/application-druid.yml | 47 ++++++ .../src/main/resources/application-prod.yaml | 96 ++++++----- .../src/main/resources/application-test.yaml | 96 ++++++----- .../src/main/resources/application.yaml | 8 +- .../src/main/resources/logback-spring.xml | 158 +++++++++++------- 11 files changed, 409 insertions(+), 214 deletions(-) create mode 100644 win-server/src/main/resources/application-druid.yml diff --git a/win-dependencies/pom.xml b/win-dependencies/pom.xml index b3089ce5..4743ce1f 100644 --- a/win-dependencies/pom.xml +++ b/win-dependencies/pom.xml @@ -26,8 +26,9 @@ 1.2.19 3.5.3.2 3.5.3.2 - 3.6.1 + 3.3.2 1.4.6 + 5.1.1 3.18.0 8.1.2.141 @@ -216,6 +217,11 @@ dynamic-datasource-spring-boot-starter ${dynamic-datasource.version} + + org.apache.shardingsphere + shardingsphere-jdbc-core-spring-boot-starter + ${shardingsphere.version} + com.github.yulichang mybatis-plus-join-boot-starter diff --git a/win-framework/win-spring-boot-starter-mybatis/pom.xml b/win-framework/win-spring-boot-starter-mybatis/pom.xml index e3a65a4c..13307214 100644 --- a/win-framework/win-spring-boot-starter-mybatis/pom.xml +++ b/win-framework/win-spring-boot-starter-mybatis/pom.xml @@ -61,6 +61,10 @@ com.baomidou dynamic-datasource-spring-boot-starter + + org.apache.shardingsphere + shardingsphere-jdbc-core-spring-boot-starter + com.github.yulichang diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/config/WinDataSourceAutoConfiguration.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/config/WinDataSourceAutoConfiguration.java index 2f444b5b..68dfe416 100644 --- a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/config/WinDataSourceAutoConfiguration.java +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/config/WinDataSourceAutoConfiguration.java @@ -1,14 +1,30 @@ package com.win.framework.datasource.config; -import com.win.framework.datasource.core.filter.DruidAdRemoveFilter; import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; +import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; +import com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider; +import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.win.framework.datasource.core.enums.DataSourceEnum; +import com.win.framework.datasource.core.filter.DruidAdRemoveFilter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Primary; import org.springframework.transaction.annotation.EnableTransactionManagement; +import javax.sql.DataSource; +import java.util.HashMap; +import java.util.Map; + /** * 数据库配置类 * @@ -16,9 +32,67 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; */ @AutoConfiguration @EnableTransactionManagement(proxyTargetClass = true) // 启动事务管理 -@EnableConfigurationProperties(DruidStatProperties.class) +@EnableConfigurationProperties({DruidStatProperties.class}) +@AutoConfigureBefore({DynamicDataSourceAutoConfiguration.class, SpringBootConfiguration.class}) public class WinDataSourceAutoConfiguration { + /** + * 动态数据源配置项 + * 这里会根据yml文件的配置自动加载配置,将多个数据源信息放到datasourceMap中 + */ + @Autowired + private DynamicDataSourceProperties properties; + + /** + * 使用shardingSphereDataSource 自动装载的 DataSource + * 5.1.1版本自动装载的shardingSphereDataSource beanName="shardingSphereDataSource" + * 要加@Lazy + */ + @Lazy + @Autowired + private DataSource shardingSphereDataSource; + @Autowired + private MybatisPlusInterceptor mybatisPlusInterceptor; + + /** + * 创建动态数据源,只创建sharding + * @return + */ + @Bean + public DynamicDataSourceProvider dynamicDataSourceProvider() { + //Map datasourceMap = properties.getDatasource(); + return new AbstractDataSourceProvider() { + @Override + public Map loadDataSources() { + //Map dataSourceMap = createDataSourceMap(datasourceMap); + Map dataSourceMap = new HashMap<>(); + // 将 shardingjdbc 管理的数据源也交给动态数据源管理 + dataSourceMap.put(DataSourceEnum.SHARDING, shardingSphereDataSource); + return dataSourceMap; + } + }; + } + + /** + * 将动态数据源设置为首选的 + * 当spring存在多个数据源时, 自动注入的是首选的对象 + * 设置为主要的数据源之后,就可以支持shardingjdbc原生的配置方式了 + * + * @return + */ + @Primary + @Bean + public DataSource dataSource(DynamicDataSourceProvider dynamicDataSourceProvider) { + DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource(); + dataSource.setPrimary(DataSourceEnum.SHARDING);//设sharding为主库 + dataSource.setStrict(properties.getStrict()); + dataSource.setStrategy(properties.getStrategy()); + dataSource.setProvider(dynamicDataSourceProvider); + dataSource.setP6spy(properties.getP6spy()); + dataSource.setSeata(properties.getSeata()); + return dataSource; + } + /** * 创建 DruidAdRemoveFilter 过滤器,过滤 common.js 的广告 */ diff --git a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/enums/DataSourceEnum.java b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/enums/DataSourceEnum.java index eb1aa755..135ee4c0 100644 --- a/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/enums/DataSourceEnum.java +++ b/win-framework/win-spring-boot-starter-mybatis/src/main/java/com/win/framework/datasource/core/enums/DataSourceEnum.java @@ -4,7 +4,6 @@ package com.win.framework.datasource.core.enums; * 对应于多数据源中不同数据源配置 * * 通过在方法上,使用 {@link com.baomidou.dynamic.datasource.annotation.DS} 注解,设置使用的数据源。 - * 注意,默认是 {@link #MASTER} 数据源 * * 对应官方文档为 http://dynamic-datasource.com/guide/customize/Annotation.html */ @@ -13,10 +12,11 @@ public interface DataSourceEnum { /** * 主库,推荐使用 {@link com.baomidou.dynamic.datasource.annotation.Master} 注解 */ - String MASTER = "master"; + String SHARDING = "sharding"; + /** - * 从库,推荐使用 {@link com.baomidou.dynamic.datasource.annotation.Slave} 注解 + * 主库,推荐使用 {@link com.baomidou.dynamic.datasource.annotation.Master} 注解 */ - String SLAVE = "slave"; + String MASTER = "master"; } diff --git a/win-server/src/main/java/com/win/server/WinServerApplication.java b/win-server/src/main/java/com/win/server/WinServerApplication.java index 111aa031..00d22c08 100644 --- a/win-server/src/main/java/com/win/server/WinServerApplication.java +++ b/win-server/src/main/java/com/win/server/WinServerApplication.java @@ -1,34 +1,25 @@ package com.win.server; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; /** * 项目的启动类 * - * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 - * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 - * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 - * * @author 闻荫源码 */ @SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${win.info.base-package} -@SpringBootApplication(scanBasePackages = {"${win.info.base-package}.server", "${win.info.base-package}.module"}) +@SpringBootApplication( + scanBasePackages = {"${win.info.base-package}.server", "${win.info.base-package}.module"}, + exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class} +) public class WinServerApplication { public static void main(String[] args) { - // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 - // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 - // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 - SpringApplication.run(WinServerApplication.class, args); -// new SpringApplicationBuilder(WinServerApplication.class) -// .applicationStartup(new BufferingApplicationStartup(20480)) -// .run(args); - - // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 - // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 - // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章 + // new SpringApplicationBuilder(WinServerApplication.class).applicationStartup(new BufferingApplicationStartup(20480)).run(args); } } diff --git a/win-server/src/main/resources/application-dev.yaml b/win-server/src/main/resources/application-dev.yaml index d378b0dd..281c2cd0 100644 --- a/win-server/src/main/resources/application-dev.yaml +++ b/win-server/src/main/resources/application-dev.yaml @@ -9,51 +9,61 @@ spring: exclude: - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 - org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration # 排除积木报表带来的 MongoDB 的自动配置 + shardingsphere: + mode: + type: Memory + # 属性配置 + props: + sql.show: true + ## 数据源配置 + datasource: + names: master,slave0,slave1 + # 主数据源 + master: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: learun + password: Microdoft@2021 + # 读数据源 + slave0: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: learun + password: Microdoft@2021 + # 读数据源 + slave1: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: learun + password: Microdoft@2021 + # 读写分离类型,如: Static,Dynamic + rules: + readwrite-splitting: + data-sources: + myds: + type: Static + props: + write-data-source-name: master + read-data-source-names: slave0,slave1 + load-balancer-name: alg_round + load-balancers: + alg_round: + type: ROUND_ROBIN + # 不创建此数据源,用于生成代码 datasource: - druid: # Druid 【监控】相关的全局配置 - web-stat-filter: - enabled: true - stat-view-servlet: - enabled: true - allow: # 设置白名单,不填则允许所有访问 - url-pattern: /druid/* - login-username: # 控制台管理用户名和密码 - login-password: - filter: - stat: - enabled: true - log-slow-sql: true # 慢 SQL 记录 - slow-sql-millis: 100 - merge-sql: true - wall: - config: - multi-statement-allow: true - dynamic: # 多数据源配置 - druid: # Druid 【连接池】相关的全局配置 - initial-size: 5 # 初始连接数 - min-idle: 10 # 最小连接池数量 - max-active: 20 # 最大连接池数量 - max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 - time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 - min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 - max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 - validation-query: SELECT 1 # 配置检测连接是否有效 - test-while-idle: true - test-on-borrow: false - test-on-return: false + dynamic: + strict: true primary: master datasource: master: - name: sfms - url: jdbc:mysql://dev.ccwin-in.com:23113/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 - username: learun - password: Microdoft@2021 - slave: # 模拟从库,可根据自己需要修改 - name: sfms - lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://dev.ccwin-in.com:23113/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 - username: learun - password: Microdoft@2021 + type: ${spring.shardingsphere.datasource.master.type} + driver-class-name: ${spring.shardingsphere.datasource.master.driverClassName} + url: ${spring.shardingsphere.datasource.master.url} + username: ${spring.shardingsphere.datasource.master.username} + password: ${spring.shardingsphere.datasource.master.password} # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: @@ -135,7 +145,10 @@ spring: # 日志文件配置 logging: file: - name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + path: logs + level: + com.win: debug + org.springframework: warn --- #################### 微信公众号相关配置 #################### wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 diff --git a/win-server/src/main/resources/application-druid.yml b/win-server/src/main/resources/application-druid.yml new file mode 100644 index 00000000..d6479cca --- /dev/null +++ b/win-server/src/main/resources/application-druid.yml @@ -0,0 +1,47 @@ +# 数据源配置 +spring: + datasource: + druid: + # 初始连接数 + initialSize: 20 + # 最小连接池数量 + minIdle: 20 + # 最大连接池数量 + maxActive: 200 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: false + url-pattern: /* # 过滤所有url + exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" # 排除一些不必要的url + session-stat-enable: true # 开启session统计功能 + session-stat-max-count: 1000 # session的最大个数,默认100 + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: win + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true \ No newline at end of file diff --git a/win-server/src/main/resources/application-prod.yaml b/win-server/src/main/resources/application-prod.yaml index d378b0dd..1850e00e 100644 --- a/win-server/src/main/resources/application-prod.yaml +++ b/win-server/src/main/resources/application-prod.yaml @@ -9,51 +9,60 @@ spring: exclude: - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 - org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration # 排除积木报表带来的 MongoDB 的自动配置 + shardingsphere: + mode: + type: Memory + # 属性配置 + props: + sql.show: true + ## 数据源配置 + datasource: + names: master,slave0,slave1 + # 主数据源 + master: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: learun + password: Microdoft@2021 + # 读数据源 + slave0: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: learun + password: Microdoft@2021 + # 读数据源 + slave1: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: learun + password: Microdoft@2021 + # 读写分离类型,如: Static,Dynamic + rules: + readwrite-splitting: + data-sources: + myds: + type: Static + props: + write-data-source-name: master + read-data-source-names: slave0,slave1 + load-balancer-name: alg_round + load-balancers: + alg_round: + type: ROUND_ROBIN datasource: - druid: # Druid 【监控】相关的全局配置 - web-stat-filter: - enabled: true - stat-view-servlet: - enabled: true - allow: # 设置白名单,不填则允许所有访问 - url-pattern: /druid/* - login-username: # 控制台管理用户名和密码 - login-password: - filter: - stat: - enabled: true - log-slow-sql: true # 慢 SQL 记录 - slow-sql-millis: 100 - merge-sql: true - wall: - config: - multi-statement-allow: true - dynamic: # 多数据源配置 - druid: # Druid 【连接池】相关的全局配置 - initial-size: 5 # 初始连接数 - min-idle: 10 # 最小连接池数量 - max-active: 20 # 最大连接池数量 - max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 - time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 - min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 - max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 - validation-query: SELECT 1 # 配置检测连接是否有效 - test-while-idle: true - test-on-borrow: false - test-on-return: false + dynamic: + strict: true primary: master datasource: master: - name: sfms - url: jdbc:mysql://dev.ccwin-in.com:23113/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 - username: learun - password: Microdoft@2021 - slave: # 模拟从库,可根据自己需要修改 - name: sfms - lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://dev.ccwin-in.com:23113/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 - username: learun - password: Microdoft@2021 + type: ${spring.shardingsphere.datasource.master.type} + driver-class-name: ${spring.shardingsphere.datasource.master.driverClassName} + url: ${spring.shardingsphere.datasource.master.url} + username: ${spring.shardingsphere.datasource.master.username} + password: ${spring.shardingsphere.datasource.master.password} # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: @@ -135,7 +144,10 @@ spring: # 日志文件配置 logging: file: - name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + path: logs + level: + com.win: warn + org.springframework: warn --- #################### 微信公众号相关配置 #################### wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 diff --git a/win-server/src/main/resources/application-test.yaml b/win-server/src/main/resources/application-test.yaml index d378b0dd..c750c82d 100644 --- a/win-server/src/main/resources/application-test.yaml +++ b/win-server/src/main/resources/application-test.yaml @@ -9,51 +9,60 @@ spring: exclude: - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 - org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration # 排除积木报表带来的 MongoDB 的自动配置 + shardingsphere: + mode: + type: Memory + # 属性配置 + props: + sql.show: true + ## 数据源配置 + datasource: + names: master,slave0,slave1 + # 主数据源 + master: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: learun + password: Microdoft@2021 + # 读数据源 + slave0: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: learun + password: Microdoft@2021 + # 读数据源 + slave1: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.ccwin-in.com:23113/sfms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: learun + password: Microdoft@2021 + # 读写分离类型,如: Static,Dynamic + rules: + readwrite-splitting: + data-sources: + myds: + type: Static + props: + write-data-source-name: master + read-data-source-names: slave0,slave1 + load-balancer-name: alg_round + load-balancers: + alg_round: + type: ROUND_ROBIN datasource: - druid: # Druid 【监控】相关的全局配置 - web-stat-filter: - enabled: true - stat-view-servlet: - enabled: true - allow: # 设置白名单,不填则允许所有访问 - url-pattern: /druid/* - login-username: # 控制台管理用户名和密码 - login-password: - filter: - stat: - enabled: true - log-slow-sql: true # 慢 SQL 记录 - slow-sql-millis: 100 - merge-sql: true - wall: - config: - multi-statement-allow: true - dynamic: # 多数据源配置 - druid: # Druid 【连接池】相关的全局配置 - initial-size: 5 # 初始连接数 - min-idle: 10 # 最小连接池数量 - max-active: 20 # 最大连接池数量 - max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 - time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 - min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 - max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 - validation-query: SELECT 1 # 配置检测连接是否有效 - test-while-idle: true - test-on-borrow: false - test-on-return: false + dynamic: + strict: true primary: master datasource: master: - name: sfms - url: jdbc:mysql://dev.ccwin-in.com:23113/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 - username: learun - password: Microdoft@2021 - slave: # 模拟从库,可根据自己需要修改 - name: sfms - lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://dev.ccwin-in.com:23113/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 - username: learun - password: Microdoft@2021 + type: ${spring.shardingsphere.datasource.master.type} + driver-class-name: ${spring.shardingsphere.datasource.master.driverClassName} + url: ${spring.shardingsphere.datasource.master.url} + username: ${spring.shardingsphere.datasource.master.username} + password: ${spring.shardingsphere.datasource.master.password} # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: @@ -135,7 +144,10 @@ spring: # 日志文件配置 logging: file: - name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + path: logs + level: + com.win: info + org.springframework: warn --- #################### 微信公众号相关配置 #################### wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 diff --git a/win-server/src/main/resources/application.yaml b/win-server/src/main/resources/application.yaml index 5ee057ba..37d7fd4b 100644 --- a/win-server/src/main/resources/application.yaml +++ b/win-server/src/main/resources/application.yaml @@ -3,11 +3,12 @@ spring: name: win-server profiles: + include: druid active: dev main: allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 - + allow-bean-definition-overriding: true # Servlet 配置 servlet: # 文件上传相关配置项 @@ -56,7 +57,7 @@ flowable: # 2. true: 启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表 # 3. create_drop: 启动时自动创建表,关闭时自动删除表 # 4. drop_create: 启动时,删除旧表,再创建新表 - database-schema-update: true # 设置为 false,可通过 https://github.com/flowable/flowable-sql 初始化 + database-schema-update: false # 设置为 false,可通过 https://github.com/flowable/flowable-sql 初始化 db-history-used: true # flowable6 默认 true 生成信息表,无需手动设置 check-process-definitions: false # 设置为 false,禁用 /resources/processes 自动部署 BPMN XML 流程 history-level: full # full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数 @@ -65,6 +66,9 @@ flowable: mybatis-plus: configuration: map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + logImpl: org.apache.ibatis.logging.slf4j.Slf4jImpl + # 开启缓存 + cache-enabled: true global-config: db-config: id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 diff --git a/win-server/src/main/resources/logback-spring.xml b/win-server/src/main/resources/logback-spring.xml index ce034daf..ebc0d296 100644 --- a/win-server/src/main/resources/logback-spring.xml +++ b/win-server/src/main/resources/logback-spring.xml @@ -1,76 +1,108 @@ + - - - - - - + + + - -       - - - ${PATTERN_DEFAULT} - + + + + + + + + + + + + + + + debug + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 - - - - - - ${PATTERN_DEFAULT} - - - - ${LOG_FILE} - - - ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} - - ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} - - ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} - - ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} - - ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + - - - - 0 - - 256 - + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + - - - - - ${PATTERN_DEFAULT} - + + + ${log.path}/sys-user.log + + + ${log.path}/sys-user.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + + + + + \ No newline at end of file