如何在运行时动态连接到数据源?
How to connect to DataSources dynamically at runtime?
情况就是这样 - 我将 JBOSS EAP 6.4 设置为我的应用程序服务器,并在其中定义了一些 JNDI 数据源。数据源的名称和数量可能因环境而异。我需要编写一个将 JNDI 数据源和查询作为输入的 Web 服务。它应该连接到相应的数据源并执行查询。
因此 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}
是网络服务的输入。
请告诉我如何实现它。
更新--
我不希望将数据源名称作为 JVM 参数或通过参数文件传入。数据源名称必须作为输入传递给 web 服务。上面的代码片段可能不是正确的方法。这可能无法通过 spring 配置文件实现。
请让我知道是否有任何其他方法可以达到同样的效果。
您可以从属性文件或 -D 参数填充到 JVM -
所以在 JVM 参数的情况下 -
-DdataSourceInput=java:jboss/datasources/myDS2
还有其他方法可以实现类似的效果,但这是最简单的
如果您使用的是 xml,则属性文件由 -
导入
<context:property-placeholder location="classpath*:META-INF/spring/myproperties.properties" />
属性包含 -
dataSourceInput=java:jboss/datasources/myDS2
经过一段时间的搜索,我找到了我要找的答案。
我可以从 JNDI 名称创建数据源,该名称被用作 Web 服务的输入,如下所示。
dataSourceInput = <input from the webservice>
ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(dataSourceInput);
参考 - http://www.journaldev.com/2513/tomcat-datasource-jndi-example-java
情况就是这样 - 我将 JBOSS EAP 6.4 设置为我的应用程序服务器,并在其中定义了一些 JNDI 数据源。数据源的名称和数量可能因环境而异。我需要编写一个将 JNDI 数据源和查询作为输入的 Web 服务。它应该连接到相应的数据源并执行查询。
因此 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}
是网络服务的输入。
请告诉我如何实现它。
更新--
我不希望将数据源名称作为 JVM 参数或通过参数文件传入。数据源名称必须作为输入传递给 web 服务。上面的代码片段可能不是正确的方法。这可能无法通过 spring 配置文件实现。
请让我知道是否有任何其他方法可以达到同样的效果。
您可以从属性文件或 -D 参数填充到 JVM -
所以在 JVM 参数的情况下 -
-DdataSourceInput=java:jboss/datasources/myDS2
还有其他方法可以实现类似的效果,但这是最简单的
如果您使用的是 xml,则属性文件由 -
导入<context:property-placeholder location="classpath*:META-INF/spring/myproperties.properties" />
属性包含 -
dataSourceInput=java:jboss/datasources/myDS2
经过一段时间的搜索,我找到了我要找的答案。
我可以从 JNDI 名称创建数据源,该名称被用作 Web 服务的输入,如下所示。
dataSourceInput = <input from the webservice>
ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(dataSourceInput);
参考 - http://www.journaldev.com/2513/tomcat-datasource-jndi-example-java