我有一个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:那些不知道该怎么做的人,请不要占据这篇文章的空间,说它不可能。如果你不知道答案,不需要发帖和垃圾邮件。答案 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定义是正确的,那应该可行。