通常在J2EE的开发中,需要用到在服务器上通过JNDI配置的Datasource,如最后的应用在Weblogic上运行,而在开发环境的本地机器中可能是Tomcat,这时候需要在Tomcat上配置一个Datasource,在网上看到很多人的解决办法都是改Tomcat运行环境的server.xml 或者context.xml,其实最简单的办法是在项目的META-INF目录里加入一个context.xml,这样就不用项目组的每个成员都需要改自己机器上的Tomcat配置了。如下图:
context的内容如下:
<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="xxxDS" auth="Container" type="javax.sql.DataSource" maxActive="20" maxIdle="30" maxWait="10000" username="xx" password="xx" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@147.151.240.xx:1521:orcl" /> </Context>这样的话,下面的通过Java代码访问JNDI获取Datasource的方式在Eclipse开发环境中集成Tomcat和最终发布到Weblogic上都可以运行。
private void testJNDIDataSource(){ try { InitialContext context = new InitialContext(); javax.sql.DataSource ds = (javax.sql.DataSource) context.lookup ("java:/comp/env/xxxDS"); System.out.println(ds); } catch (Exception e) { e.printStackTrace(); }; }如果是和Spring集成的话,也可以不用配置context.xml的方法。通过下面的配置来解决,不过这样引入了为了适应测试环境,而在Production环境本不应该做的配置,所有没有上面这种方法好。
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>xxxDS</value> </property> <property name="defaultObject" ref="dataSource1"/> </bean> <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@147.151.240.xx:1521:orcl" /> <property name="username" value="xxx" /> <property name="password" value="xxx" /> </bean>在Spring3.1推出了profile配置,可以在不同的环境使用不同的bean配置。
<beans profile="weblogic"> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>xxxDS</value> </property> <property name="resourceRef" value="true"/> </bean> </beans> <beans profile="tomcat"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@147.151.240.89:1521:orcl" /> <property name="username" value="but" /> <property name="password" value="but" /> </bean> </beans>在web.xml中指定要启用的profile是哪一个。
<context-param> <param-name>spring.profiles.active</param-name> <param-value>tomcat</param-value> </context-param>