论坛首页 Java企业应用论坛

『提问』在Spring框架中如何获取DataSource?

浏览 20007 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-02-24  
软件环境:
win2k + tomcat4.x + Spring1.1.3
配置文件:
web.xml
<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/dataAccessContext-local.xml  /WEB-INF/applicationContext.xml
		</param-value>
	</context-param>

<servlet>
		<servlet-name>context</servlet-name>
		<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
		<load-on-startup>3</load-on-startup>
	</servlet>

<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>


applicationContext.xml
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>WEB-INF/jdbc.properties</value>
			</list>
		</property>
	</bean>


dataAccessContext-local.xml
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
		<property name="url"><value>${jdbc.url}</value></property>
		<property name="username"><value>${jdbc.username}</value></property>
		<property name="password"><value>${jdbc.password}</value></property>
	</bean>

	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource"><ref local="dataSource"/></property>
	</bean>


附:以上配置基本上和Spring附带的jpetstore上的配置一样。
jdbc.properties
jdbc.driverClassName=oracle.jdbc.OracleDriver
......

错误提示信息:
org.springframework.beans.factory.BeanInitializationException: Could not load properties from class
path resource [WEB-INF/jdbc.properties]; nested exception is java.io.FileNotFoundException: Could no
t open class path resource [WEB-INF/jdbc.properties]
java.io.FileNotFoundException: Could not open class path resource [WEB-INF/jdbc.properties]
你的分析:
首先我试过无论把jdbc.properties放在web-inf还是放在classes下面都会出现错误信息。
我现在的目的就是想获取DataSource,因为在xml中配置了bean dataSource资源,于是自己写代码
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[]{"WEB-INF/applicationContext.xml, WEB-INF/dataAccessContext-local.xml"});
BeanFactory factory = (BeanFactory)appContext;
DataSource dataSource = (DataSource)factory.getBean("dataSource");
但dataSource总是null,不知何故。

另外以前一搬都是通过
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/exmaple");
获取,但Spring不是在beans中配置的DataSource吗?我该如何获取呢?
   发表时间:2005-02-24  
我将applicationContext.xml, dataAccessContext-local.xml beans 中的内容都去掉,然后写下面的代码可以获取DataSource成功:
public DataSource test()
{
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@192.168.1.2:1521:orcl");
dataSource.setUsername("sa");
dataSource.setPassword("111");

return dataSource;
}
这会我就头昏了,到底Spring需要的这2个xml配置文件中的datasource配置的相关信息到底是做什么用的呢,我该如何用他呢?
0 请登录后投票
   发表时间:2005-02-24  
因为公司现在的项目严格要求必须都写成procedure,不能出现sql,所有只能放弃很多持久化机制,这样就没有必要再生成一些与table对应xml的对象文件了。
出于这样的考虑,决定在实际的项目中只使用Spring的 事务管理、DAO、JDBC、Web框架。另外以前表示层都是使用struts的tag。但看Spring的jpetstore后觉得jstl更好,因为以前用struts tag的时候在weblogic80上有问题,但在weblogic813上没有问题,到后来很不爽。看了jstl后,心想既然是sun发布的jsp标准的标签库应该在兼容性方面更好些。
不知道大家对我的看法有何意见
0 请登录后投票
   发表时间:2005-02-24  
[WEB-INF/jdbc.properties]  中WEB-INF/去掉,properties文件放到web-inf/classes中。

配置文件就是不用你自己编码去构造呀,并且配置易于修改,不用修改source code。
0 请登录后投票
   发表时间:2005-02-24  
rongsantang 写道
[WEB-INF/jdbc.properties]  中WEB-INF/去掉,properties文件放到web-inf/classes中。

配置文件就是不用你自己编码去构造呀,并且配置易于修改,不用修改source code。


&lt;value&gt;/jdbc.properties&lt;/value&gt;
&lt;value&gt;jdbc.properties&lt;/value&gt;
这2种配置后都出现下面的错误

在tomcat启动的时候,出现如下错误信息:
2005-02-24 14:38:11,687 ERROR [org.springframework.web.context.ContextLoader] - &lt;Context initializat
ion failed&gt;
org.springframework.beans.factory.BeanInitializationException: Could not load properties from Servle
tContext resource [/jdbc.properties]; nested exception is java.io.FileNotFoundException: Could not o
pen ServletContext resource [/jdbc.properties]
java.io.FileNotFoundException: Could not open ServletContext resource [/jdbc.properties]
        at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletCont
extResource.java:89)

另外我初步估计问题不在这儿,为什么呢?
因为我在配置Spring附带的例子jpetstore中就只这样配置的,一切成功,没有任何问题。在因为jpetstore不是用的JDBC所有不知道他的datasource是如何获取的或者说他的datasource是隐含在某些API中的
0 请登录后投票
   发表时间:2005-02-24  
斜杠也去掉。
0 请登录后投票
   发表时间:2005-02-25  
你的jdbc.properties放到哪里了?我没看到
0 请登录后投票
   发表时间:2005-02-25  
如果要以web程序方式运行的话:这段配置
&lt;value&gt;WEB-INF/jdbc.properties&lt;/value&gt; 应该是&lt;value&gt;/WEB-INF/jdbc.properties&lt;/value&gt; 这样的

如果做测试的话,建议你使用ClassPathXmlApplicationContext创建application,注意的是要把你的配置文件放到你工程的classpath下面
0 请登录后投票
   发表时间:2005-02-25  
fsword 写道
你的jdbc.properties放到哪里了?我没看到


放在web-inf或者classes都出现问题
0 请登录后投票
   发表时间:2005-02-25  
yhc0125 写道
如果要以web程序方式运行的话:这段配置
&lt;value&gt;WEB-INF/jdbc.properties&lt;/value&gt; 应该是&lt;value&gt;/WEB-INF/jdbc.properties&lt;/value&gt; 这样的

如果做测试的话,建议你使用ClassPathXmlApplicationContext创建application,注意的是要把你的配置文件放到你工程的classpath下面



那么我以web程序方式运行的话,我该如何用代码获取datasource呢?
也就是写个方法获取dataSource,怎么写呢?谢谢!!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics