`

Tomcat使用之一:JNDI数据源配置

阅读更多

1、添加全局数据源

在$TOMCAT_HOME$/conf/server.xml文件中添加以下JNDI数据源配置:

 

<Resource name="jdbc/test"  auth="Container" 
type="javax.sql.DataSource" 
username="test"  
password="test" 
driverClassName="oracle.jdbc.driver.OracleDriver"  
url="jdbc:oracle:thin:@localhost:1521:test"  
maxActive="100"  
maxIdle="30"  
maxWait="10000"/>
 

 

2、在应用中添加引用全局数据源的配置

在项目中/WEB-INF/下的web.xml中加入以下配置

 

<resource-ref> 
    <description>OracleDataSource</description> 
     <res-ref-name>jdbc/test</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
</resource-ref>
 

3、添加JDBC驱动包

将Oracle的驱动包(ojdbc14.jar)放到拷贝到 $TOMCAT_HOME$/目录下的lib中。

 

4、在应用中使用JNDI(也可以在应用中使用Spring来获取Tomcat的JNDI数据源)

 

Context initContext = new InitialContext();   
Context envContext  = (Context)initContext.lookup("java:/comp/env");   
DataSource ds = (DataSource)envContext.lookup("jdbc/test");   
Connection conn = ds.getConnection(); 

 

疑问:

1、Tomcat采用的默认数据连接池类型是哪种?

Tomcat默认采用DBCP连接池,但是Tomcat默认使用的DBCP的jar包被tomcat重新打包整理了,类路径跟apache 的DBCP包不一样。被tomcat整理后的jar包在$TOMCAT_HOME$/lib/tomcat-dbcp.jar。

 

怎么证明Tomcat默认采用的就是被Tomcat整理过的DBCP呢?

打开$TOMCAT_HOME$/lib/catalina.jar的ResourceFactory.class的109行(如下代码):

 

else if (ref.getClassName().equals("javax.sql.DataSource")) {
        String javaxSqlDataSourceFactoryClassName = System.getProperty("javax.sql.DataSource.Factory", "org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory");
        try
        {
          factory = (ObjectFactory)Class.forName(javaxSqlDataSourceFactoryClassName).newInstance();
        }

当factory属性没有配置并且type属性等于 javax.sql.DataSource时,采用org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory数据库连接池。

 

2、如何改为自己指定的连接池类型?

 

如果你使用其他数据源如DBCP数据源,需要在<Resouce 标签多添加一个属性如factory="org.apache.commons.dbcp.BasicDataSourceFactory"当然你也要把DBCP相关jar包放在tomcat的lib目录下。

 

3、不同项目用到不用数据源,不要因为某些数据源没法访问而导致其他项目应用跑不起来。

在WebRoot下面建文件夹META-INF,里面建一个文件context.xml,添加内容和以上一样。可以把配置需要jar包直接放在WEB-INF的lib里面,而不需要一定要放在Tomcat的lib目录下。

如果一个项目分成几个war部署,建议采用全局数据源配置较好。如果只是开发可以使用局部的方式。

 

4、JNDI数据源配置在config/server.xml和config/context.xml有什么区别?

tomcat6版本中,context元素已经从server.xml文件中独立出来了,放在一个context.xml文件中。因为server.xml是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而context.xml文件则不然,tomcat服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics