`
linhao315
  • 浏览: 29091 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

兼容Tomcat和Weblogic的Spring 数据源JNDI配置

    博客分类:
  • java
阅读更多
众所周知,Tomcat和Weblogic中查找JNDI的名称是不一样的,以Spring配置为例,在Weblogic中,需要这样配:
<bean id="baseDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="dataSource" />
</bean>	

但是在Tomcat中却是这样的:
<bean id="baseDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" value="java:comp/env/dataSource" />
</bean>	


当使用Tomcat开发(速度快啊),又要部署到Weblogic时,怎么兼容就是比较头疼的问题了。当然,我们可以配置JDBC直连的方式:
       <bean id="baseDataSource"
              class="org.apache.commons.dbcp.BasicDataSource"
              destroy-method="close">
              <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
              <property name="url" value="jdbc:oracle:thin:@192.168.1.239:1521:dev1" />
              <property name="username" value="foo" />
              <property name="password" value="bar" />
              <property name="initialSize" value="2" />
              <property name="maxActive" value="15" />
              <property name="testWhileIdle" value="true" />
              <property name="validationQuery" value="select 1 from dual" />
              <property name="testOnBorrow" value="true" />
       </bean>

这样在Tomcat和Weblogic中就都可以部署了,但是缺点也是显而易见的,万一要修改数据库连接信息,就得改Spring配置!

我们可以利用Spring2.0引入的jndi-lookup内容模式,对配置进行改进(注意文件开头引入了jee的xsd):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:jee="http://www.springframework.org/schema/jee"  
       xsi:schemaLocation=  
                "http://www.springframework.org/schema/beans   
                http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
                http://www.springframework.org/schema/jee   
                http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">  
 
    <jee:jndi-lookup id="baseDataSource" jndi-name="dataSource" resource-ref="true"/>


注意这里的resource-ref="true",当resource-ref属性为true时,jndiName会被添加java:comp/env/,而这个正是Tomcat查找JNDI的地方,所以Tomcat能用!
至于Weblogic,可能是直接通过jndi-name属性去查找JNDI了,所以也可以用。

顺带附上Tomcat7的JNDI配置,我配的是全局的,所以在%TOMCAT_HOME%\conf\context.xml中配置:
	  <Resource name="dataSource" auth="Container"
              type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@192.168.1.239:1521:dev1"
              username="foo" password="bar" maxActive="15" maxIdle="10" initialSize="2"
              testWhileIdle="true" validationQuery="select 1 from dual" testOnBorrow="true"/>

我用的是oracle,驱动复制到%TOMCAT_HOME%\lib下,web.xml不需要配置。
1
2
分享到:
评论
1 楼 卧龙与凤雏 2012-03-21  
很好谢了收下了

相关推荐

Global site tag (gtag.js) - Google Analytics