论坛首页 Java企业应用论坛

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

浏览 20006 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-02-25  
cbcivp 写道
yhc0125 写道
如果要以web程序方式运行的话:这段配置
<value>WEB-INF/jdbc.properties</value> 应该是<value>/WEB-INF/jdbc.properties</value> 这样的

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



那么我以web程序方式运行的话,我该如何用代码获取datasource呢?
也就是写个方法获取dataSource,怎么写呢?谢谢!!


先问一下,你是通过ContextLoadServlet创建applicationContext的吗?
0 请登录后投票
   发表时间:2005-02-25  
自己总结一下,不对之处希望各位指导!对此表示感谢!!

配置:
web.xml中只配置applicationContext.xml并放在WEB-INF下,文件中不设置任何bean。
在classes目录下面放入bean.xml,内容如下:
<beans> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
        <property name="driverClassName"> 
            <value>oracle.jdbc.OracleDriver</value> 
        </property> 
        <property name="url"> 
            <value>jdbc:oracle:thin:@192.168.1.2:1521:orcl</value> 
        </property> 
        <property name="username"> 
            <value>sa</value> 
        </property> 
        <property name="password"> 
            <value>123</value> 
        </property> 
    </bean> 
                                                                                
    <bean id="dataBean" class="com.my.application.test.DataBean"> 
        <property name="dataSource"> 
            <ref bean="dataSource"/> 
        </property> 
    </bean> 
</beans>


java代码DataBean.java
public class DataBean
{
	private DataSource dataSource;

	public void setDataSource(DataSource dataSource);
	{
		this.dataSource = dataSource;
	}

	public void testDataSource();
	{
		try
		{
			Connection connection = dataSource.getConnection();;
			if(connection != null);
				System.out.println("test ok!");;
		}
		catch(Exception e);
		{
			e.printStackTrace();;
		}
	}
	
	public void getDataSourceTest();
	{
		BeanDefinitionRegistry reg = new DefaultListableBeanFactory();; 
		XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(reg);; 
		                                                                                
		reader.loadBeanDefinitions(new ClassPathResource("bean.xml"););;; 
		                                                                                
		BeanFactory bf = (BeanFactory); reg; 
		DataBean dataBean = (DataBean); bf.getBean("dataBean");; 
		dataBean.testDataSource();;
	}
	
	public static void main(String[] args);
	{
		DataBean db = new DataBean();;
		db.getDataSourceTest();;
		
		
	}
}


经测试成功!
0 请登录后投票
   发表时间:2005-02-25  
cbcivp 写道
自己总结一下,不对之处希望各位指导!对此表示感谢!!

配置:
web.xml中只配置applicationContext.xml并放在WEB-INF下,文件中不设置任何bean。
在classes目录下面放入bean.xml,内容如下:
<beans> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
        <property name="driverClassName"> 
            <value>oracle.jdbc.OracleDriver</value> 
        </property> 
        <property name="url"> 
            <value>jdbc:oracle:thin:@192.168.1.2:1521:orcl</value> 
        </property> 
        <property name="username"> 
            <value>sa</value> 
        </property> 
        <property name="password"> 
            <value>123</value> 
        </property> 
    </bean> 
                                                                                
    <bean id="dataBean" class="com.my.application.test.DataBean"> 
        <property name="dataSource"> 
            <ref bean="dataSource"/> 
        </property> 
    </bean> 
</beans>


java代码DataBean.java
public class DataBean
{
	private DataSource dataSource;

	public void setDataSource(DataSource dataSource);
	{
		this.dataSource = dataSource;
	}

	public void testDataSource();
	{
		try
		{
			Connection connection = dataSource.getConnection();;
			if(connection != null);
				System.out.println("test ok!");;
		}
		catch(Exception e);
		{
			e.printStackTrace();;
		}
	}
	
	public void getDataSourceTest();
	{
		BeanDefinitionRegistry reg = new DefaultListableBeanFactory();; 
		XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(reg);; 
		                                                                                
		reader.loadBeanDefinitions(new ClassPathResource("bean.xml"););;; 
		                                                                                
		BeanFactory bf = (BeanFactory); reg; 
		DataBean dataBean = (DataBean); bf.getBean("dataBean");; 
		dataBean.testDataSource();;
	}
	
	public static void main(String[] args);
	{
		DataBean db = new DataBean();;
		db.getDataSourceTest();;
		
		
	}
}


经测试成功!


你这么做还要applicationContext.xml干什么?如果你是要做测试的话,可以把你的applicationContext.xml放到/WEB-INF/classes下面就行了,干嘛还要另外写一个bean.xml呢?如果你的应用是web方式的话,用ContextLoadServlet可以直接加载applicationContext.xml,创建applicationContext,并且放在ServletContext里面,你要什么Bean直接从那里去就行了
0 请登录后投票
   发表时间:2005-02-28  
先问一下,你是通过ContextLoadServlet创建applicationContext的吗?
是的。
但eclipse中测试的时候需要写testcase,之前你以告诉我将applicationContext.xml放在classes下面。

你这么做还要applicationContext.xml干什么?如果你是要做测试的话,可以把你的applicationContext.xml放到/WEB-INF/classes下面就行了,干嘛还要另外写一个bean.xml呢?如果你的应用是web方式的话,用ContextLoadServlet可以直接加载applicationContext.xml,创建applicationContext,并且放在ServletContext里面,你要什么Bean直接从那里去就行了
实际上我最开始提问的时候我就把我的配置及情况大致说了一下,可能是我没有说明白吧。
我的应用是以web方式运行,这个是肯定的。另外写一个bean.xml是自慰(因为一直不知道如何在我之前的那种配置情况下得到datasource)。另外因为在spring的例子中applicationContext.xml
<value>WEB-INF/jdbc.properties</value>

之前你说改为
<value>/WEB-INF/jdbc.properties</value>

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

在你的回答中
如果你的应用是web方式的话,用ContextLoadServlet可以直接加载applicationContext.xml,创建applicationContext,并且放在ServletContext里面,你要什么Bean直接从那里去就行了

我实在不知道如何写这段代码,能否再次麻烦你一次 。实在上这段话前半部应该是说配置,后半部说的应该是通过一定代码实现获取datasource.
0 请登录后投票
   发表时间:2005-02-28  
web方式下:在你的web.xml文件里加上:
&lt;context-param&gt;
    &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
    &lt;param-value&gt;/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml&lt;/param-value&gt;
&lt;/context-param&gt;

&lt;servlet&gt;
    &lt;servlet-name&gt;context&lt;/servlet-name&gt;
    &lt;servlet-class&gt;org.springframework.web.context.ContextLoaderServlet&lt;/servlet-class&gt;
    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
&lt;/servlet&gt;

这样就可以了,在你的应用启动时,容器首先加载这个“ContextLoaderServlet”servlet,创建applicationContext,并放在ServletContext中,可以通过ServletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)方法获得;有了applicationContext,你就知道怎么做了吧
0 请登录后投票
论坛首页 Java企业应用版

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