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

@ -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");

View File

@ -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");
//设置当前租户对应的数据库

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=\
com.qiaoba.common.database.config.DynamicDataSourceConfig,\
com.qiaoba.common.database.properties.DefaultDataSourceProperties,\
com.qiaoba.common.database.filters.HandleTenantFilter