如何在xml配置文件中获取spring声明的数据源

时间:2011-02-04 15:09:40

标签: java database spring jdbc datasource

我有一个Spring数据源,如下所示:

<bean id="dataSource1" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${database.driver}" />
    <property name="url" value="${database1.url}" />
    <property name="username" value="${database1.username}" />
    <property name="password" value="${database1.password}" />
</bean>

我需要在jndi或jee上提供此功能。一些相关的事情:

<bean id="dataSourceJNDI1" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/dataSource1"/>
    <property name="beanClassLoader" ref="dataSource1"></property>
</bean>

或者也许:

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/database1" />

不确定如何让jndi或jee使用dbcp。任何帮助将不胜感激。

提前谢谢。

ps:伙计们,这是一个特殊的需求。所以我必须这样做。请不要发布不必要的建议,说明为什么我应该使用tomcat服务器作为数据源。我知道以这种方式设置数据源。我再说一遍这是一个特殊的需要。也请不要提供我的java代码解决方案,不是必需的。

ps:那些不知道该怎么做的人,请不要占据这篇文章的空间,说它不可能。如果你不知道答案,不需要发帖和垃圾邮件。

2 个答案:

答案 0 :(得分:1)

您需要将DataSource绑定到JNDI树。您需要提供连接到本地JNDI树的参数。 JndiTemplate可以做到这一点。本地InitialContext可能不需要某些JNDI环境属性。我认为“java.naming.factory.initial”是唯一必需的。另一个用于连接进程外JNDI服务器:

    <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.provider.url">${jndi.provider.url}</prop>
            <prop key="java.naming.factory.initial">${jndi.factory.initial}</prop>
            <prop key="java.naming.security.principal">${jndi.security.principal}</prop>
            <prop key="java.naming.security.credentials">${jndi.security.credentials}</prop>
        </props>
    </property>
</bean>

<bean factory-bean="jndiTemplate" factory-method="bind">
    <constructor-arg type="java.lang.String" value="java:com/env/DataSoure"/>
    <constructor-arg type="java.lang.Object" ref="dataSource"/>
</bean>

如果您在同一个Spring上下文中执行JNDI查找,则需要让JNDI bean依赖此查找bean或使JNDI查找延迟,以便它在首次使用时执行查找。

答案 1 :(得分:-1)

由于您使用的是jndi,因此您必须将数据源声明为jndi源。

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/database1" />

<bean id="dataSource1" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="dataSource" ref="dataSource" />
    <property name="driverClassName" value="${database.driver}" />
    <property name="url" value="${database1.url}" />
    <property name="username" value="${database1.username}" />
    <property name="password" value="${database1.password}" />
</bean>

假设您对dataSource1的bean定义是正确的,那应该可行。