Tomcat切换jndi
java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池。
java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池。数据库连接池有很多选择,c3p、dhcp、proxool等,druid作为一名后起之秀,凭借其出色的性能,也逐渐印入了大家的眼帘。接下来本教程就说一下druid的简单使用。
[toc]
一、搭建环境
1.下载jar包
http://repo1.maven.org/maven2/com/alibaba/druid/
#下载最新的jar包。
2.下载源码包
https://github.com/alibaba/druid
#然后使用maven命令行,或者导入到eclipse中进行编译。
二、druid数据源介绍
配置 | 缺省值 | 说明 |
---|---|---|
name | ~ | 配置这个属性的意义在于,如果存在多个数据源,监控的时候,可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:”DataSource-” + System.identityHashCode(this) |
jdbcUrl | ~ | 连接数据库的url,不同数据库不一样。 |
username | ~ | 连接数据库的用户名 |
password | ~ | 连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。 |
driverClassName | 根据url自动识别 | 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName |
initialSize | 0 | 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 |
maxActive | 8 | 最大连接池数量 |
maxIdle | 8 | 已经不再使用,配置了也没效果 |
minIdle | ~ | 最小连接池数量 |
maxWait | ~ | 获取连接时最大等待时间,单位毫秒。配置了maxWait之后, 缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。 |
poolPreparedStatements | false | 是否缓存preparedStatement,也就是PSCache。 PSCache对支持游标的数据库性能提升巨大,比如说oracle。 在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。作者在5.5版本中使用PSCache,通过监控界面发现PSCache有缓存命中率记录, 该应该是支持PSCache。 |
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 |
可以根据系统使用情况来配置对应的数值,一般业务单节点数据库连接数不会超过300,特殊情况可以适当的调高
三、配置jndi:
1.修改tomcat配置文件,在此使用的是oracle数据库
编辑context.xml
$ vim /ane/tomcat/conf/context.xml
<Context>
<!-- 使用阿里巴巴的DruidDataSource配置针对Oracle数据库的JNDI数据源 -->
<Resource
name="jdbc/OracleDataSource"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@192.168.1.229:1521:lead"
username="lead_oams"
password="p"
initialSize="1"
maxActive="500"
minIdle="50"
maxWait="6000"
removeAbandoned="true"
removeAbandonedTimeout="1800"
timeBetweenEvictionRunsMillis="6000"
minEvictableIdleTimeMillis="300000"
validationQuery="select 1 from dual"
testWhileIdle="true"
testOnBorrow="false"
testOnReturn="false"
poolPreparedStatements="true"
maxOpenPreparedStatements="20"
logAbandoned="true"
filters="stat"/>
</Context>
其他数据源的配置:
<!-- 使用阿里巴巴的DruidDataSource配置针对MySQL数据库的JNDI数据源 -->
<Resource
name="jdbc/MysqlDataSource"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.1.233:3306/lead_oams?useUnicode=true&characterEncoding=utf-8"
username="lead_system"
password="password"
initialSize="1"
maxActive="500"
minIdle="50"
maxWait="6000"
removeAbandoned="true"
removeAbandonedTimeout="1800"
timeBetweenEvictionRunsMillis="6000"
minEvictableIdleTimeMillis="300000"
validationQuery="select 1"
testWhileIdle="true"
testOnBorrow="false"
testOnReturn="false"
poolPreparedStatements="true"
maxOpenPreparedStatements="20"
logAbandoned="true"
filters="stat"/>
<!--使用阿里巴巴的DruidDataSource配置针对SQLServer数据库的JNDI数据源-->
<Resource
name="jdbc/SqlServerDataSource"
auth="Container"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
type="javax.sql.DataSource"
driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://192.168.1.61:1433;DatabaseName=gaclTest"
username="sa"
password="p@ssw0rd"
initialSize="1"
maxActive="500"
minIdle="50"
maxWait="6000"
removeAbandoned="true"
removeAbandonedTimeout="1800"
timeBetweenEvictionRunsMillis="6000"
minEvictableIdleTimeMillis="300000"
validationQuery="select 1 from dual"
testWhileIdle="true"
testOnBorrow="false"
testOnReturn="false"
poolPreparedStatements="true"
maxOpenPreparedStatements="20"
logAbandoned="true"
filters="stat"/>
2.spring文件引用tomcat数据源
vim /ane/tomcat/webapps/ROOT/WEB-INF/classes/spring-context.xml
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/oracle" />
</bean>
#注意
#jndiName的value值为在Context中Resource的name属性值对应为
#value=“java:comp/env/{Resource.name}”
#bean id为之前bean 的id值不能改变
3.context中数据源加密:
在命令行中执行如下命令:
$ java -cp druid-1.0.17.jar com.alibaba.druid.filter.config.ConfigTools your_password
4.修改context.txt中对应值进行修改
$ vim /ane/tomcat/conf/context.xml
password="password"
filters="stat,config"
connectionProperties="config.decrypt=true;config.decrypt.key=“publicKey” />
Over~
版权协议须知!
本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
1412 0 2017-02-08
博主卡片
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。
现在时间 2024-12-28
今日天气
随机推荐
站点统计
- 文章总数:241篇
- 分类总数:29个
- 评论总数:12条
- 本站总访问量 353472 次
@xiaozi 最后的分享的镜像下载地址打不开 服务器没有开机吗?
@yuanyuan 为什么我的4b安装centos7.9 插上tf卡 显示不兼...
@Wong arrhenius 牛比
@MakerFace 厉害了!
@TongSir 老哥 更新下我的友链链接 https://blog.ton...