diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysTenant.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysTenant.java index 0b3b982..0d69907 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysTenant.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysTenant.java @@ -1,5 +1,6 @@ package com.qiaoba.api.system.entity; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.qiaoba.common.base.entity.BaseEntity; import lombok.Data; @@ -21,17 +22,12 @@ public class SysTenant extends BaseEntity { private static final long serialVersionUID = 1L; - private Long id; + @TableId + private Long tenantId; - private String code; + private String tenantCode; - private String name; - - private String domainName; - - private Date expiryDate; - - private String contact; + private String tenantName; private String province; @@ -41,5 +37,14 @@ public class SysTenant extends BaseEntity { private String address; + private String contactUser; + + private String contactPhone; + + private String dataType; + + private Date expireTime; + private String status; + } diff --git a/qiaoba-application/src/main/resources/application-dev.yml b/qiaoba-application/src/main/resources/application-dev.yml index 7495cd5..cac2950 100644 --- a/qiaoba-application/src/main/resources/application-dev.yml +++ b/qiaoba-application/src/main/resources/application-dev.yml @@ -1,11 +1,32 @@ -spring: +qiaoba: datasource: - 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 - type: com.alibaba.druid.pool.DruidDataSource - druid: - initial-size: 5 #连接池初始化大小 - min-idle: 10 #最小空闲连接数 - max-active: 20 #最大连接数 + master: + driver: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://121.5.136.69:3306/qiaoba-boot-1?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: + - 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 + weight: 2 #权重 默认 1 + is-use: true #是否使用 默认 true + - driver: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/qiaoba-boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true + username: root + password: root + 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..50d8d52 100644 --- a/qiaoba-application/src/main/resources/application.yml +++ b/qiaoba-application/src/main/resources/application.yml @@ -1,6 +1,8 @@ server: port: 80 spring: + main: + allow-bean-definition-overriding: true #新创建的bean覆盖旧的bean application: name: qiaoba-boot profiles: @@ -13,8 +15,7 @@ spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 - main: - allow-bean-definition-overriding: true + # springdoc-openapi项目配置 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..b5f4ee2 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 @@ -1,14 +1,23 @@ package com.qiaoba.common.database.config; +import cn.hutool.core.collection.CollUtil; import com.alibaba.druid.pool.DruidDataSource; -import com.qiaoba.common.database.entity.DynamicDataSource; -import org.springframework.context.annotation.Bean; +import com.qiaoba.common.database.constants.DynamicDatasourceConstant; +import com.qiaoba.common.database.properties.DefaultDataSourceProperties; +import com.qiaoba.common.database.properties.MasterInfo; +import com.qiaoba.common.database.properties.PoolInfo; +import com.qiaoba.common.database.properties.SlaveInfo; +import com.qiaoba.common.database.utils.JdbcUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; +import javax.annotation.PostConstruct; +import javax.annotation.Resource; import java.sql.SQLException; -import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; /** * 全局跨域配置 @@ -17,67 +26,62 @@ import java.util.Map; * @version 1.0 * @since 2021/10/15 0015 下午 16:43 */ +@Slf4j @Configuration public class DynamicDataSourceConfig { + + @Resource + private DynamicDataSourceContext dataSource; + @Resource + private DefaultDataSourceProperties defaultDataSourceProperties; + + public static Map DATA_SOURCE_MAP = new ConcurrentHashMap<>(); + /** * 把DynamicDataSourceContext 纳入容器管理,其他地方使用DynamicDataSourceConfig 类可以直接从容器取对象,并调用freshDataSource方法 */ - @Bean - @Primary - public static DynamicDataSourceContext dataSource() { - Map targetDataSource = getDataSource(); - //把DynamicDataSourceContext纳入容器管理 - DynamicDataSourceContext dynamicDataSourceContext = new DynamicDataSourceContext(); - dynamicDataSourceContext.freshDataSource(targetDataSource); - return dynamicDataSourceContext; + @PostConstruct + public void init() { + MasterInfo master = defaultDataSourceProperties.getMaster(); + List slaves = defaultDataSourceProperties.getSlaves(); + addDataSourceToMap(DynamicDatasourceConstant.DEFAULT_MASTER_DATASOURCE_KEY, buildDataSource(master.getDriver(), master.getUrl(), master.getUsername(), master.getPassword(), master.getPool())); + if (CollUtil.isNotEmpty(slaves)) { + for (int i = 0; i < slaves.size(); i++) { + SlaveInfo slave = slaves.get(i); + if (slave.getIsUse()) { + addDataSourceToMap(DynamicDatasourceConstant.DEFAULT_SLAVE_DATASOURCE_PREFIX + i, buildDataSource(slave.getDriver(), slave.getUrl(), slave.getUsername(), slave.getPassword(), slave.getPool())); + } + } + } + dataSource.freshDataSource(DATA_SOURCE_MAP); } - /** - * 构建初始化数据源 TODO 生成中去其他地方获取初始化数据源(例如:表里面获取) - * - * @return - */ - public static Map getDataSource() { - - DynamicDataSource ds2 = new DynamicDataSource(); - ds2.setTenantCode("1"); - ds2.setDriver("com.mysql.cj.jdbc.Driver"); - ds2.setUrl("jdbc:mysql://121.5.136.69:3306/qiaoba-boot?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai"); - ds2.setUsername("root"); - ds2.setPassword("LpYN7LUoL?l0OSpR2"); - - DynamicDataSource ds1 = new DynamicDataSource(); - ds1.setTenantCode("2"); - ds1.setDriver("com.mysql.cj.jdbc.Driver"); - ds1.setUrl("jdbc:mysql://120.79.217.22:3306/qiaoba-boot?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai"); - ds1.setUsername("root"); - ds1.setPassword("FeyZ7xZr6JtuKibm"); - Map map = new HashMap<>(); - map.put(ds1.getTenantCode(), buildDataSource(ds1)); - map.put(ds2.getTenantCode(), buildDataSource(ds2)); - return map; - } - - /** - * 把数据源对象组装成HikariDataSource - * - * @param DynamicDataSource - * @return - */ - private static Object buildDataSource(DynamicDataSource DynamicDataSource) { + private static Object buildDataSource(String driver, String url, String username, String password, PoolInfo poolInfo) { + boolean flag = JdbcUtil.checkConnect(driver, url, username, password); + if (!flag) { + log.error("数据源: " + url + " , 连接失败,请检查!"); + return null; + } DruidDataSource dataSource = new DruidDataSource(); - dataSource.setUrl(DynamicDataSource.getUrl()); - dataSource.setUsername(DynamicDataSource.getUsername()); - dataSource.setPassword(DynamicDataSource.getPassword()); - dataSource.setDriverClassName(DynamicDataSource.getDriver()); - dataSource.setInitialSize(5); - dataSource.setMinIdle(10); - dataSource.setMaxActive(20); + dataSource.setUrl(url); + dataSource.setUsername(username); + dataSource.setPassword(password); + dataSource.setDriverClassName(driver); + dataSource.setInitialSize(poolInfo.getInit()); + dataSource.setMinIdle(poolInfo.getMin()); + dataSource.setMaxActive(poolInfo.getMax()); try { dataSource.init(); + return dataSource; } catch (SQLException e) { - e.printStackTrace(); + dataSource.close(); + return null; + } + } + + private void addDataSourceToMap(String name, Object dataSource) { + if (Objects.nonNull(dataSource)) { + DATA_SOURCE_MAP.put(name, dataSource); } - return dataSource; } } diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/config/DynamicDataSourceContext.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/config/DynamicDataSourceContext.java index 4b23285..004e6b7 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/config/DynamicDataSourceContext.java +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/config/DynamicDataSourceContext.java @@ -1,5 +1,6 @@ package com.qiaoba.common.database.config; +import com.qiaoba.common.database.constants.DynamicDatasourceConstant; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; import java.util.Map; @@ -16,12 +17,13 @@ public class DynamicDataSourceContext extends AbstractRoutingDataSource { private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + /** * 设置默认数据源、全部数据源,及刷新 */ public void freshDataSource(Map targetDataSources) { //默认数据源 - super.setDefaultTargetDataSource(targetDataSources.get("master")); + super.setDefaultTargetDataSource(targetDataSources.get(DynamicDatasourceConstant.DEFAULT_MASTER_DATASOURCE_KEY)); //设置全部数据源 super.setTargetDataSources(targetDataSources); //刷新(即把targetDataSources刷到resolvedDataSources中去,resolvedDataSources才是我们真正存放数据源的map) diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/constants/DynamicDatasourceConstant.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/constants/DynamicDatasourceConstant.java new file mode 100644 index 0000000..79d4132 --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/constants/DynamicDatasourceConstant.java @@ -0,0 +1,32 @@ +package com.qiaoba.common.database.constants; + +/** + * DynamicDatasourceConstant + * + * @author ailanyin + * @version 1.0 + * @since 2023-04-27 19:35:28 + */ +public class DynamicDatasourceConstant { + + /** + * 系统默认的主数据源名称 + */ + public static final String DEFAULT_MASTER_DATASOURCE_KEY = "master_default"; + + /** + * 系统默认的从数据源名称 + */ + public static final String DEFAULT_SLAVE_DATASOURCE_PREFIX = "slave_default_"; + + /** + * 主数据源拼接前缀 master_tenantId + */ + public static final String MASTER_PREFIX = "master_"; + + /** + * 从数据源拼接前缀 slave_tenantId_序号 + */ + public static final String SLAVE_PREFIX = "slave_"; + +} diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/factories/DynamicDataSourceFactory.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/factories/DynamicDataSourceFactory.java index 450560a..4ec84bf 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/factories/DynamicDataSourceFactory.java +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/factories/DynamicDataSourceFactory.java @@ -2,32 +2,38 @@ package com.qiaoba.common.database.factories; import com.qiaoba.common.database.config.DynamicDataSourceConfig; import com.qiaoba.common.database.config.DynamicDataSourceContext; +import com.qiaoba.common.database.filters.DynamicDataSourceFilter; +import com.qiaoba.common.database.properties.DefaultDataSourceProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; - -import java.util.Map; /** - * 动态数据源的工厂,主要解决缓存依赖 + * 动态数据源工厂 * - * @version 1.0 * @author ailanyin - * @since 2023-04-25 21:47:34 + * @version 1.0 + * @since 2021/10/15 0015 下午 16:43 */ @Configuration public class DynamicDataSourceFactory { - /** - * 把DynamicDataSourceContext 纳入容器管理,其他地方使用DynamicDataSourceConfig 类可以直接从容器取对象,并调用freshDataSource方法 - */ @Bean - @Primary - public static DynamicDataSourceContext dataSource() { - Map targetDataSource = DynamicDataSourceConfig.getDataSource(); - //把DynamicDataSourceContext纳入容器管理 - DynamicDataSourceContext dynamicDataSourceContext = new DynamicDataSourceContext(); - dynamicDataSourceContext.freshDataSource(targetDataSource); - return dynamicDataSourceContext; + public DynamicDataSourceContext dataSource() { + return new DynamicDataSourceContext(); + } + + @Bean + public DynamicDataSourceConfig dynamicDataSourceConfig() { + return new DynamicDataSourceConfig(); + } + + @Bean + public DynamicDataSourceFilter handleTenantFilter() { + return new DynamicDataSourceFilter(); + } + + @Bean + public DefaultDataSourceProperties defaultDataSourceProperties() { + return new DefaultDataSourceProperties(); } } 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/DynamicDataSourceFilter.java similarity index 61% rename from qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/HandleTenantFilter.java rename to qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/filters/DynamicDataSourceFilter.java index 999201c..94f2bbc 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/DynamicDataSourceFilter.java @@ -1,12 +1,14 @@ package com.qiaoba.common.database.filters; import com.qiaoba.common.database.config.DynamicDataSourceContext; +import com.qiaoba.common.web.utils.ResponseUtil; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** @@ -18,7 +20,7 @@ import java.io.IOException; */ @Component @Order(-10000) -public class HandleTenantFilter implements Filter { +public class DynamicDataSourceFilter implements Filter { @Resource private DynamicDataSourceContext dynamicDataSourceContext; @@ -26,11 +28,21 @@ public class HandleTenantFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; - String instanceId = request.getParameter("tenant"); + String tenantCode = request.getParameter("tenant"); + if (!checkTenantInfo(tenantCode, servletResponse)) { + return; + } //设置当前租户对应的数据库 - dynamicDataSourceContext.setDataSource(instanceId); + dynamicDataSourceContext.setDataSource(tenantCode); System.out.println("当前数据源是:" + dynamicDataSourceContext.getDataSource()); filterChain.doFilter(servletRequest, servletResponse); dynamicDataSourceContext.clearDataSource(); } + + private boolean checkTenantInfo(String tenantCode, ServletResponse servletResponse) throws IOException { + // 检查租户的信息,是否存在,是否过期,是否禁用 + ResponseUtil.response((HttpServletResponse) servletResponse, "租户: " + tenantCode + "已到期"); + return false; + } + } 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..7598fe9 --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/DefaultDataSourceProperties.java @@ -0,0 +1,20 @@ +package com.qiaoba.common.database.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.List; + + +@Component +@ConfigurationProperties(prefix = "qiaoba.datasource") +@Data +@EnableConfigurationProperties +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/java/com/qiaoba/common/database/utils/JdbcUtil.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/utils/JdbcUtil.java new file mode 100644 index 0000000..35ab5ba --- /dev/null +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/utils/JdbcUtil.java @@ -0,0 +1,48 @@ +package com.qiaoba.common.database.utils; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +/** + * JdbcUtil + * + * @author ailanyin + * @version 1.0 + * @since 2021/10/15 0015 下午 16:43 + */ +public class JdbcUtil { + + /** + * 检查数据源是否可以连接 + * + * @param driver 数据库驱动 + * @param url url + * @param username 用户名 + * @param password 密码 + * @return true = 是 + */ + public static boolean checkConnect(String driver, String url, String username, String password) { + Connection conn = null; + try { + try { + Class.forName(driver); + //建立连接 + conn = DriverManager.getConnection(url, username, password); + return true; + } catch (SQLException e) { + return false; + } + } catch (Exception e) { + return false; + } finally { + if (conn != null) { + try { + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + } +} 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..352d668 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,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.qiaoba.common.database.config.DynamicDataSourceConfig,\ - com.qiaoba.common.database.filters.HandleTenantFilter + com.qiaoba.common.database.factories.DynamicDataSourceFactory diff --git a/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/ResponseUtil.java b/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/ResponseUtil.java new file mode 100644 index 0000000..ba30a92 --- /dev/null +++ b/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/ResponseUtil.java @@ -0,0 +1,21 @@ +package com.qiaoba.common.web.utils; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * ResponseUtil + * + * @author ailanyin + * @version 1.0 + * @since 2023-04-25 22:48:43 + */ +public class ResponseUtil { + + public static void response(HttpServletResponse response, String msg) throws IOException { + response.setStatus(HttpServletResponse.SC_OK); + response.setContentType("text/plain; charset=UTF-8"); + response.getWriter().write(msg); + } + +}