【发布时间】:2013-04-10 09:15:10
【问题描述】:
当使用 Spring Batch Admin 时,它会尝试为 dataSource、transactionManager 等提供一些默认值。
如果您想覆盖这些默认值,您可以在 META-INF/spring/batch/servlet/override/ 文件夹下创建自己的 xml bean 定义,并在引导期间保证默认属性将被覆盖。
在 spring-batch-admin 中,dataSource 默认是在 data-source-context.xml 中定义的
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${batch.jdbc.driver}" />
<property name="url" value="${batch.jdbc.url}" />
<property name="username" value="${batch.jdbc.user}" />
<property name="password" value="${batch.jdbc.password}" />
<property name="testWhileIdle" value="${batch.jdbc.testWhileIdle}"/>
<property name="validationQuery" value="${batch.jdbc.validationQuery}"/>
</bean>
现在,我想用 JNDI 数据源覆盖此数据源,因此我删除了 batch.jdbc.driver、batch.jdbc.url 等属性行并具有以下 jndi 定义
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/dbconn" />
</bean>
您可能很容易猜到,系统首先尝试初始化 data-source-context.xml 中定义的 dataSource bean,但由于找不到属性值 batch.jdbc.* 的任何值,因此它失败并出现异常。
无法解析字符串值 [${batch.jdbc.driver}] 中的占位符“batch.jdbc.driver”
由于我将使用 JNDI 并且不想处理这些属性值,因此无法继续。
知道在这种情况下如何覆盖 dataSource 吗?
【问题讨论】:
-
您好-您找到解决方案了吗? (我不想只为这个问题使用配置文件。)
-
@sdny 否。还尝试使用没有配置文件的解决方案。
-
我遇到了同样的问题。即使通过使用所需属性设置有效的“默认”连接,我也无法获得要使用的覆盖数据源。
-
您需要将自定义的 data-source-context.xml 放在 META-INF/spring/batch/override/ 下,而不是 META-INF/spring/batch/servlet/override/ 下
标签: spring spring-batch spring-batch-admin