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.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")
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
@ -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");
|
||||||
|
@ -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");
|
||||||
//设置当前租户对应的数据库
|
//设置当前租户对应的数据库
|
||||||
|
@ -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=\
|
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
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user