一、首先配置连接池
1、tomcat下配置连接池
*>在tomcat下的context.xml配置连接池代码
<
Resource
name ="jdbc/sqlserver" //连接池名称
type ="javax.sql.DataSource"
password ="syl6413"
driverClassName ="com.microsoft.sqlserver.jdbc.SQLServerDriver"
maxIdle ="5"
maxWait ="5000"
username ="sa"
url ="jdbc:sqlserver://192.168.0.9:1433; DatabaseName=disasterSystem"
maxActive ="10" />
name ="jdbc/sqlserver" //连接池名称
type ="javax.sql.DataSource"
password ="syl6413"
driverClassName ="com.microsoft.sqlserver.jdbc.SQLServerDriver"
maxIdle ="5"
maxWait ="5000"
username ="sa"
url ="jdbc:sqlserver://192.168.0.9:1433; DatabaseName=disasterSystem"
maxActive ="10" />
Resource标签中的每个属性的含义在下表中表示:
- name="jdbc/sqlserver" 创建一个可以从Context(程序的逻辑名)访问的JNDI data source。 java:comp/env是所有的Tomcat下的Context的前缀(完整路径 java:comp/env/jdbc/sqlserver)。Web应用程序可以使用这个Context来lookup the data source。
- auth="Container" auth属性是用来指定是由Tomcat代替应用程序执行验证任务(auth="Container") 或者由应用程序自身进行验证(auth="Application"
-
type="javax.sql.DataSource" type属性用来指定lookup返回的数据类型为"javax.sql.DataSource",它同 时也表明Tomcat容器将代替应用程序执行登录数据库的身份验证任务。 -
maxActive 在连接池中active connection的最大数目,0代表无数。 -
maxIdle 在连接池中空闲连接数目的上限,一旦达到这个限制,Tomcat将开始清理这些 连接。-1代表无限。 -
maxWait Tomcat Manager 等待数据库响应的最长时间限制,一旦超过了这个限制, Manager将返回一个异常。-1表示可以永远等待。 -
username=“Test” 数据库账户用户名 -
password=“Test” 数据库账户密码 -
driverClassName="" 数据库驱动,Tomcat/DBCP根据这个属性来加载相应的驱动 -
url="" JDBC url
*>tomcat连接池中配置web.xml代码
<!--
DataSource
-->
< resource-ref >
< description > SQLServer2005 Datasource disasterSystem </ description >
< res-ref-name > jdbc/sqlserver </ res-ref-name >
< res-type > javax.sql.DataSource </ res-type >
< res-auth > Container </ res-auth >
</ resource-ref >
< resource-ref >
< description > SQLServer2005 Datasource disasterSystem </ description >
< res-ref-name > jdbc/sqlserver </ res-ref-name >
< res-type > javax.sql.DataSource </ res-type >
< res-auth > Container </ res-auth >
</ resource-ref >
<
bean
id
="dataSource"
class
="org.springframework.jndi.JndiObjectFactoryBean"
>
< property name ="jndiName" value ="java:comp/env/jdbc/sqlserver" >
</ property >
</ bean >
< property name ="jndiName" value ="java:comp/env/jdbc/sqlserver" >
</ property >
</ bean >
<
bean
id
="sessionFactory"
class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
< property name ="dataSource" >
< ref bean ="dataSource" />
</ property >
< property name ="hibernateProperties" >
< props >
< prop key ="hibernate.dialect" >
org.hibernate.dialect.SQLServerDialect
</ prop >
< prop key ="hibernate.connection.autocommit" > true </ prop >
<!-- 显示sql语句 -->
< prop key ="hibernate.show_sql" > true </ prop >
<!-- 解决提交乱码问题 -->
< prop key ="connection.useUnicode" > true </ prop >
< prop key ="connection.characterEncoding" > utf-8 </ prop >
<!-- 格式化sql语句 -->
< prop key ="hibernate.format_sql" > true </ prop >
< prop key ="hibernate.order_updates" > true </ prop >
<!-- 事务自动管理 -->
< prop key ="hibernate.connection.release_mode" >
after_transaction
</ prop >
</ props >
</ property >
< property name ="mappingResources" >
< list ></ list >
</ property >
</ bean >
class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
< property name ="dataSource" >
< ref bean ="dataSource" />
</ property >
< property name ="hibernateProperties" >
< props >
< prop key ="hibernate.dialect" >
org.hibernate.dialect.SQLServerDialect
</ prop >
< prop key ="hibernate.connection.autocommit" > true </ prop >
<!-- 显示sql语句 -->
< prop key ="hibernate.show_sql" > true </ prop >
<!-- 解决提交乱码问题 -->
< prop key ="connection.useUnicode" > true </ prop >
< prop key ="connection.characterEncoding" > utf-8 </ prop >
<!-- 格式化sql语句 -->
< prop key ="hibernate.format_sql" > true </ prop >
< prop key ="hibernate.order_updates" > true </ prop >
<!-- 事务自动管理 -->
< prop key ="hibernate.connection.release_mode" >
after_transaction
</ prop >
</ props >
</ property >
< property name ="mappingResources" >
< list ></ list >
</ property >
</ bean >
Spring不通过用tomcat中配置的JNDI来连接,但是它也是通过用commons.dbcp.jar连接池来管理的,也可以通过其他的开源连接池工具如:C3P0等。配置又分为两种,具体代码如下:
*>一种是直接配置applicationContext.xml
<
bean
id
="dataSource"
class
="org.apache.commons.dbcp.BasicDataSource"
>
< property name ="driverClassName" value ="oracle.jdbc.driver.OracleDriver" >
</ property >
< property name ="url" value ="jdbc:oracle:thin:@localhost:1521:SJY" >
</ property >
< property name ="username" value ="**" ></ property >
< property name ="password" value ="**" ></ property >
</ bean >
< property name ="driverClassName" value ="oracle.jdbc.driver.OracleDriver" >
</ property >
< property name ="url" value ="jdbc:oracle:thin:@localhost:1521:SJY" >
</ property >
< property name ="username" value ="**" ></ property >
< property name ="password" value ="**" ></ property >
</ bean >
datasource.properties代码:
datasource.driverClassName
=
com.microsoft.sqlserver.jdbc.SQLServerDriver
datasource.url = jdbc:sqlserver: // 192.168.0.9:1433;DatabaseName=disasterSystem
datasource.username = sa
datasource.password = syl6413
datasource.maxActive = 10
datasource.maxIdle = 5
datasource.maxWait = 5000
datasource.defaultAutoCommit = true
datasource.url = jdbc:sqlserver: // 192.168.0.9:1433;DatabaseName=disasterSystem
datasource.username = sa
datasource.password = syl6413
datasource.maxActive = 10
datasource.maxIdle = 5
datasource.maxWait = 5000
datasource.defaultAutoCommit = true
<
bean
id
="placeholderConfig"
class
="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
>
< property name ="location" >
< value > classpath:/datasource.properties </ value >
</ property >
</ bean >
< bean id ="dataSource" class ="org.apache.commons.dbcp.BasicDataSource" >
< property name ="driverClassName" >
< value > ${datasource.driverClassName} </ value >
</ property >
< property name ="url" >
< value > ${datasource.url} </ value >
</ property >
< property name ="username" >
< value > ${datasource.username} </ value >
</ property >
< property name ="password" >
< value > ${datasource.password} </ value >
</ property >
< property name ="maxActive" >
< value > ${datasource.maxActive} </ value >
</ property >
< property name ="maxIdle" >
< value > ${datasource.maxIdle} </ value >
</ property >
< property name ="maxWait" >
< value > ${datasource.maxWait} </ value >
</ property >
< property name ="defaultAutoCommit" >
< value > ${datasource.defaultAutoCommit} </ value >
</ property >
</ bean >
< property name ="location" >
< value > classpath:/datasource.properties </ value >
</ property >
</ bean >
< bean id ="dataSource" class ="org.apache.commons.dbcp.BasicDataSource" >
< property name ="driverClassName" >
< value > ${datasource.driverClassName} </ value >
</ property >
< property name ="url" >
< value > ${datasource.url} </ value >
</ property >
< property name ="username" >
< value > ${datasource.username} </ value >
</ property >
< property name ="password" >
< value > ${datasource.password} </ value >
</ property >
< property name ="maxActive" >
< value > ${datasource.maxActive} </ value >
</ property >
< property name ="maxIdle" >
< value > ${datasource.maxIdle} </ value >
</ property >
< property name ="maxWait" >
< value > ${datasource.maxWait} </ value >
</ property >
< property name ="defaultAutoCommit" >
< value > ${datasource.defaultAutoCommit} </ value >
</ property >
</ bean >
二、测试配置连接池
1、测试tomcat连接池
*>不用Spring管理的tomcat连接池测试代码(只能在jsp里面测试):
Context initContext
=
new
InitialContext();
Context envContext = (Context)initContext.lookup( " java:comp/env " );
DataSource ds = (DataSource) envContext.lookup( " jdbc/sqlserver " );
Connection con = ds.getConnection();
if (con != null ) {
System.out.println( " 已经得到连接 " );
} else {
System.out.println( " 没有得到连接 " );
}
Context envContext = (Context)initContext.lookup( " java:comp/env " );
DataSource ds = (DataSource) envContext.lookup( " jdbc/sqlserver " );
Connection con = ds.getConnection();
if (con != null ) {
System.out.println( " 已经得到连接 " );
} else {
System.out.println( " 没有得到连接 " );
}
//
ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
//
两种得到bean工厂的代码,任选其一
ApplicationContext ctx = new ClassPathXmlApplicationContext( " applicationContext.xml " );
DataSource ds = (DataSource) ctx.getBean( " dataSource " );
Connection con = ds.getConnection();
if (con != null ){
System.out.println( " 连接成功 " );
} else {
System.out.println( " 连接不成功 " );
}
ApplicationContext ctx = new ClassPathXmlApplicationContext( " applicationContext.xml " );
DataSource ds = (DataSource) ctx.getBean( " dataSource " );
Connection con = ds.getConnection();
if (con != null ){
System.out.println( " 连接成功 " );
} else {
System.out.println( " 连接不成功 " );
}
其实测试Spring连接池的代码和上面Spring管理tomcat连接池测试代码一样:
//
ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
//
两种得到bean工厂的代码,任选其一
ApplicationContext ctx = new ClassPathXmlApplicationContext( " applicationContext.xml " );
DataSource ds = (DataSource) ctx.getBean( " dataSource " );
Connection con = ds.getConnection();
if (con != null ){
System.out.println( " 连接成功 " );
} else {
System.out.println( " 连接不成功 " );
}
ApplicationContext ctx = new ClassPathXmlApplicationContext( " applicationContext.xml " );
DataSource ds = (DataSource) ctx.getBean( " dataSource " );
Connection con = ds.getConnection();
if (con != null ){
System.out.println( " 连接成功 " );
} else {
System.out.println( " 连接不成功 " );
}
三、两种连接池比较
tomcat连接池因为配置tomcat下面的,所有最好用jsp或者maven(模拟窗口测试方法)来测试,但是跟我们的测试带了很多的不变啊,若能在普通java application或者junit方法测试就不容易,也不知道杂写,若高手知道请指教
而Spring连接池与HTTP协议无关,可直接通过java application或junit直接使用,大大地方便了测试和使用.
在效率方面,我倒没认真测试有什么不同,但是我觉得,都是用的第三方连接池管理,应该差别不大,有不同见解的朋友请指出来,共同学习!!