first commit
This commit is contained in:
@ -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")
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
@ -19,16 +19,16 @@ import java.util.Map;
|
||||
*/
|
||||
@Configuration
|
||||
public class DynamicDataSourceConfig {
|
||||
|
||||
/**
|
||||
* 把DynamicDataSourceContext 纳入容器管理,其他地方使用DynamicDataSourceConfig 类可以直接从容器取对象,并调用freshDataSource方法
|
||||
*/
|
||||
@Bean
|
||||
@Primary
|
||||
public static DynamicDataSourceContext dataSource() {
|
||||
Map<Object, Object> 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<Object, Object> getDataSource() {
|
||||
|
||||
DynamicDataSource ds2 = new DynamicDataSource();
|
||||
ds2.setTenantCode("1");
|
||||
ds2.setDriver("com.mysql.cj.jdbc.Driver");
|
||||
|
@ -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");
|
||||
//设置当前租户对应的数据库
|
||||
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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": []
|
||||
}
|
@ -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
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user