为何使用JNDI数据源
如果用java直接连接:
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
Connection conn= DriverManager.getConnection(url,user,password);
也是可以的,但是这样没有连接池的概念,每次连接都得重新创建,使用完毕必须记得断开,非常麻烦且效率低下,只适合小应用。
单个数据源
单个数据源配置很简单,修改server.xml,在你的工程context节点中添加resource即可。
<Context path="/pipeliner" docBase="F:\code\gd-dev\billing\autoacct\javaee\pipeliner\src\main\webapp" debug="5" reloadable="true" crossContext="true">
<span style="white-space:pre"> </span><Resource name="jdbc/sdact1ds"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@32.121.2.130:1521:test"
username="ucr_app"
password="ucr_app"
maxActive="60"
maxIdle="20"
maxWait="10000"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"/>
</Context>
同时,工程中必须要有所用数据库的jdbc的jar包,比如oracle的是ojdbc6.jar(java6)或jdbc14.jar(java1.4)
配置server.xml是全局的jndi,如果想非全局的,可增加配置在C:\work\apache-tomcat-7.0.57\conf\Catalina\localhost下。
有些文章说还得配置web.xml,其实是不需要的。(但是多数据源时就必须配置了)
数据源名称不一定必须叫jdbc/sdact1ds,你直接叫sdact1ds也是可以的,只是使用tomcat的数据源时大家都习惯前面加jdbc/,如果使用weblogic则一般不加;但是调用的时候必须前面加上javacomp/evn,比如(这个很重要,用习惯了weblogic为了这个折腾了一下):
java:comp/env/jdbc/sdact1ds
maxActive就是你配置的数据库连接池的最大连接数。
多个数据源
修改apache-tomcat-7.0.57\conf下的web.xml,这个文件很大,4000多行,在最后</web-app>之前增加即可。
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/sdact1ds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/sdautoacct1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
然后修改server.xml:
<Context path="/pipeliner" docBase="F:\code\bss_gd-dev\billing\autoacct\javaee\pipeliner\src\main\webapp" debug="5" reloadable="true" crossContext="true">
<span style="white-space:pre"> </span><Resource name="jdbc/sdact1ds"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@32.121.2.130:1521:test"
username="ucr_app"
password="ucr_app"
maxActive="60"
maxIdle="20"
maxWait="10000"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"/>
<Resource name="jdbc/ds_act_autoacct1"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="Altibase.jdbc.driver.AltibaseDriver"
url="jdbc:Altibase://30.51.9.46:20305/autoacctbak1"
username="AUTOACCTBAK"
password="AUTOACCTBAK"
maxActive="60"
maxIdle="20"
maxWait="10000"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"/>
</Context>
本文出处:
http://blog.youkuaiyun.com/ouyida3
2015.2.2