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