配置tomcat全局c3p0连接池

由于项目中多个应用访问同一个数据库,并部署在同一个tomcat下面,所以没必要每个应用都配置连接池信息,这样可能导致数据库的资源分布不均,所以这种情况完全可以配置一个tomcat的全局连接池,所涉及应用均访问该连接池,让数据库资源得以充分利用。

本人使用了c3p0连接池,对c3p0虽然没做过相关性能测试,但是网评还不错,使用的是0.9.1版本,tomcat 使用 7.0.32 


配置分为几个步骤:

一、在tomcat的server.xml中配置数据源

找到GlobalNamingResources节点,在里面新增如下内容(其中具体参数意义请参考c3p0官方说明):

<Resource name="jdbc/db1" auth="Container"
		type="com.mchange.v2.c3p0.ComboPooledDataSource"
    factory="org.apache.naming.factory.BeanFactory"
    driverClass="oracle.jdbc.driver.OracleDriver"
		jdbcUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
		user="scott"
		password="123456"
		minPoolSize="10"
		maxPoolSize="200"
		maxIdleTime="1800"
		acquireIncrement="2"
		maxStatements="0"
		initialPoolSize="20"
		idleConnectionTestPeriod="60"
		acquireRetryAttempts="30"
		acquireRetryDelay="1000"
		testConnectionOnCheckin="false"
		breakAfterAcquireFailure="false"
		testConnectionOnCheckout="false"/>


二、在tomcat下content.xml中配置数据源对应的JNDI

<ResourceLink name="jdbc/db1" global="jdbc/db1"  type="javax.sql.DataSource"/>
三、将c3p0的jar包、数据库驱动包放到tomcat下lib目录里面


应用访问方式:

一、基于spring进行管理,只需要在spring中配置数据源即可

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
          <property name="jndiName" value="java:comp/env/jdbc/db1" />
</bean>

二、写代码直接通过JNDI获取数据源

 try {

   Context ctx = new  InitialContext();

     Context envContext = (Context)ctx.lookup("java:/comp/env");//java:/comp/env为固定路径

     DataSource ds = (DataSource)envContext.lookup("jdbc/db1");//tomcat中设置的数据源

     Connection con = ds.getConnection();

     System.out.println(con);

  } catch (Exception e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值