Spring Batch Admin を使用する場合、dataSource、transactionManager などにいくつかのデフォルトを提供しようとします。
これらのデフォルトをオーバーライドする場合は、独自の xml Bean 定義をMETA-INF/spring/batch/servlet/override/フォルダーの下に作成し、ブートストラップ中にデフォルト プロパティがオーバーライドされることを保証します。
spring-batch-admin では、この定義で data-source-context.xml に dataSource のデフォルトが定義されています。
<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>
ここで、この dataSource を 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 をオーバーライドする方法について何か考えはありますか?