feat: release 2.4.1

This commit is contained in:
小锅盖 2018-11-20 23:46:15 +08:00
parent 10cb533d54
commit 93173befeb
31 changed files with 454 additions and 292 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
*/target/
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###

View File

@ -1,3 +1,7 @@
# v2.4.1
- 修复了上个版本hikari不兼容1.5.x的BUG。
- 提供了hikari全局属性的配置。
# v2.4.0
- 重构了druid配置。
- 支持了更多druid参数配置支持了加密。

View File

@ -279,20 +279,82 @@ spring:
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://47.100.20.186:3306/dynamic?characterEncoding=utf8&useSSL=false
url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic?characterEncoding=utf8&useSSL=false
druid: # 以下参数针对每个库可以重新设置druid参数
initial-size:
validation-query: select 1 FROM DUAL #比如oracle就需要重新设置这个
public-key: #(非全局参数)设置即表示启用加密,底层会自动帮你配置相关的连接参数和filter。
# ......
# 生成 publickey 和密码
# java -cp druid-1.1.10.jar com.alibaba.druid.filter.config.ConfigTools youpassword
```
如上即可配置访问用户和密码,访问 http://localhost:8080/druid/index.html 查看druid监控。
## 集成 HikariCP
HikariCP官方地址 https://github.com/brettwooldridge/HikariCP 。
SpringBoot 2.+ 默认引入了HikariCP除非对版本有要求无需再次引入。
使用SpringBoot 1.5.x的版本需手动引入对应的版本参考官方地址。
```yaml
spring:
datasource:
dynamic:
hikari: # 全局hikariCP参数所有值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
catalog:
connection-timeout:
validation-timeout:
idle-timeout:
leak-detection-threshold:
max-lifetime:
max-pool-size:
min-idle:
initialization-fail-timeout:
connection-init-sql:
connection-test-query:
dataSource-class-name:
dataSource-jndi-name:
schema:
transaction-isolation-name:
is-auto-commit:
is-read-only:
is-isolate-internal-queries:
is-register-mbeans:
is-allow-pool-suspension:
data-source-properties: #以下属性仅为演示(默认不会引入)
serverTimezone: Asia/Shanghai
characterEncoding: utf-8
useUnicode: true
useSSL: false
autoReconnect: true
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
useLocalSessionState: true
rewriteBatchedStatements: true
cacheResultSetMetadata: true
cacheServerConfiguration: true
elideSetAutoCommits: true
maintainTimeStats: false
allowPublicKeyRetrieval: true
health-check-properties:
datasource:
master:
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic?characterEncoding=utf8&useSSL=false
hikari: # 以下参数针对每个库可以重新设置hikari参数
max-pool-size:
idle-timeout:
# ......
```
## 集成 MybatisPlus
只要进入mybatisPlus相关jar包项目自动集成。 兼容mybatisPlus 2.x和3.x的版本。
@ -316,7 +378,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
p6sy大部分人最常用的功能就是格式化你的sql语句。
```mysql
```sql
# 如在使用mybatis的过程中原生输出的语句是带?号的。在需要复制到其他地方执行看效果的时候很不方便。
select * from user where age>?
# 在使用了p6sy后其会帮你格式化成真正的执行语句。

View File

@ -12,7 +12,7 @@
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.4.0</version>
<version>2.4.1</version>
<packaging>jar</packaging>
<name>dynamic-datasource-spring-boot-starter</name>
@ -84,8 +84,8 @@
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.0</version>
<artifactId>HikariCP-java7</artifactId>
<version>2.4.13</version>
<optional>true</optional>
</dependency>
<dependency>

View File

@ -15,7 +15,7 @@
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.3</version>
<version>3.0.6</version>
</dependency>
</dependencies>

View File

@ -40,7 +40,7 @@
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.3.7</version>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -19,6 +19,7 @@ package com.baomidou.dynamic.datasource;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Setter;
@ -72,7 +73,7 @@ public class DynamicDataSourceCreator {
private DruidConfig druidGlobalConfig;
@Setter
private HikariConfig globalHikariConfig;
private HikariCpConfig hikariGlobalConfig;
public DynamicDataSourceCreator() {
Class<?> builderClass = null;
@ -173,15 +174,16 @@ public class DynamicDataSourceCreator {
*/
public DataSource createDruidDataSource(DataSourceProperty dataSourceProperty) {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setName(dataSourceProperty.getPollName());
dataSource.setUrl(dataSourceProperty.getUrl());
dataSource.setUsername(dataSourceProperty.getUsername());
dataSource.setPassword(dataSourceProperty.getPassword());
dataSource.setUrl(dataSourceProperty.getUrl());
dataSource.setDriverClassName(dataSourceProperty.getDriverClassName());
dataSource.setName(dataSourceProperty.getPollName());
DruidConfig config = dataSourceProperty.getDruid();
dataSource.configFromPropety(config.toProperties(druidGlobalConfig));
//连接参数单独设置
dataSource.setConnectProperties(config.getConnectionProperties());
//设置druid内置properties不支持的的参数
Boolean testOnReturn = config.getTestOnReturn() == null ? druidGlobalConfig.getTestOnReturn() : config.getTestOnReturn();
if (testOnReturn != null && testOnReturn.equals(true)) {
@ -217,22 +219,16 @@ public class DynamicDataSourceCreator {
*
* @param dataSourceProperty 数据源参数
* @return 数据源
* @author 离世庭院
* @author 离世庭院 小锅盖
*/
public DataSource createHikariDataSource(DataSourceProperty dataSourceProperty) {
HikariConfig hikariConfig = dataSourceProperty.getHikari();
if (hikariConfig == null) {
//自己没设置就copy全局参数
hikariConfig.copyState(globalHikariConfig);
}
hikariConfig.setJdbcUrl(dataSourceProperty.getUrl());
hikariConfig.setUsername(dataSourceProperty.getUsername());
hikariConfig.setPassword(dataSourceProperty.getPassword());
hikariConfig.setDriverClassName(dataSourceProperty.getDriverClassName());
//暂时不支持设置监控
// hikariConfig.setMetricRegistry(metricRegistry);
// hikariConfig.setHealthCheckRegistry(healthCheckRegistry);
hikariConfig.setPoolName(dataSourceProperty.getPollName());
return new HikariDataSource(hikariConfig);
HikariCpConfig hikariCpConfig = dataSourceProperty.getHikari();
HikariConfig config = hikariCpConfig.toHikariConfig(hikariGlobalConfig);
config.setUsername(dataSourceProperty.getUsername());
config.setPassword(dataSourceProperty.getPassword());
config.setJdbcUrl(dataSourceProperty.getUrl());
config.setDriverClassName(dataSourceProperty.getDriverClassName());
config.setPoolName(dataSourceProperty.getPollName());
return new HikariDataSource(config);
}
}

View File

@ -17,7 +17,7 @@
package com.baomidou.dynamic.datasource.spring.boot.autoconfigure;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig;
import com.zaxxer.hikari.HikariConfig;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
@ -70,5 +70,5 @@ public class DataSourceProperty {
* HikariCp参数配置
*/
@NestedConfigurationProperty
private HikariConfig hikari = new HikariConfig();
private HikariCpConfig hikari = new HikariCpConfig();
}

View File

@ -71,7 +71,7 @@ public class DynamicDataSourceAutoConfiguration {
public DynamicDataSourceCreator dynamicDataSourceCreator() {
DynamicDataSourceCreator dynamicDataSourceCreator = new DynamicDataSourceCreator();
dynamicDataSourceCreator.setDruidGlobalConfig(properties.getDruid());
dynamicDataSourceCreator.setGlobalHikariConfig(properties.getHikari());
dynamicDataSourceCreator.setHikariGlobalConfig(properties.getHikari());
return dynamicDataSourceCreator;
}

View File

@ -17,9 +17,9 @@
package com.baomidou.dynamic.datasource.spring.boot.autoconfigure;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig;
import com.baomidou.dynamic.datasource.strategy.DynamicDataSourceStrategy;
import com.baomidou.dynamic.datasource.strategy.LoadBalanceDynamicDataSourceStrategy;
import com.zaxxer.hikari.HikariConfig;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
@ -71,5 +71,5 @@ public class DynamicDataSourceProperties {
* HikariCp全局参数配置
*/
@NestedConfigurationProperty
private HikariConfig hikari = new HikariConfig();
private HikariCpConfig hikari = new HikariCpConfig();
}

View File

@ -26,7 +26,7 @@ import java.util.Properties;
import static com.alibaba.druid.pool.DruidAbstractDataSource.*;
/**
* Druid常用参数
* Druid参数配置
*
* @author TaoYu
* @since 1.2.0
@ -66,7 +66,7 @@ public class DruidConfig {
private Boolean initGlobalVariants;
private Boolean useUnfairLock;
private Boolean killWhenSocketReadTimeout;
private String connectionProperties;
private Properties connectionProperties;
private Integer maxPoolPreparedStatementPerConnectionSize;
private String initConnectionSqls;
private Boolean sharePreparedStatements;
@ -75,169 +75,168 @@ public class DruidConfig {
private String publicKey;
public Properties toProperties(DruidConfig config) {
public Properties toProperties(DruidConfig globalConfig) {
Properties properties = new Properties();
Integer initialSize = this.initialSize == null ? config.getInitialSize() : this.initialSize;
if (initialSize != null && !initialSize.equals(DEFAULT_INITIAL_SIZE)) {
properties.setProperty("druid.initialSize", String.valueOf(initialSize));
Integer tempInitialSize = initialSize == null ? globalConfig.getInitialSize() : initialSize;
if (tempInitialSize != null && !tempInitialSize.equals(DEFAULT_INITIAL_SIZE)) {
properties.setProperty("druid.initialSize", String.valueOf(tempInitialSize));
}
Integer maxActive = this.maxActive == null ? config.getMaxActive() : this.maxActive;
if (maxActive != null && !maxActive.equals(DEFAULT_MAX_WAIT)) {
properties.setProperty("druid.maxActive", String.valueOf(maxActive));
Integer tempMaxActive = maxActive == null ? globalConfig.getMaxActive() : maxActive;
if (tempMaxActive != null && !tempMaxActive.equals(DEFAULT_MAX_WAIT)) {
properties.setProperty("druid.maxActive", String.valueOf(tempMaxActive));
}
Integer minIdle = this.minIdle == null ? config.getMinIdle() : this.minIdle;
if (minIdle != null && !minIdle.equals(DEFAULT_MIN_IDLE)) {
properties.setProperty("druid.minIdle", String.valueOf(minIdle));
Integer tempMinIdle = minIdle == null ? globalConfig.getMinIdle() : minIdle;
if (tempMinIdle != null && !tempMinIdle.equals(DEFAULT_MIN_IDLE)) {
properties.setProperty("druid.minIdle", String.valueOf(tempMinIdle));
}
Long maxWait = this.maxWait == null ? config.getMaxWait() : this.maxWait;
if (maxWait != null && !maxWait.equals(DEFAULT_MAX_WAIT)) {
properties.setProperty("druid.maxWait", String.valueOf(maxWait));
Long tempMaxWait = maxWait == null ? globalConfig.getMaxWait() : maxWait;
if (tempMaxWait != null && !tempMaxWait.equals(DEFAULT_MAX_WAIT)) {
properties.setProperty("druid.maxWait", String.valueOf(tempMaxWait));
}
Long timeBetweenEvictionRunsMillis = this.timeBetweenEvictionRunsMillis == null ? config.getTimeBetweenEvictionRunsMillis() : this.timeBetweenEvictionRunsMillis;
if (timeBetweenEvictionRunsMillis != null && !timeBetweenEvictionRunsMillis.equals(DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS)) {
properties.setProperty("druid.timeBetweenEvictionRunsMillis", String.valueOf(timeBetweenEvictionRunsMillis));
Long tempTimeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis == null ? globalConfig.getTimeBetweenEvictionRunsMillis() : timeBetweenEvictionRunsMillis;
if (tempTimeBetweenEvictionRunsMillis != null && !tempTimeBetweenEvictionRunsMillis.equals(DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS)) {
properties.setProperty("druid.timeBetweenEvictionRunsMillis", String.valueOf(tempTimeBetweenEvictionRunsMillis));
}
Long timeBetweenLogStatsMillis = this.timeBetweenLogStatsMillis == null ? config.getTimeBetweenLogStatsMillis() : this.timeBetweenLogStatsMillis;
if (timeBetweenLogStatsMillis != null && timeBetweenLogStatsMillis > 0) {
properties.setProperty("druid.timeBetweenLogStatsMillis", String.valueOf(timeBetweenLogStatsMillis));
Long tempTimeBetweenLogStatsMillis = timeBetweenLogStatsMillis == null ? globalConfig.getTimeBetweenLogStatsMillis() : timeBetweenLogStatsMillis;
if (tempTimeBetweenLogStatsMillis != null && tempTimeBetweenLogStatsMillis > 0) {
properties.setProperty("druid.timeBetweenLogStatsMillis", String.valueOf(tempTimeBetweenLogStatsMillis));
}
Integer statSqlMaxSize = this.statSqlMaxSize == null ? config.getStatSqlMaxSize() : this.statSqlMaxSize;
if (statSqlMaxSize != null) {
properties.setProperty("druid.stat.sql.MaxSize", String.valueOf(statSqlMaxSize));
Integer tempStatSqlMaxSize = statSqlMaxSize == null ? globalConfig.getStatSqlMaxSize() : statSqlMaxSize;
if (tempStatSqlMaxSize != null) {
properties.setProperty("druid.stat.sql.MaxSize", String.valueOf(tempStatSqlMaxSize));
}
Long minEvictableIdleTimeMillis = this.minEvictableIdleTimeMillis == null ? config.getMinEvictableIdleTimeMillis() : this.minEvictableIdleTimeMillis;
if (minEvictableIdleTimeMillis != null && !minEvictableIdleTimeMillis.equals(DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS)) {
properties.setProperty("druid.minEvictableIdleTimeMillis", String.valueOf(minEvictableIdleTimeMillis));
Long tempMinEvictableIdleTimeMillis = minEvictableIdleTimeMillis == null ? globalConfig.getMinEvictableIdleTimeMillis() : minEvictableIdleTimeMillis;
if (tempMinEvictableIdleTimeMillis != null && !tempMinEvictableIdleTimeMillis.equals(DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS)) {
properties.setProperty("druid.minEvictableIdleTimeMillis", String.valueOf(tempMinEvictableIdleTimeMillis));
}
Long maxEvictableIdleTimeMillis = this.maxEvictableIdleTimeMillis == null ? config.getMaxEvictableIdleTimeMillis() : this.maxEvictableIdleTimeMillis;
if (maxEvictableIdleTimeMillis != null && !maxEvictableIdleTimeMillis.equals(DEFAULT_MAX_EVICTABLE_IDLE_TIME_MILLIS)) {
properties.setProperty("druid.maxEvictableIdleTimeMillis", String.valueOf(maxEvictableIdleTimeMillis));
Long tempMaxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis == null ? globalConfig.getMaxEvictableIdleTimeMillis() : maxEvictableIdleTimeMillis;
if (tempMaxEvictableIdleTimeMillis != null && !tempMaxEvictableIdleTimeMillis.equals(DEFAULT_MAX_EVICTABLE_IDLE_TIME_MILLIS)) {
properties.setProperty("druid.maxEvictableIdleTimeMillis", String.valueOf(tempMaxEvictableIdleTimeMillis));
}
Boolean testWhileIdle = this.testWhileIdle == null ? config.getTestWhileIdle() : this.testWhileIdle;
if (testWhileIdle != null && !testWhileIdle.equals(DEFAULT_WHILE_IDLE)) {
Boolean tempTestWhileIdle = testWhileIdle == null ? globalConfig.getTestWhileIdle() : testWhileIdle;
if (tempTestWhileIdle != null && !tempTestWhileIdle.equals(DEFAULT_WHILE_IDLE)) {
properties.setProperty("druid.testWhileIdle", "false");
}
Boolean testOnBorrow = this.testOnBorrow == null ? config.getTestOnBorrow() : this.testOnBorrow;
if (testOnBorrow != null && !testOnBorrow.equals(DEFAULT_TEST_ON_BORROW)) {
Boolean tempTestOnBorrow = testOnBorrow == null ? globalConfig.getTestOnBorrow() : testOnBorrow;
if (tempTestOnBorrow != null && !tempTestOnBorrow.equals(DEFAULT_TEST_ON_BORROW)) {
properties.setProperty("druid.testOnBorrow", "true");
}
String validationQuery = this.validationQuery == null ? config.getValidationQuery() : this.validationQuery;
if (validationQuery != null && validationQuery.length() > 0) {
properties.setProperty("druid.validationQuery", validationQuery);
String tempValidationQuery = validationQuery == null ? globalConfig.getValidationQuery() : validationQuery;
if (tempValidationQuery != null && tempValidationQuery.length() > 0) {
properties.setProperty("druid.validationQuery", tempValidationQuery);
}
Boolean useGlobalDataSourceStat = this.useGlobalDataSourceStat == null ? config.getUseGlobalDataSourceStat() : this.useGlobalDataSourceStat;
if (useGlobalDataSourceStat != null && useGlobalDataSourceStat.equals(Boolean.TRUE)) {
Boolean tempUseGlobalDataSourceStat = useGlobalDataSourceStat == null ? globalConfig.getUseGlobalDataSourceStat() : useGlobalDataSourceStat;
if (tempUseGlobalDataSourceStat != null && tempUseGlobalDataSourceStat.equals(Boolean.TRUE)) {
properties.setProperty("druid.useGlobalDataSourceStat", "true");
}
Boolean asyncInit = this.asyncInit == null ? config.getAsyncInit() : this.asyncInit;
if (asyncInit != null && asyncInit.equals(Boolean.TRUE)) {
Boolean tempAsyncInit = asyncInit == null ? globalConfig.getAsyncInit() : asyncInit;
if (tempAsyncInit != null && tempAsyncInit.equals(Boolean.TRUE)) {
properties.setProperty("druid.asyncInit", "true");
}
//filters单独处理默认了stat,wall
String filters = this.filters == null ? config.getFilters() : this.filters;
if (filters == null) {
filters = "stat,wall";
String tempFilters = filters == null ? globalConfig.getFilters() : filters;
if (tempFilters == null) {
tempFilters = "stat,wall";
}
if (publicKey != null && publicKey.length() > 0 && !filters.contains("config")) {
filters += ",config";
if (publicKey != null && publicKey.length() > 0 && !tempFilters.contains("config")) {
tempFilters += ",config";
}
properties.setProperty("druid.filters", filters);
properties.setProperty("druid.filters", tempFilters);
Boolean clearFiltersEnable = this.clearFiltersEnable == null ? config.getClearFiltersEnable() : this.clearFiltersEnable;
if (clearFiltersEnable != null && clearFiltersEnable.equals(Boolean.FALSE)) {
Boolean tempClearFiltersEnable = clearFiltersEnable == null ? globalConfig.getClearFiltersEnable() : clearFiltersEnable;
if (tempClearFiltersEnable != null && tempClearFiltersEnable.equals(Boolean.FALSE)) {
properties.setProperty("druid.clearFiltersEnable", "false");
}
Boolean resetStatEnable = this.resetStatEnable == null ? config.getResetStatEnable() : this.resetStatEnable;
if (resetStatEnable != null && resetStatEnable.equals(Boolean.FALSE)) {
Boolean tempResetStatEnable = resetStatEnable == null ? globalConfig.getResetStatEnable() : resetStatEnable;
if (tempResetStatEnable != null && tempResetStatEnable.equals(Boolean.FALSE)) {
properties.setProperty("druid.resetStatEnable", "false");
}
Integer notFullTimeoutRetryCount = this.notFullTimeoutRetryCount == null ? config.getNotFullTimeoutRetryCount() : this.notFullTimeoutRetryCount;
if (notFullTimeoutRetryCount != null && !notFullTimeoutRetryCount.equals(0)) {
properties.setProperty("druid.notFullTimeoutRetryCount", String.valueOf(notFullTimeoutRetryCount));
Integer tempNotFullTimeoutRetryCount = notFullTimeoutRetryCount == null ? globalConfig.getNotFullTimeoutRetryCount() : notFullTimeoutRetryCount;
if (tempNotFullTimeoutRetryCount != null && !tempNotFullTimeoutRetryCount.equals(0)) {
properties.setProperty("druid.notFullTimeoutRetryCount", String.valueOf(tempNotFullTimeoutRetryCount));
}
Long maxWaitThreadCount = this.maxWaitThreadCount == null ? config.getMaxWaitThreadCount() : this.maxWaitThreadCount;
if (maxWaitThreadCount != null && !maxWaitThreadCount.equals(DEFAULT_MAX_WAIT)) {
properties.setProperty("druid.maxWaitThreadCount", String.valueOf(maxWaitThreadCount));
Long tempMaxWaitThreadCount = maxWaitThreadCount == null ? globalConfig.getMaxWaitThreadCount() : maxWaitThreadCount;
if (tempMaxWaitThreadCount != null && !tempMaxWaitThreadCount.equals(DEFAULT_MAX_WAIT)) {
properties.setProperty("druid.maxWaitThreadCount", String.valueOf(tempMaxWaitThreadCount));
}
Boolean failFast = this.failFast == null ? config.getFailFast() : this.failFast;
if (failFast != null && failFast.equals(Boolean.TRUE)) {
Boolean tempFailFast = failFast == null ? globalConfig.getFailFast() : failFast;
if (tempFailFast != null && tempFailFast.equals(Boolean.TRUE)) {
properties.setProperty("druid.failFast", "true");
}
Integer phyTimeoutMillis = this.phyTimeoutMillis == null ? config.getPhyTimeoutMillis() : this.phyTimeoutMillis;
if (phyTimeoutMillis != null && !phyTimeoutMillis.equals(DEFAULT_PHY_TIMEOUT_MILLIS)) {
properties.setProperty("druid.phyTimeoutMillis", String.valueOf(phyTimeoutMillis));
Integer tempPhyTimeoutMillis = phyTimeoutMillis == null ? globalConfig.getPhyTimeoutMillis() : phyTimeoutMillis;
if (tempPhyTimeoutMillis != null && !tempPhyTimeoutMillis.equals(DEFAULT_PHY_TIMEOUT_MILLIS)) {
properties.setProperty("druid.phyTimeoutMillis", String.valueOf(tempPhyTimeoutMillis));
}
Boolean keepAlive = this.keepAlive == null ? config.getKeepAlive() : this.keepAlive;
if (keepAlive != null && keepAlive.equals(Boolean.TRUE)) {
Boolean tempKeepAlive = keepAlive == null ? globalConfig.getKeepAlive() : keepAlive;
if (tempKeepAlive != null && tempKeepAlive.equals(Boolean.TRUE)) {
properties.setProperty("druid.keepAlive", "true");
}
Boolean poolPreparedStatements = this.poolPreparedStatements == null ? config.getPoolPreparedStatements() : this.poolPreparedStatements;
if (poolPreparedStatements != null && poolPreparedStatements.equals(Boolean.TRUE)) {
Boolean tempPoolPreparedStatements = poolPreparedStatements == null ? globalConfig.getPoolPreparedStatements() : poolPreparedStatements;
if (tempPoolPreparedStatements != null && tempPoolPreparedStatements.equals(Boolean.TRUE)) {
properties.setProperty("druid.poolPreparedStatements", "true");
}
Boolean initVariants = this.initVariants == null ? config.getInitVariants() : this.initVariants;
if (initVariants != null && initVariants.equals(Boolean.TRUE)) {
Boolean tempInitVariants = initVariants == null ? globalConfig.getInitVariants() : initVariants;
if (tempInitVariants != null && tempInitVariants.equals(Boolean.TRUE)) {
properties.setProperty("druid.initVariants", "true");
}
Boolean initGlobalVariants = this.initGlobalVariants == null ? config.getInitGlobalVariants() : this.initGlobalVariants;
if (initGlobalVariants != null && initGlobalVariants.equals(Boolean.TRUE)) {
Boolean tempInitGlobalVariants = initGlobalVariants == null ? globalConfig.getInitGlobalVariants() : initGlobalVariants;
if (tempInitGlobalVariants != null && tempInitGlobalVariants.equals(Boolean.TRUE)) {
properties.setProperty("druid.initGlobalVariants", "true");
}
Boolean useUnfairLock = this.useUnfairLock == null ? config.getUseUnfairLock() : this.useUnfairLock;
if (useUnfairLock != null) {
properties.setProperty("druid.useUnfairLock", String.valueOf(useUnfairLock));
Boolean tempUseUnfairLock = useUnfairLock == null ? globalConfig.getUseUnfairLock() : useUnfairLock;
if (tempUseUnfairLock != null) {
properties.setProperty("druid.useUnfairLock", String.valueOf(tempUseUnfairLock));
}
Boolean killWhenSocketReadTimeout = this.killWhenSocketReadTimeout == null ? config.getKillWhenSocketReadTimeout() : this.killWhenSocketReadTimeout;
if (killWhenSocketReadTimeout != null && killWhenSocketReadTimeout.equals(Boolean.TRUE)) {
Boolean tempKillWhenSocketReadTimeout = killWhenSocketReadTimeout == null ? globalConfig.getKillWhenSocketReadTimeout() : killWhenSocketReadTimeout;
if (tempKillWhenSocketReadTimeout != null && tempKillWhenSocketReadTimeout.equals(Boolean.TRUE)) {
properties.setProperty("druid.killWhenSocketReadTimeout", "true");
}
String connectProperties = this.connectionProperties == null ? config.getConnectionProperties() : this.connectionProperties;
Properties tempConnectProperties = connectionProperties == null ? globalConfig.getConnectionProperties() : connectionProperties;
if (this.publicKey != null && this.publicKey.length() > 0) {
if (connectProperties == null) {
connectProperties = "";
if (publicKey != null && publicKey.length() > 0) {
if (tempConnectProperties == null) {
tempConnectProperties = new Properties();
}
log.info("动态数据源-检测到您配置了druid加密,加密所需连接参数已为您自动配置");
connectProperties += "config.decrypt=true;config.decrypt.key=" + this.publicKey;
tempConnectProperties.setProperty("config.decrypt", "true");
tempConnectProperties.setProperty("config.decrypt.key", publicKey);
}
if (connectProperties != null && connectProperties.length() > 0) {
properties.setProperty("druid.connectProperties", connectProperties);
connectionProperties = tempConnectProperties;
Integer tempMaxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize == null ? globalConfig.getMaxPoolPreparedStatementPerConnectionSize() : maxPoolPreparedStatementPerConnectionSize;
if (tempMaxPoolPreparedStatementPerConnectionSize != null && !tempMaxPoolPreparedStatementPerConnectionSize.equals(10)) {
properties.setProperty("druid.maxPoolPreparedStatementPerConnectionSize", String.valueOf(tempMaxPoolPreparedStatementPerConnectionSize));
}
Integer maxPoolPreparedStatementPerConnectionSize = this.maxPoolPreparedStatementPerConnectionSize == null ? config.getMaxPoolPreparedStatementPerConnectionSize() : this.maxPoolPreparedStatementPerConnectionSize;
if (maxPoolPreparedStatementPerConnectionSize != null && !maxPoolPreparedStatementPerConnectionSize.equals(10)) {
properties.setProperty("druid.maxPoolPreparedStatementPerConnectionSize", String.valueOf(maxPoolPreparedStatementPerConnectionSize));
}
String initConnectionSqls = this.initConnectionSqls == null ? config.getInitConnectionSqls() : this.initConnectionSqls;
if (initConnectionSqls != null && initConnectionSqls.length() > 0) {
properties.setProperty("druid.initConnectionSqls", initConnectionSqls);
String tempInitConnectionSqls = initConnectionSqls == null ? globalConfig.getInitConnectionSqls() : initConnectionSqls;
if (tempInitConnectionSqls != null && tempInitConnectionSqls.length() > 0) {
properties.setProperty("druid.initConnectionSqls", tempInitConnectionSqls);
}
return properties;
}

View File

@ -0,0 +1,197 @@
/**
* Copyright © 2018 organization baomidou
* <pre>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* <pre/>
*/
package com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari;
import com.zaxxer.hikari.HikariConfig;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
import java.util.Properties;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
/**
* HikariCp参数配置
*
* @author TaoYu
* @since 2.4.1
*/
@Data
@Slf4j
public class HikariCpConfig {
private static final long CONNECTION_TIMEOUT = SECONDS.toMillis(30);
private static final long VALIDATION_TIMEOUT = SECONDS.toMillis(5);
private static final long IDLE_TIMEOUT = MINUTES.toMillis(10);
private static final long MAX_LIFETIME = MINUTES.toMillis(30);
private static final int DEFAULT_POOL_SIZE = 10;
private String username;
private String password;
private String driverClassName;
private String jdbcUrl;
private String poolName;
private String catalog;
private Long connectionTimeout;
private Long validationTimeout;
private Long idleTimeout;
private Long leakDetectionThreshold;
private Long maxLifetime;
private Integer maxPoolSize;
private Integer minIdle;
private Long initializationFailTimeout;
private String connectionInitSql;
private String connectionTestQuery;
private String dataSourceClassName;
private String dataSourceJndiName;
private String schema;
private String transactionIsolationName;
private Boolean isAutoCommit;
private Boolean isReadOnly;
private Boolean isIsolateInternalQueries;
private Boolean isRegisterMbeans;
private Boolean isAllowPoolSuspension;
private Properties dataSourceProperties;
private Properties healthCheckProperties;
public HikariConfig toHikariConfig(HikariCpConfig globalConfig) {
HikariConfig config = new com.zaxxer.hikari.HikariConfig();
String tempSchema = schema == null ? globalConfig.getSchema() : schema;
if (tempSchema != null) {
try {
Field schemaField = com.zaxxer.hikari.HikariConfig.class.getDeclaredField("schema");
schemaField.setAccessible(true);
schemaField.set(config, tempSchema);
} catch (NoSuchFieldException e) {
log.warn("动态数据源-设置了Hikari的schema属性但当前Hikari版本不支持");
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
String tempCatalog = catalog == null ? globalConfig.getCatalog() : catalog;
if (tempCatalog != null) {
config.setCatalog(tempCatalog);
}
Long tempConnectionTimeout = connectionTimeout == null ? globalConfig.getConnectionTimeout() : connectionTimeout;
if (tempConnectionTimeout != null && !tempConnectionTimeout.equals(CONNECTION_TIMEOUT)) {
config.setConnectionTimeout(tempConnectionTimeout);
}
Long tempValidationTimeout = validationTimeout == null ? globalConfig.getValidationTimeout() : validationTimeout;
if (tempValidationTimeout != null && !tempValidationTimeout.equals(VALIDATION_TIMEOUT)) {
config.setValidationTimeout(tempValidationTimeout);
}
Long tempIdleTimeout = idleTimeout == null ? globalConfig.getIdleTimeout() : idleTimeout;
if (tempIdleTimeout != null && !tempIdleTimeout.equals(IDLE_TIMEOUT)) {
config.setIdleTimeout(tempIdleTimeout);
}
Long tempLeakDetectionThreshold = leakDetectionThreshold == null ? globalConfig.getLeakDetectionThreshold() : leakDetectionThreshold;
if (tempLeakDetectionThreshold != null) {
config.setLeakDetectionThreshold(tempLeakDetectionThreshold);
}
Long tempMaxLifetime = maxLifetime == null ? globalConfig.getMaxLifetime() : maxLifetime;
if (tempMaxLifetime != null && !tempMaxLifetime.equals(MAX_LIFETIME)) {
config.setMaxLifetime(tempMaxLifetime);
}
Integer tempMaxPoolSize = maxPoolSize == null ? globalConfig.getMaxPoolSize() : maxPoolSize;
if (tempMaxPoolSize != null && !tempMaxPoolSize.equals(-1)) {
config.setMaximumPoolSize(tempMaxPoolSize);
}
Integer tempMinIdle = minIdle == null ? globalConfig.getMinIdle() : getMinIdle();
if (tempMinIdle != null && !tempMinIdle.equals(-1)) {
config.setMinimumIdle(tempMinIdle);
}
Long tempInitializationFailTimeout = initializationFailTimeout == null ? globalConfig.getInitializationFailTimeout() : initializationFailTimeout;
if (tempInitializationFailTimeout != null && !tempInitializationFailTimeout.equals(1)) {
config.setInitializationFailTimeout(tempInitializationFailTimeout);
}
String tempConnectionInitSql = connectionInitSql == null ? globalConfig.getConnectionInitSql() : connectionInitSql;
if (tempConnectionInitSql != null) {
config.setConnectionInitSql(tempConnectionInitSql);
}
String tempConnectionTestQuery = connectionTestQuery == null ? globalConfig.getConnectionTestQuery() : connectionTestQuery;
if (tempConnectionTestQuery != null) {
config.setConnectionTestQuery(tempConnectionTestQuery);
}
String tempDataSourceClassName = dataSourceClassName == null ? globalConfig.getDataSourceClassName() : dataSourceClassName;
if (tempDataSourceClassName != null) {
config.setDataSourceClassName(tempDataSourceClassName);
}
String tempDataSourceJndiName = dataSourceJndiName == null ? globalConfig.getDataSourceJndiName() : dataSourceJndiName;
if (tempDataSourceJndiName != null) {
config.setDataSourceJNDI(tempDataSourceJndiName);
}
String tempTransactionIsolationName = transactionIsolationName == null ? globalConfig.getTransactionIsolationName() : transactionIsolationName;
if (tempTransactionIsolationName != null) {
config.setTransactionIsolation(tempTransactionIsolationName);
}
Boolean tempAutoCommit = isAutoCommit == null ? globalConfig.getIsAutoCommit() : isAutoCommit;
if (tempAutoCommit != null && tempAutoCommit.equals(Boolean.FALSE)) {
config.setAutoCommit(false);
}
Boolean tempReadOnly = isReadOnly == null ? globalConfig.getIsReadOnly() : isReadOnly;
if (tempReadOnly != null) {
config.setReadOnly(tempReadOnly);
}
Boolean tempIsolateInternalQueries = isIsolateInternalQueries == null ? globalConfig.getIsIsolateInternalQueries() : isIsolateInternalQueries;
if (tempIsolateInternalQueries != null) {
config.setIsolateInternalQueries(tempIsolateInternalQueries);
}
Boolean tempRegisterMbeans = isRegisterMbeans == null ? globalConfig.getIsRegisterMbeans() : isRegisterMbeans;
if (tempRegisterMbeans != null) {
config.setRegisterMbeans(tempRegisterMbeans);
}
Boolean tempAllowPoolSuspension = isAllowPoolSuspension == null ? globalConfig.getIsAllowPoolSuspension() : isAllowPoolSuspension;
if (tempAllowPoolSuspension != null) {
config.setAllowPoolSuspension(tempAllowPoolSuspension);
}
Properties tempDataSourceProperties = dataSourceProperties == null ? globalConfig.getDataSourceProperties() : dataSourceProperties;
if (tempDataSourceProperties != null) {
config.setDataSourceProperties(tempDataSourceProperties);
}
Properties tempHealthCheckProperties = healthCheckProperties == null ? globalConfig.getHealthCheckProperties() : healthCheckProperties;
if (tempHealthCheckProperties != null) {
config.setHealthCheckProperties(tempHealthCheckProperties);
}
return config;
}
}

View File

@ -1,27 +1,10 @@
{
"hints": [],
"groups": [
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"name": "spring.datasource.dynamic",
"type": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"name": "spring.datasource.dynamic.druid",
"type": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"name": "spring.datasource.dynamic.hikari",
"type": "com.zaxxer.hikari.HikariConfig"
}
],
"properties": [
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"name": "spring.datasource.dynamic.datasource",
"description": "每一个数据源",
"name": "spring.datasource.dynamic.datasource",
"type": "java.util.Map<java.lang.String,com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty>"
},
{
@ -47,7 +30,7 @@
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig",
"name": "spring.datasource.dynamic.druid.connection-properties",
"type": "java.lang.String"
"type": "java.util.Properties"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig",
@ -205,206 +188,182 @@
"type": "java.lang.Integer"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.allow-pool-suspension",
"type": "java.lang.Boolean"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.auto-commit",
"type": "java.lang.Boolean"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.catalog",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.connection-init-sql",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.connection-test-query",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.connection-timeout",
"type": "java.lang.Long"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.data-source-class-name",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.data-source-j-n-d-i",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.data-source-jndi-name",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.data-source-properties",
"type": "java.util.Properties"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.driver-class-name",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.health-check-properties",
"type": "java.util.Properties"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.health-check-registry",
"type": "java.lang.Object"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.idle-timeout",
"type": "java.lang.Long"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"deprecated": true,
"name": "spring.datasource.dynamic.hikari.initialization-fail-fast",
"type": "java.lang.Boolean",
"deprecation": {}
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.initialization-fail-timeout",
"type": "java.lang.Long"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.isolate-internal-queries",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.is-allow-pool-suspension",
"type": "java.lang.Boolean"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.is-auto-commit",
"type": "java.lang.Boolean"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.is-isolate-internal-queries",
"type": "java.lang.Boolean"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.is-read-only",
"type": "java.lang.Boolean"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.is-register-mbeans",
"type": "java.lang.Boolean"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.jdbc-url",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"deprecated": true,
"name": "spring.datasource.dynamic.hikari.jdbc4-connection-test",
"type": "java.lang.Boolean",
"deprecation": {}
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.leak-detection-threshold",
"type": "java.lang.Long"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.max-lifetime",
"type": "java.lang.Long"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.maximum-pool-size",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.max-pool-size",
"type": "java.lang.Integer"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.metric-registry",
"type": "java.lang.Object"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.metrics-tracker-factory",
"type": "com.zaxxer.hikari.metrics.MetricsTrackerFactory"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.minimum-idle",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.min-idle",
"type": "java.lang.Integer"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.password",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.pool-name",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.read-only",
"type": "java.lang.Boolean"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.register-mbeans",
"type": "java.lang.Boolean"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.scheduled-executor",
"type": "java.util.concurrent.ScheduledExecutorService"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"deprecated": true,
"name": "spring.datasource.dynamic.hikari.scheduled-executor-service",
"type": "java.util.concurrent.ScheduledThreadPoolExecutor",
"deprecation": {}
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.schema",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"name": "spring.datasource.dynamic.hikari.transaction-isolation",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.transaction-isolation-name",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.username",
"type": "java.lang.String"
},
{
"sourceType": "com.zaxxer.hikari.HikariConfig",
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig",
"name": "spring.datasource.dynamic.hikari.validation-timeout",
"type": "java.lang.Long"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"name": "spring.datasource.dynamic.order",
"description": "aop切面顺序默认优先级最高",
"name": "spring.datasource.dynamic.order",
"type": "java.lang.Integer"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"defaultValue": false,
"name": "spring.datasource.dynamic.p6spy",
"description": "是否使用p6spy输出默认不输出",
"name": "spring.datasource.dynamic.p6spy",
"defaultValue": false,
"type": "java.lang.Boolean"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"defaultValue": "master",
"name": "spring.datasource.dynamic.primary",
"description": "必须设置默认的库,默认master",
"name": "spring.datasource.dynamic.primary",
"defaultValue": "master",
"type": "java.lang.String"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"name": "spring.datasource.dynamic.strategy",
"description": "多数据源选择算法clazz默认负载均衡算法",
"name": "spring.datasource.dynamic.strategy",
"type": "java.lang.Class<? extends com.baomidou.dynamic.datasource.strategy.DynamicDataSourceStrategy>"
}
],
"groups": [
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"name": "spring.datasource.dynamic",
"type": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"name": "spring.datasource.dynamic.druid",
"type": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig"
},
{
"sourceType": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties",
"name": "spring.datasource.dynamic.hikari",
"type": "com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig"
}
]
}

View File

@ -1,5 +0,0 @@
#Generated by Apache Maven
#Sun Nov 18 22:32:09 CST 2018
version=2.3.7
groupId=com.baomidou
artifactId=dynamic-datasource-spring-boot-starter

View File

@ -1,26 +0,0 @@
com\baomidou\dynamic\datasource\spring\boot\autoconfigure\druid\DruidConfig.class
com\baomidou\dynamic\datasource\DynamicDataSourceCreator.class
com\baomidou\dynamic\datasource\spel\DynamicDataSourceSpelResolver.class
com\baomidou\dynamic\datasource\aop\DynamicDataSourceAnnotationInterceptor.class
com\baomidou\dynamic\datasource\AbstractRoutingDataSource.class
com\baomidou\dynamic\datasource\aop\DynamicDataSourceAnnotationAdvisor.class
com\baomidou\dynamic\datasource\DynamicRoutingDataSource.class
com\baomidou\dynamic\datasource\spring\boot\autoconfigure\DataSourceProperty.class
com\baomidou\dynamic\datasource\strategy\DynamicDataSourceStrategy.class
com\baomidou\dynamic\datasource\spel\DefaultDynamicDataSourceSpelParser.class
META-INF\spring-configuration-metadata.json
com\baomidou\dynamic\datasource\provider\DynamicDataSourceProvider.class
com\baomidou\dynamic\datasource\spel\DynamicDataSourceSpelParser.class
com\baomidou\dynamic\datasource\toolkit\DynamicDataSourceContextHolder$1.class
com\baomidou\dynamic\datasource\spring\boot\autoconfigure\druid\DruidDynamicDataSourceConfiguration.class
com\baomidou\dynamic\datasource\toolkit\DynamicDataSourceContextHolder.class
com\baomidou\dynamic\datasource\DynamicDataSourceClassResolver.class
com\baomidou\dynamic\datasource\spring\boot\autoconfigure\DynamicDataSourceAutoConfiguration.class
com\baomidou\dynamic\datasource\strategy\RandomDynamicDataSourceStrategy.class
com\baomidou\dynamic\datasource\strategy\LoadBalanceDynamicDataSourceStrategy.class
com\baomidou\dynamic\datasource\provider\YmlDynamicDataSourceProvider.class
com\baomidou\dynamic\datasource\spel\DefaultDynamicDataSourceSpelResolver.class
com\baomidou\dynamic\datasource\spring\boot\autoconfigure\DynamicDataSourceProperties.class
com\baomidou\dynamic\datasource\DynamicGroupDataSource.class
com\baomidou\dynamic\datasource\provider\AbstractJdbcDataSourceProvider.class
com\baomidou\dynamic\datasource\annotation\DS.class

View File

@ -1,24 +0,0 @@
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\DynamicDataSourceCreator.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\spel\DefaultDynamicDataSourceSpelParser.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\spel\DefaultDynamicDataSourceSpelResolver.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\strategy\RandomDynamicDataSourceStrategy.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\spel\DynamicDataSourceSpelParser.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\spring\boot\autoconfigure\druid\DruidConfig.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\spring\boot\autoconfigure\DataSourceProperty.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\provider\YmlDynamicDataSourceProvider.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\strategy\LoadBalanceDynamicDataSourceStrategy.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\spel\DynamicDataSourceSpelResolver.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\aop\DynamicDataSourceAnnotationAdvisor.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\DynamicRoutingDataSource.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\strategy\DynamicDataSourceStrategy.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\spring\boot\autoconfigure\druid\DruidDynamicDataSourceConfiguration.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\toolkit\DynamicDataSourceContextHolder.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\DynamicDataSourceClassResolver.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\provider\DynamicDataSourceProvider.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\spring\boot\autoconfigure\DynamicDataSourceProperties.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\annotation\DS.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\aop\DynamicDataSourceAnnotationInterceptor.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\DynamicGroupDataSource.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\provider\AbstractJdbcDataSourceProvider.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\spring\boot\autoconfigure\DynamicDataSourceAutoConfiguration.java
E:\workspace_baomidou\dynamic-datasource-spring-boot-starter\src\main\java\com\baomidou\dynamic\datasource\AbstractRoutingDataSource.java