
org.kaizen4j.starter.datasource.druid.DataSourceProperties Maven / Gradle / Ivy
package org.kaizen4j.starter.datasource.druid;
import com.google.common.base.Splitter;
import org.kaizen4j.common.base.Symbols;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@ConfigurationProperties(prefix = "jdbc", ignoreUnknownFields = false)
public class DataSourceProperties {
/** 主数据源列表 */
private JdbcConfig master;
/** 从数据源列表 */
private List slaves;
private String driverClass;
/**
* DruidDataSource 的连接属性
*/
private Properties connectionProperties;
private String dbType;
/**
* 路由类型
*/
private RouterType routerType = RouterType.WEIGHT;
/** 是否打印 SQL */
private boolean logSql;
/** 是否打印 SQL 查询结果集 */
private boolean logResultSet;
/** 是否打印慢查询 SQL */
private boolean logSlowSql;
/** 是否合并 SQL */
private boolean mergeSql = true;
/** 符合慢查询的 SQL 执行时间毫秒 */
private int slowSqlMillis = 1000;
/**
* 标记是否删除泄露的连接,如果他们超过了 removeAbandonedTimout 的限制
*/
private boolean removeAbandoned = true;
/**
* 泄露的连接可以被删除的超时值,单位毫秒
*/
private int removeAbandonedTimeoutMillis = 300000;
private boolean defaultAutoCommit = true;
/**
* 初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
*/
private int initialSize = 5;
/**
* 最小连接池数量
*/
private int minIdle = 10;
/**
* 最大连接池数量
*/
private int maxActive = 30;
/**
* 获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,并发效率会有所下降,
* 如果需要可以通过配置 useUnfairLock 属性为 true 使用非公平锁。
*/
private int maxWait = 60000;
/**
* 有两个含义:
* 1) Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于 minEvictableIdleTimeMillis 则关闭物理连接。
* 2) testWhileIdle 的判断依据,详细看 testWhileIdle 属性的说明
*/
private int timeBetweenEvictionRunsMillis = 60000;
/**
* 连接保持空闲而不被驱逐的最长时间
*/
private int minEvictableIdleTimeMillis = 300000;
/**
* 建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测,
* 如果空闲时间大于 timeBetweenEvictionRunsMillis,执行 validationQuery 检测连接是否有效。
*/
private boolean testWhileIdle = true;
/**
* 申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
*/
private boolean testOnBorrow = true;
/**
* 归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
*/
private boolean testOnReturn = true;
/**
* 用来检测连接是否有效的sql,要求是一个查询语句,常用 select 'x'。
* 如果 validationQuery 为 null,testOnBorrow、testOnReturn、testWhileIdle 都不会起作用。
*/
private String validationQuery = "select 'x'";
/**
* statement 池能够同时分配的打开的 statements 的最大数量
*/
private int maxOpenPreparedStatements = -1;
public String getDbType() {
return dbType;
}
public void setDbType(String dbType) {
this.dbType = dbType;
}
public RouterType getRouterType() {
return routerType;
}
public void setRouterType(String routerType) {
this.routerType = RouterType.valueOf(routerType);
}
public String getValidationQuery() {
return validationQuery;
}
public void setValidationQuery(String validationQuery) {
this.validationQuery = validationQuery;
}
public String getDriverClass() {
return driverClass;
}
public void setDriverClass(String driverClass) {
this.driverClass = driverClass;
}
public Properties getConnectionProperties() {
return connectionProperties;
}
public void setConnectionProperties(String connectionProperties) {
Properties properties = new Properties();
Map propsMap = Splitter.on(Symbols.SEMICOLON).withKeyValueSeparator(Symbols.EQUAL_SIGN)
.split(connectionProperties);
properties.putAll(propsMap);
this.connectionProperties = properties;
}
public boolean isLogSql() {
return logSql;
}
public void setLogSql(boolean logSql) {
this.logSql = logSql;
}
public boolean isLogSlowSql() {
return logSlowSql;
}
public void setLogSlowSql(boolean logSlowSql) {
this.logSlowSql = logSlowSql;
}
public boolean isMergeSql() {
return mergeSql;
}
public void setMergeSql(boolean mergeSql) {
this.mergeSql = mergeSql;
}
public int getSlowSqlMillis() {
return slowSqlMillis;
}
public void setSlowSqlMillis(int slowSqlMillis) {
this.slowSqlMillis = slowSqlMillis;
}
public boolean isLogResultSet() {
return logResultSet;
}
public void setLogResultSet(boolean logResultSet) {
this.logResultSet = logResultSet;
}
public boolean isRemoveAbandoned() {
return removeAbandoned;
}
public void setRemoveAbandoned(boolean removeAbandoned) {
this.removeAbandoned = removeAbandoned;
}
public int getRemoveAbandonedTimeoutMillis() {
return removeAbandonedTimeoutMillis;
}
public void setRemoveAbandonedTimeoutMillis(int removeAbandonedTimeoutMillis) {
this.removeAbandonedTimeoutMillis = removeAbandonedTimeoutMillis;
}
public boolean isDefaultAutoCommit() {
return defaultAutoCommit;
}
public void setDefaultAutoCommit(boolean defaultAutoCommit) {
this.defaultAutoCommit = defaultAutoCommit;
}
public int getInitialSize() {
return initialSize;
}
public void setInitialSize(int initialSize) {
this.initialSize = initialSize;
}
public int getMinIdle() {
return minIdle;
}
public void setMinIdle(int minIdle) {
this.minIdle = minIdle;
}
public int getMaxActive() {
return maxActive;
}
public void setMaxActive(int maxActive) {
this.maxActive = maxActive;
}
public int getMaxWait() {
return maxWait;
}
public void setMaxWait(int maxWait) {
this.maxWait = maxWait;
}
public int getTimeBetweenEvictionRunsMillis() {
return timeBetweenEvictionRunsMillis;
}
public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
}
public int getMinEvictableIdleTimeMillis() {
return minEvictableIdleTimeMillis;
}
public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
}
public boolean isTestWhileIdle() {
return testWhileIdle;
}
public void setTestWhileIdle(boolean testWhileIdle) {
this.testWhileIdle = testWhileIdle;
}
public boolean isTestOnBorrow() {
return testOnBorrow;
}
public void setTestOnBorrow(boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
}
public boolean isTestOnReturn() {
return testOnReturn;
}
public void setTestOnReturn(boolean testOnReturn) {
this.testOnReturn = testOnReturn;
}
public int getMaxOpenPreparedStatements() {
return maxOpenPreparedStatements;
}
public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) {
this.maxOpenPreparedStatements = maxOpenPreparedStatements;
}
public JdbcConfig getMaster() {
return master;
}
public void setMaster(JdbcConfig master) {
this.master = master;
}
public List getSlaves() {
return slaves;
}
public void setSlaves(List slaves) {
this.slaves = slaves;
}
public static class JdbcConfig {
private String jdbcUrl;
private String user;
private String password;
/* 数据源名称 */
private String name;
/* 数据源权重 */
private int weight;
public String getJdbcUrl() {
return jdbcUrl;
}
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy