first commit

This commit is contained in:
2023-04-26 23:15:33 +08:00
parent 6adac3aeb1
commit 0becdc40d0
11 changed files with 204 additions and 6 deletions

View File

@ -4,6 +4,7 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
@ -14,6 +15,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
* @version 1.0 * @version 1.0
* @date 1/29/23 10:44 AM * @date 1/29/23 10:44 AM
*/ */
@EnableConfigurationProperties
@EnableScheduling @EnableScheduling
@ComponentScan({"com.qiaoba.module.**", "com.qiaoba.application"}) @ComponentScan({"com.qiaoba.module.**", "com.qiaoba.application"})
@MapperScan("com.qiaoba.module.**.mapper") @MapperScan("com.qiaoba.module.**.mapper")

View File

@ -9,3 +9,34 @@ spring:
min-idle: 10 #最小空闲连接数 min-idle: 10 #最小空闲连接数
max-active: 20 #最大连接数 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

View File

@ -16,7 +16,6 @@ spring:
main: main:
allow-bean-definition-overriding: true allow-bean-definition-overriding: true
# springdoc-openapi项目配置 # springdoc-openapi项目配置
springdoc: springdoc:
swagger-ui: swagger-ui:
@ -36,5 +35,4 @@ knife4j:
language: zh_cn language: zh_cn
enable-swagger-models: false enable-swagger-models: false
enable-footer-custom: true enable-footer-custom: true
footer-custom-content: create by ailanyin footer-custom-content: create by ailanyin

View File

@ -19,16 +19,16 @@ import java.util.Map;
*/ */
@Configuration @Configuration
public class DynamicDataSourceConfig { public class DynamicDataSourceConfig {
/** /**
* 把DynamicDataSourceContext 纳入容器管理其他地方使用DynamicDataSourceConfig 类可以直接从容器取对象并调用freshDataSource方法 * 把DynamicDataSourceContext 纳入容器管理其他地方使用DynamicDataSourceConfig 类可以直接从容器取对象并调用freshDataSource方法
*/ */
@Bean @Bean
@Primary @Primary
public static DynamicDataSourceContext dataSource() { public static DynamicDataSourceContext dataSource() {
Map<Object, Object> targetDataSource = getDataSource();
//把DynamicDataSourceContext纳入容器管理 //把DynamicDataSourceContext纳入容器管理
DynamicDataSourceContext dynamicDataSourceContext = new DynamicDataSourceContext(); DynamicDataSourceContext dynamicDataSourceContext = new DynamicDataSourceContext();
dynamicDataSourceContext.freshDataSource(targetDataSource); dynamicDataSourceContext.freshDataSource(getDataSource());
return dynamicDataSourceContext; return dynamicDataSourceContext;
} }
@ -38,7 +38,6 @@ public class DynamicDataSourceConfig {
* @return * @return
*/ */
public static Map<Object, Object> getDataSource() { public static Map<Object, Object> getDataSource() {
DynamicDataSource ds2 = new DynamicDataSource(); DynamicDataSource ds2 = new DynamicDataSource();
ds2.setTenantCode("1"); ds2.setTenantCode("1");
ds2.setDriver("com.mysql.cj.jdbc.Driver"); ds2.setDriver("com.mysql.cj.jdbc.Driver");

View File

@ -1,6 +1,8 @@
package com.qiaoba.common.database.filters; package com.qiaoba.common.database.filters;
import com.qiaoba.common.database.config.DynamicDataSourceContext; 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.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -20,11 +22,14 @@ import java.io.IOException;
@Order(-10000) @Order(-10000)
public class HandleTenantFilter implements Filter { public class HandleTenantFilter implements Filter {
@Autowired
private DefaultDataSourceProperties defaultDataSourceProperties;
@Resource @Resource
private DynamicDataSourceContext dynamicDataSourceContext; private DynamicDataSourceContext dynamicDataSourceContext;
@Override @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println(defaultDataSourceProperties);
HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletRequest request = (HttpServletRequest) servletRequest;
String instanceId = request.getParameter("tenant"); String instanceId = request.getParameter("tenant");
//设置当前租户对应的数据库 //设置当前租户对应的数据库

View File

@ -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<SlaveInfo> slaves;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<com.qiaoba.common.database.properties.SlaveInfo>",
"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": []
}

View File

@ -1,5 +1,6 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.qiaoba.common.database.config.DynamicDataSourceConfig,\ com.qiaoba.common.database.config.DynamicDataSourceConfig,\
com.qiaoba.common.database.properties.DefaultDataSourceProperties,\
com.qiaoba.common.database.filters.HandleTenantFilter com.qiaoba.common.database.filters.HandleTenantFilter