spring boot(10)-tomcat jdbc连接池

来源:互联网 发布:网络视讯赌博真假 编辑:程序博客网 时间:2024/06/07 06:26

默认连接池

tomcat jdbc是从tomcat7开始推出的一个连接池,相比老的dbcp连接池要优秀很多。spring boot将tomcat jdbc作为默认的连接池,只要在pom.xml中引入了spring boot 的jdbc组件,就会自动引入tomcat jdbc连接池。关于引入jdbc和数据库的连接配置,参考第六篇

默认参数

以下是org.apache.tomcat.jdbc.pool.PoolProperties源码,这是tomcat jdbc连接池的默认初始参数。
这个类实现了一个接口PoolConfiguration,查看这个接口的源码,里面有每一个参数的详细说明。
官方文档: http://tomcat.apache.org/tomcat-8.5-doc/jdbc-pool.html 
[java] view plain copy
  1. public class PoolProperties implements PoolConfiguration, Cloneable, Serializable {  
  2.   
  3.     private static final long serialVersionUID = -8519283440854213745L;  
  4.     private static final Log log = LogFactory.getLog(PoolProperties.class);  
  5.   
  6.     public static final int DEFAULT_MAX_ACTIVE = 100;  
  7.   
  8.     protected static final AtomicInteger poolCounter = new AtomicInteger(0);  
  9.     private volatile Properties dbProperties = new Properties();  
  10.     private volatile String url = null;  
  11.     private volatile String driverClassName = null;  
  12.     private volatile Boolean defaultAutoCommit = null;  
  13.     private volatile Boolean defaultReadOnly = null;  
  14.     private volatile int defaultTransactionIsolation = DataSourceFactory.UNKNOWN_TRANSACTIONISOLATION;  
  15.     private volatile String defaultCatalog = null;  
  16.     private volatile String connectionProperties;  
  17.     private volatile int initialSize = 10;  
  18.     private volatile int maxActive = DEFAULT_MAX_ACTIVE;  
  19.     private volatile int maxIdle = maxActive;  
  20.     private volatile int minIdle = initialSize;  
  21.     private volatile int maxWait = 30000;  
  22.     private volatile String validationQuery;  
  23.     private volatile int validationQueryTimeout = -1;  
  24.     private volatile String validatorClassName;  
  25.     private volatile Validator validator;  
  26.     private volatile boolean testOnBorrow = false;  
  27.     private volatile boolean testOnReturn = false;  
  28.     private volatile boolean testWhileIdle = false;  
  29.     private volatile int timeBetweenEvictionRunsMillis = 5000;  
  30.     private volatile int numTestsPerEvictionRun;  
  31.     private volatile int minEvictableIdleTimeMillis = 60000;  
  32.     private volatile boolean accessToUnderlyingConnectionAllowed = true;  
  33.     private volatile boolean removeAbandoned = false;  
  34.     private volatile int removeAbandonedTimeout = 60;  
  35.     private volatile boolean logAbandoned = false;  
  36.     private volatile String name = "Tomcat Connection Pool["+(poolCounter.addAndGet(1))+"-"+System.identityHashCode(PoolProperties.class)+"]";  
  37.     private volatile String password;  
  38.     private volatile String username;  
  39.     private volatile long validationInterval = 3000;  
  40.     private volatile boolean jmxEnabled = true;  
  41.     private volatile String initSQL;  
  42.     private volatile boolean testOnConnect =false;  
  43.     private volatile String jdbcInterceptors=null;  
  44.     private volatile boolean fairQueue = true;  
  45.     private volatile boolean useEquals = true;  
  46.     private volatile int abandonWhenPercentageFull = 0;  
  47.     private volatile long maxAge = 0;  
  48.     private volatile boolean useLock = false;  
  49.     private volatile InterceptorDefinition[] interceptors = null;  
  50.     private volatile int suspectTimeout = 0;  
  51.     private volatile Object dataSource = null;  
  52.     private volatile String dataSourceJNDI = null;  
  53.     private volatile boolean alternateUsernameAllowed = false;  
  54.     private volatile boolean commitOnReturn = false;  
  55.     private volatile boolean rollbackOnReturn = false;  
  56.     private volatile boolean useDisposableConnectionFacade = true;  
  57.     private volatile boolean logValidationErrors = false;  
  58.     private volatile boolean propagateInterruptState = false;  
  59.     private volatile boolean ignoreExceptionOnPreLoad = false;  
  60.     private volatile boolean useStatementFacade = true;  

自定义参数

如果要修改某个默认参数值,可以在application.properties中配置,如下
spring.datasource.tomcat是前缀,maxActive是参数名,105是参数值,其他 参数格式也是一样
[plain] view plain copy
  1. spring.datasource.tomcat.maxActive=105  

在JAVA中自定义参数

在properties中自定义参数有一个问题,如果参数名写错了,是不会有任何错误提示的,会继续使用默认值 。在JAVA中配置可以避免这个问题,以下是设置maxActive参数,set其他参数也是一样
[java] view plain copy
  1. @Bean  
  2. public DataSource dataSource() {  
  3.     PoolProperties poolProperties = new PoolProperties();  
  4.     poolProperties.setMaxActive(105);  
  5.     return new DataSource(poolProperties);  
  6. }  

HikariCP

HikariCP是目前号称最好的连接池,没有之一。不过tomcat连接池有tomcat做为其后盾保障, 文档资料齐全,也更加持久稳妥。这里不讲解 HikariCP,有兴趣可访问https://github.com/brettwooldridge/HikariCP

原创粉丝点击