Java 如何在运行时动态连接到数据源?
情况就是这样——我将JBOSS EAP 6.4设置为我的应用服务器,并在其中定义了一些JNDI数据源。数据源的名称和数量可能因环境而异。我需要编写一个以JNDI数据源和查询为输入的Web服务。它应该连接到相应的数据源并执行查询Java 如何在运行时动态连接到数据源?,java,spring,jboss,jndi,Java,Spring,Jboss,Jndi,情况就是这样——我将JBOSS EAP 6.4设置为我的应用服务器,并在其中定义了一些JNDI数据源。数据源的名称和数量可能因环境而异。我需要编写一个以JNDI数据源和查询为输入的Web服务。它应该连接到相应的数据源并执行查询 因此,JNDI数据源名称不应在应用程序中硬编码,而应在运行时作为输入 我不能使用下面的spring配置来定义数据源,因为这会使它硬编码- <bean id="dbDataSource" class="org.springframework.jndi.JndiObje
因此,JNDI数据源名称不应在应用程序中硬编码,而应在运行时作为输入 我不能使用下面的spring配置来定义数据源,因为这会使它硬编码-
<bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:jboss/datasources/myDS2"/>
</bean>
我想做一些类似的事情:
<bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${dataSourceInput}"/>
</bean>
其中,${dataSourceInput}
是Web服务的输入
请让我知道如何实现它
更新--
我不希望数据源名称作为JVM参数或通过参数文件传入。数据源名称必须作为输入传递给Web服务。上面的代码片段可能不是正确的方法。通过spring配置文件,这可能是不可能的
请告诉我是否有其他方法可以达到同样的效果。您可以从属性文件或a-D参数填充到JVM- 所以在JVM参数的情况下-
-DdataSourceInput=java:jboss/datasources/myDS2
还有其他方法可以达到类似的效果,但这是最简单的
如果您使用的是xml,则属性文件将通过以下方式导入—
<context:property-placeholder location="classpath*:META-INF/spring/myproperties.properties" />
经过一段时间的搜索,我找到了我一直在寻找的答案 我可以从JNDI名称创建数据源,该名称作为Web服务的输入,如下所示
dataSourceInput = <input from the webservice>
ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(dataSourceInput);
dataSourceInput=
ctx=新的InitialContext();
DataSource ds=(DataSource)ctx.lookup(dataSourceInput);
参考-JNDI数据源名称应作为Web服务的输入而不是JVM参数传递。可能我在spring中配置的方式是错误的。我可能需要在代码中配置它,而不是在spring配置文件中使用我使用的方法更新它的强制要求是将JNDI名称作为输入传递给Web服务,而不是通过属性文件。如果spring找不到属性,则会出现异常,因此属性为mandatory。您可以检查这一点。定义一个主DS和多个DS,并检查要动态调用的DS。您的
${dataSourceInput}
将只是一个字符串。我浏览了链接。它仍然需要在spring配置文件中定义所有数据源。然后动态地决定需要使用其中的哪一个。这里我的要求不同。我不知道在应用服务器级别定义的数据源的数量/名称。因此,无法在spring配置文件中定义所有这些。
dataSourceInput = <input from the webservice>
ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(dataSourceInput);