Web项目开发环境中运行在Tomcat时涉及到JNDI的Datasource的解决方法

原创 2012年02月28日 14:39:39

通常在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>

项目版本不同导致Eclipse报错问题——关于在JDK1.7环境中,运行JDK1.8环境下编写的项目。

本人电脑环境配置的是JDK1.7,女朋友的是JDK1.8 ,我把她编的java文件导入到我电脑里的Eclipse(LUNA版本)的时候,项目出现一个红色叹号,红红的格外鲜艳,当然运行是肯定出错了。SO...
  • zxc_helloworld
  • zxc_helloworld
  • 2016年11月05日 19:29
  • 8104

JavaWeb:Tomcat下配置数据源(JNDI)连接数据库

习惯了以硬编码的形式在程序中建立数据库连接,用完就在finally语句块中close一下就结束了。对于重视数据库连接数的应用来说,这样子做会耗费大量的时间和数据库资源,而且硬编码的形式也不甚灵活。 ...
  • jdfkldjlkjdl
  • jdfkldjlkjdl
  • 2014年10月29日 20:09
  • 1671

【MyBatis】MyBatis Tomcat JNDI原理及源码分析

一、 Tomcat JNDI JNDI(java nameing and drectory interface),是一组在Java应用中访问命名和服务的API,所谓命名服务,即将对象和名称联系起来...
  • reliveIT
  • reliveIT
  • 2015年08月07日 09:30
  • 3290

Tomcat使用数据源(JNDI/直接使用)

Tomcat 在 7.0 以前的版本都是使用 commons-dbcp 做为连接池的实现,但是 dbcp 饱受诟病,原因有: dbcp 是单线程的,为了保证线程安全会锁整个连接池dbcp 性能不佳...
  • zmx729618
  • zmx729618
  • 2016年04月21日 15:33
  • 3283

Cocos2d-html5入门 (跨平台游戏开发)

cocos2d-js是cocos2d-x的JavaScript版本,真正跨全平台的游戏引擎,采用原生JavaScript语言,可发布到包括Web平台,iOS,Android,Windows Phone...
  • u011100687
  • u011100687
  • 2016年02月23日 14:38
  • 656

maven项目无法运行在Tomcat环境

真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.Contex...
  • u010739551
  • u010739551
  • 2015年12月08日 11:06
  • 2807

JavaWeb开发环境搭建Eclipse配置Tomcat

Eclipse官网下载:http://www.eclipse.org/downloads/ Apache Tomcat下载: http://tomcat.apache.org/ JDK下载:http:...
  • wu_wxc
  • wu_wxc
  • 2015年09月22日 16:34
  • 7042

关于JNDI配置以及运行报错详解

在介绍JNDI配置之前,先让我好好吐槽一下。先说说今天在Java社区里面逛,看到关于数据库连接池的技术已经发展到好几种了,还停留在dbcp技术的我也没脸说什么。得知现在Apache下的tomcat在7...
  • helloworld1993
  • helloworld1993
  • 2015年07月17日 19:48
  • 992

配置tomcat以运行PHP项目

1、前言 由于公司的需要,笔者需要搭建一个php项目,但是笔者之前并没有接触过任何php相关的开发,所以有关php基本的开发知识,环境搭建要求,还有编译器都不了解。但是笔者在研究发现,即使自己集成...
  • qq_25722767
  • qq_25722767
  • 2016年09月20日 14:39
  • 12212

SpringBoot 项目如何在tomcat容器中运行

SpringBoot内嵌容器的部署方式SpringBoot内部默认提供内嵌的tomcat容器,所以可以直接打成jar包,丢到服务器上的任何一个目录,然后在当前目录下执行java -jar demo.j...
  • u010598360
  • u010598360
  • 2017年12月13日 10:41
  • 282
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Web项目开发环境中运行在Tomcat时涉及到JNDI的Datasource的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)