Mybatis技术⼀数据库连接池配置(druid)
只简单叙述,⽹上相关的内容很多,这⾥只是给出参考:
数据库连接池druid配置列表:
配置缺省值说明
name配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。
如果没有配置,将会⽣成⼀个名字,格式是:"DataSource-" + System.identityHashCode(this)
jdbcUrl 连接数据库的url,不同数据库不⼀样。例如:mysql : jdbc:mysql://192.168.0.1:3306/druid2 oracle : jdbc:oracle:thin:@192.168.0.1:1521:ocnauto
username连接数据库的⽤户名
password连接数据库的密码。如果你不希望密码直接写在配置⽂件中,可以使⽤ConfigFilter。详细看这
⾥:
driverClassName根据url⾃
druid连接池配置详解动识别这⼀项可配可不配,如果不配置druid会根据url⾃动识别dbType,然后选择相应的driverClassName
initialSize0初始化时建⽴物理连接的个数。初始化发⽣在显⽰调⽤init⽅法,或者第⼀次getConnection时maxActive8最⼤连接池数量
maxIdle8已经不再使⽤,配置了也没效果
minIdle最⼩连接池数量
maxWait获取连接时最⼤等待时间,单位毫秒。配置了maxWait之后,缺省启⽤公平锁,并发效率会有所
下降,如果需要可以通过配置useUnfairLock属性为true使⽤⾮公平锁。
poolPreparedStatements false是否缓存preparedStatement,也就是PSCache。PSCache对⽀持游标的数据库性能提升巨
⼤,⽐如说oracle。在mysql下建议关闭。
maxOpenPreparedStatements-1要启⽤PSCache,必须配置⼤于0,当⼤于0时,poolPreparedStatements⾃动触发修改为true。在Druid中,不会存在Oracle下PSCache占⽤内存过多的问题,可以把这个数值配置⼤⼀些,⽐如说100
validationQuery⽤来检测连接是否有效的sql,要求是⼀个查询语句。如果validationQuery为
null,testOnBorrow、testOnReturn、testWhileIdle都不会其作⽤。
testOnBorrow true申请连接时执⾏validationQuery检测连接是否有效,做了这个配置会降低性能。testOnReturn false归还连接时执⾏validationQuery检测连接是否有效,做了这个配置会降低性能
testWhileIdle false建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间⼤于
timeBetweenEvictionRunsMillis,执⾏validationQuery检测连接是否有效。
timeBetweenEvictionRunsMillis 有两个含义:
1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
numTestsPerEvictionRun不再使⽤,⼀个DruidDataSource只⽀持⼀个EvictionRun minEvictableIdleTimeMillis
connectionInitSqls物理连接初始化的时候执⾏的sql
exceptionSorter 根据
dbType⾃
动识别
当数据库抛出⼀些不可恢复的异常时,抛弃连接
filters属性类型是字符串,通过别名的⽅式配置扩展插件,常⽤的插件有:
监控统计⽤的filter:stat ⽇志⽤的filter:log4j 防御sql注⼊的filter:wall
proxyFilters类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,
并⾮替换关系
配置属性说明:
driver:JDBC具体数据库驱动
url:JDBC连接
username:⽤户名
password:密码
defaultTransactionIsolationLevel:默认事务隔离级别
下⾯l的配置:
<!-- 数据库相关配置 -->
<!--引⼊properties⽂件中,数据库配置参数-->
<bean class="org.springframework.fig.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:jdbc.properties</value>
</property>
</bean>
<bean id="writeDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 数据库基本信息配置 -->
<property name="url" value="${jdbc.write.jdbcUrl}" />
<property name="username" value="${jdbc.write.user}" />
<property name="password" value="${jdbc.write.password}" />
<!-- 配置初始化⼤⼩、最⼩、最⼤ -->
<!-- 最⼤并发连接数 -->
<property name="maxActive" value="${jdbc.maxPoolSize}" />
<!-- 初始化连接数量 -->
<property name="initialSize" value="${jdbc.initialPoolSize}" />
<!-- 最⼩空闲连接数 -->
<property name="minIdle" value="${jdbc.miniPoolSize}" />
<!-- 配置获取连接等待超时的时间 ,会降低并发性能-->
<property name = "maxWait" value ="${jdbc.maxWait}" />
<!-- 配置间隔多久才进⾏⼀次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
<!-- 配置⼀个连接在池中最⼩⽣存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
<!-- 验证连接有效与否的SQL,不同的数据配置不同 -->
<property name="validationQuery" value="${jdbc.preferredTestQuery}" />
<property name="testWhileIdle" value="true" />
<property name="filters" value="stat" />
</bean>
<bean id="readDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${ad.jdbcUrl}" />
<property name="username" value="${ad.user}" />
<property name="password" value="${ad.password}" />
<property name="maxActive" value="${jdbc.maxPoolSize}" />
<property name="initialSize" value="${jdbc.initialPoolSize}" />
<!-- 配置获取连接等待超时的时间 ,会降低并发性能-->
<property name = "maxWait" value ="${jdbc.maxWait}" />
<property name="minIdle" value="${jdbc.miniPoolSize}" />
<property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
<property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="${jdbc.preferredTestQuery}" />
<property name="testWhileIdle" value="true" />
<property name="filters" value="stat" />
</bean>
<!-- 多数据源配置 -->
<bean id="multipleDataSource" class="com.jitri.utils.dataSource.MultipleDataSource">
<property name="defaultTargetDataSource" ref="writeDataSource" />
<property name="targetDataSources">
<map>
<entry key="writeDataSource" value-ref="writeDataSource" />
<entry key="readDataSource" value-ref="readDataSource" />
</map>
</property>
</bean>
<bean id="sqlSessionFactory" class="batis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="multipleDataSource" />
<!--PageInterceptor分页 -->
<property name="mapperLocations">
<array>
<value>com.jitri.mapper.*.xml</value>
</array>
</property>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
<!-- 事务处理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="multipleDataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<!--mapper批量扫描,从mapper包中扫描出mapper接⼝,⾃动创建代理对象并在spring容器中注册 -->
<bean class="batis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的包名,如果扫描多个包,包之间需⽤半⾓逗号隔开 -->
<property name="basePackage" value="com.jitri.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<import resource="l" />
数据库properties配置信息:
##本地环境_allowMultiQueries=true配置⽤于指定可以执⾏多条数据库
jdbc.write.jdbcUrl = jdbc:mysql://localhost:3306/jitri?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&allowMultiQueries=true jdbc.write.user = root
jdbc.write.password = 123456
erTimezone=UTC
jdbc.miniPoolSize = 10
jdbc.maxPoolSize = 30
jdbc.initialPoolSize = 1
#jdbc.acquireIncrement = 1
jdbc.maxWait=60000
jdbc.timeBetweenEvictionRunsMillis = 60000
jdbc.minEvictableIdleTimeMillis = 300000
jdbc.preferredTestQuery = select * from cc
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论