All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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