diff --git a/qiaoba-application/src/main/java/com/qiaoba/application/QiaoBaApplication.java b/qiaoba-application/src/main/java/com/qiaoba/application/QiaoBaApplication.java index 89f8d30..3c29c28 100644 --- a/qiaoba-application/src/main/java/com/qiaoba/application/QiaoBaApplication.java +++ b/qiaoba-application/src/main/java/com/qiaoba/application/QiaoBaApplication.java @@ -4,6 +4,7 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; @@ -14,6 +15,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; * @version 1.0 * @date 1/29/23 10:44 AM */ +@EnableConfigurationProperties @EnableScheduling @ComponentScan({"com.qiaoba.module.**", "com.qiaoba.application"}) @MapperScan("com.qiaoba.module.**.mapper") diff --git a/qiaoba-application/src/main/resources/application-dev.yml b/qiaoba-application/src/main/resources/application-dev.yml index 7495cd5..71e90b5 100644 --- a/qiaoba-application/src/main/resources/application-dev.yml +++ b/qiaoba-application/src/main/resources/application-dev.yml @@ -9,3 +9,34 @@ spring: min-idle: 10 #最小空闲连接数 max-active: 20 #最大连接数 +qiaoba: + datasource: + master: + driver: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://121.5.136.69:3306/qiaoba-boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true + username: root + password: LpYN7LUoL?l0OSpR2 + pool: + init: 5 #连接池初始化大小 + min: 10 #最小空闲连接数 + max: 20 #最大连接数 + slaves: + - url: jdbc:mysql://121.5.136.69:3306/qiaoba-boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true + username: root + password: LpYN7LUoL?l0OSpR2 + weight: 2 + pool: + init: 5 + min: 10 + max: 20 + use: true + - url: jdbc:mysql://121.5.136.69:3306/qiaoba-boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true + username: root + password: LpYN7LUoL?l0OSpR2 + weight: + pool: + init: 5 #连接池初始化大小 + min: 10 #最小空闲连接数 + max: 20 #最大连接数 + is-use: false + diff --git a/qiaoba-application/src/main/resources/application.yml b/qiaoba-application/src/main/resources/application.yml index 6eec581..7f700cc 100644 --- a/qiaoba-application/src/main/resources/application.yml +++ b/qiaoba-application/src/main/resources/application.yml @@ -16,7 +16,6 @@ spring: main: allow-bean-definition-overriding: true - # springdoc-openapi项目配置 springdoc: swagger-ui: @@ -36,5 +35,4 @@ knife4j: language: zh_cn enable-swagger-models: false enable-footer-custom: true - footer-custom-content: create by ailanyin - + footer-custom-content: create by ailanyin \ No newline at end of file diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/config/DynamicDataSourceConfig.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/config/DynamicDataSourceConfig.java index 07cb818..245a578 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/config/DynamicDataSourceConfig.java +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/config/DynamicDataSourceConfig.java @@ -19,16 +19,16 @@ import java.util.Map; */ @Configuration public class DynamicDataSourceConfig { + /** * 把DynamicDataSourceContext 纳入容器管理,其他地方使用DynamicDataSourceConfig 类可以直接从容器取对象,并调用freshDataSource方法 */ @Bean @Primary public static DynamicDataSourceContext dataSource() { - Map targetDataSource = getDataSource(); //把DynamicDataSourceContext纳入容器管理 DynamicDataSourceContext dynamicDataSourceContext = new DynamicDataSourceContext(); - dynamicDataSourceContext.freshDataSource(targetDataSource); + dynamicDataSourceContext.freshDataSource(getDataSource()); return dynamicDataSourceContext; } @@ -38,7 +38,6 @@ public class DynamicDataSourceConfig { * @return */ public static Map getDataSource() { - DynamicDataSource ds2 = new DynamicDataSource(); ds2.setTenantCode("1"); ds2.setDriver("com.mysql.cj.jdbc.Driver"); diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/HandleTenantFilter.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/HandleTenantFilter.java index 999201c..3c93077 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/HandleTenantFilter.java +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/HandleTenantFilter.java @@ -1,6 +1,8 @@ package com.qiaoba.common.database.filters; import com.qiaoba.common.database.config.DynamicDataSourceContext; +import com.qiaoba.common.database.properties.DefaultDataSourceProperties; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @@ -20,11 +22,14 @@ import java.io.IOException; @Order(-10000) public class HandleTenantFilter implements Filter { + @Autowired + private DefaultDataSourceProperties defaultDataSourceProperties; @Resource private DynamicDataSourceContext dynamicDataSourceContext; @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + System.out.println(defaultDataSourceProperties); HttpServletRequest request = (HttpServletRequest) servletRequest; String instanceId = request.getParameter("tenant"); //设置当前租户对应的数据库 diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/DefaultDataSourceProperties.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/DefaultDataSourceProperties.java new file mode 100644 index 0000000..f68c92b --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/DefaultDataSourceProperties.java @@ -0,0 +1,18 @@ +package com.qiaoba.common.database.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.List; + + +@Component +@ConfigurationProperties(prefix = "qiaoba.datasource") +@Data +public class DefaultDataSourceProperties { + + private MasterInfo master; + + private List slaves; +} diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/MasterInfo.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/MasterInfo.java new file mode 100644 index 0000000..2e81e1d --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/MasterInfo.java @@ -0,0 +1,12 @@ +package com.qiaoba.common.database.properties; + +import lombok.Data; + +@Data +public class MasterInfo { + private String driver; + private String url; + private String username; + private String password; + private PoolInfo pool; +} diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/PoolInfo.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/PoolInfo.java new file mode 100644 index 0000000..154be1e --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/PoolInfo.java @@ -0,0 +1,10 @@ +package com.qiaoba.common.database.properties; + +import lombok.Data; + +@Data +public class PoolInfo { + private Integer init; + private Integer min; + private Integer max; +} \ No newline at end of file diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/SlaveInfo.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/SlaveInfo.java new file mode 100644 index 0000000..2114211 --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/SlaveInfo.java @@ -0,0 +1,14 @@ +package com.qiaoba.common.database.properties; + +import lombok.Data; + +@Data +public class SlaveInfo { + private Boolean isUse = true; + private String driver; + private String url; + private String username; + private String password; + private Integer weight = 1; + private PoolInfo pool; +} diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/resources/META-INF/spring-configuration-metadata.json b/qiaoba-commons/qiaoba-common-datasource/src/main/resources/META-INF/spring-configuration-metadata.json new file mode 100644 index 0000000..0021167 --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/resources/META-INF/spring-configuration-metadata.json @@ -0,0 +1,108 @@ +{ + "groups": [ + { + "name": "qiaoba.datasource", + "type": "com.qiaoba.common.database.properties.DefaultDataSourceProperties", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + } + ], + "properties": [ + { + "name": "qiaoba.datasource.master", + "type": "com.qiaoba.common.database.properties.MasterInfo", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.master.driver", + "type": "java.lang.String", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.master.url", + "type": "java.lang.String", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.master.username", + "type": "java.lang.String", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.master.password", + "type": "java.lang.String", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.master.pool", + "type": "com.qiaoba.common.database.properties.PoolInfo", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.master.pool.init", + "type": "java.lang.Integer", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.master.pool.min", + "type": "java.lang.Integer", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.master.pool.max", + "type": "java.lang.Integer", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.slaves", + "type": "java.util.List", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.slaves.url", + "type": "java.lang.String", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.slaves.username", + "type": "java.lang.String", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.slaves.password", + "type": "java.lang.String", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.slaves.weight", + "type": "java.lang.String", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.slaves.is-use", + "type": "java.lang.Boolean", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties", + "defaultValue": true + }, + { + "name": "qiaoba.datasource.slaves.pool", + "type": "com.qiaoba.common.database.properties.PoolInfo", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.slaves.pool.init", + "type": "java.lang.Integer", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.slaves.pool.min", + "type": "java.lang.Integer", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + }, + { + "name": "qiaoba.datasource.slaves.pool.max", + "type": "java.lang.Integer", + "sourceType": "com.qiaoba.common.database.properties.DefaultDataSourceProperties" + } + ], + "hints": [] +} \ No newline at end of file diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/resources/META-INF/spring.factories b/qiaoba-commons/qiaoba-common-datasource/src/main/resources/META-INF/spring.factories index f13b9e4..70595ae 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/resources/META-INF/spring.factories +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/resources/META-INF/spring.factories @@ -1,5 +1,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.qiaoba.common.database.config.DynamicDataSourceConfig,\ + com.qiaoba.common.database.properties.DefaultDataSourceProperties,\ com.qiaoba.common.database.filters.HandleTenantFilter