http://book.51cto.com/art/200808/86009.htm
1.2.3 Tomcat 的数据源配置
Tomcat 本身并不具备提供数据源的能力,而是借助于其他一些开源数据源(如DBCP 和 C3PO 等)来实现。通过Tomcat 提供的数据源,程序可以通过 JNDI 获得数据源,提供更方便的持久层访问。
下面以 DBCP 为例,介绍数据源的配置。
数据源的配置也有两种方式,这两种方式配置数据源的访问范围不同:一种对所有的 Web 应用都可以访问,另种只能在某个 Web 应用中访问。前者称为全局数据源,后者称为局部数据源。
不管配置哪种数据源,都必须提供数据源实现的jar 文件,还有数据库驱动。笔者以 MySql 数据库为例,要配置其数据源则必须提供 MySql 的驱动和 DBCP 数据源的 jar文件。
登录 http://jakarta.apache.o
commons-dbcp-I.2.1.jar
commons-pool-l.2.jar
commons-col1ections-3.l.jar
|
将这三个文件复制到Tomcat的 commonl1ib 路径下,即为Tomcat提供了配置数据源所必需的类库。
下面先介绍局部数据源的配置:
局部数据源无须修改系统的配置文件,而是增加用户自己的配置文件。这样不会造成系统的混乱,而且数据源被封装在一个 Web 应用之内,提供了更好的封装性,防止被其他的 Web 应用访问。
局部数据源只与特定的 Web 应用相关,因此只在特定 Web 应用的配置文件中配置。例如,为上面的 Web 应用增加局部数据源,修改 Tomcat 的 cont/Catalina'飞localhost 路径下的 Web 配置文件即可。
增加局部数据源后,完整的配置文件如下:
<?xml version='l.O' encoding='gb2312'?><!--配置一个Web应用一〉
<Context path="/test" docBase="e:/webroot" debug="O" privileged="true">
<!一配置一个资源,资源的名称为jdbc/dstest. 类型为 DataSource 数据源一〉
<Resource name="jdbc/dstest"auth="Container"type="javax.sql.DataSource"/>
<!--定义资源的参数name属性指定定义哪个资源的参数一〉
<ResourceParams name="jdbc/dstest"><!…下面是定义数据源的参数一〉
<parameter><!定义数据源工厂>
<name>factory</name><value>org.apache.commons.dbcp.
BasicDataSourceFactory</value></parameter>
<!一定义数据源的最大活动连接数->
<parameter><name>maxActive</name>
<value>lOO</value></parameter>
<!一定义数据源的超时时长,超过该时间,数据源自动断开连接>
<parameter><name>removeAbandonedTimeout</name>
<value>60</value></parameter>
<!一 定义数据源中最大空闲连接数,一旦容器中空闲连接数超过该数,系统将自动销毁→些连接
-->
<parameter><name>maxIdle</name>
<value>30</value></parameter>
<!一数据源的最大等待数-->
<parameter><name>maxWait</name><value>lOOOO</value></parameter>
<!一连接数据库的用户名-->
<parameter>
<name>user口ame</name>
<value>root</value></parameter>
<!一连接数据库的密码一〉
<parameter><name>password</name><value>32147</value></parameter>
<!一指定连接数据库所使用的驱动一〉
<parameter><name>driverClassName</name><value>com.mysql.jdbc.Driver</value>
</parameter>
<!指定连接数据库的URL
-->
<parameter>
〈口ame>url</name>
<value>jdbc:mysql:lllocalhost:3306/j2ee?autoReconnect=true
</value></parameter></ResourceParams>
<IContext>
|
再次启动Tomcat,该 Web应用即可通过JNDI访问数据源,下面是访问该数据源的代码:
//初始化Context. 使用工nitialContext初始化Context
Contextctx=new 工nitialContext();
/*
通过 JNDI 查找数据源,该JNDI 为 java:comp/env/jdbc/dstest.分成两个部分
java:comp/env是 Tomcat 固定的. Tomcat提供的 JNDI绑定都必须加该前缀
jdbc/dstest是定义数据源时的数据源名
*1DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/dstest");
//获取数据库连接
Connection conn=ds.getConnection();
//获取 Statement
Statementstmt=conn.createStateme口t();
//执行查询,返回ResulteSet对象
ResultSet rs=stmt.executeQuery("select* from newsinf");while(rs.next())
|
上面配置了局部数据源,如还需要配置全局数据源,可通过Administration控制台,或者修改server.xm1配置文件来实现。
通过控制台的配置方式相当简单,因为所作的任何修改,最终依然会变成对se凹er.xm1文件的修改。因此笔者建议使用直接修改server.xm1的方式。
注意:使用全局数据源会破坏Tomcat原有的配直文件。
在 se凹er.xm1文件中找到GlobalNamingResources元素,该元素下负责配置所有的全局资源,因此只需在该元素增加数据源的配置即可。增加数据源配置的配置片段如下:
<1 一配置全局命名资源一〉
<GlobalNamingResources>
<!--下面省略了系统中其他全局资源的配置-->
<1-配置一个资源,资源的名称为jdbc/dstest. 类型为 DataSource 数据源-->
<Resourcen缸ne="jdbc/dstest"auth="Container" type="
javax.sql.DataSource" I>
<!一定义资源的参数name属性指定定义哪个资源的参数-->
<ResourceParamsn缸ne="jdbc/dstest">
<!…下面是定义数据源的参数…〉
<parameter>
<!一 定义数据源工厂一〉
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!一定义数据源的最大活动连接数
-->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<!一定义数据源的超时时长,超过该时间,数据源自动断开连接
-->
<parameter>
<name>removeAbandonedTimeout</口arne>
<value>60</value>
</parameter>
<!-定义数据源中最大空闲连接数,
一旦容器中空闲连接数超过该数,系统将自动销毁一些连接
-->
<parameter>
<name>maxldle</name>
<value>30</value>
</parameter>
<!-数据源的最大等待数
-->
<parameter>
<name>maxWait</name>
<value>10000</value></parameter>
<!一连接数据库的用户名?<parameter>
<name>username</name>
<value>root</value>
</parameter>
<!一连接数据库的密码一〉
<parameter>
<name>password</name>
<value>32147</value></parameter>
<!一指定连接数据库所使用的驱动一〉
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<!-指定连接数据库的URL
-->
16
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/j2Be?autoReconnect=true</value>
</parameter>
</ResourceParams></GlobalNamingResources>
|
通过这种方式配置的数据源可以被所有的Web应用访问。
tomcat 6.x
在contxt.xml里
1.在context.xml文件中添加以下内容:(注意是在<Context></Context>之间添加)
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
usernam……
<Resource name="jdbc/server_db"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
username="sysdba"
password="masterkey"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://203.88.197.109:5432/server_db"
/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">-->
<!-- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">-->
<property name="dataSource">
<ref local="configuration_db"/>
</property>
</bean>