Ser*_*uşu 7 spring spring-batch spring-batch-admin
使用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>
Run Code Online (Sandbox Code Playgroud)
现在,我想用JNDI数据源覆盖这个dataSource,所以我删除了属性行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>
Run Code Online (Sandbox Code Playgroud)
您可能很容易猜到系统首先尝试初始化data-source-context.xml中定义的dataSource bean,因为它找不到属性值batch.jdbc.*的任何值,它会失败并出现异常.
无法在字符串值[$ {batch.jdbc.driver}]中解析占位符'batch.jdbc.driver'
由于我将使用JNDI并且不想处理这些属性值,所以我无法继续.
有关如何在这种情况下覆盖dataSource的想法?
在Spring Batch Admin中,有两个正在加载的Spring ApplicationContexts:
servlet-config.xml具有以下导入:
<import resource="classpath*:/META-INF/spring/batch/servlet/resources/*.xml" />
<import resource="classpath*:/META-INF/spring/batch/servlet/manager/*.xml" />
<import resource="classpath*:/META-INF/spring/batch/servlet/override/*.xml" />
Run Code Online (Sandbox Code Playgroud)
webapp-config.xml具有以下导入:
<import resource="classpath*:/META-INF/spring/batch/bootstrap/**/*.xml" />
<import resource="classpath*:/META-INF/spring/batch/override/**/*.xml" />
Run Code Online (Sandbox Code Playgroud)
servlet-config.xml配置servlet,webapp-config.xml配置应用程序的后端部分.问题是dataSource bean是第二个配置中的/定义的一部分,而不是第一个配置.因此,当您将dataSource bean添加到servlet配置的覆盖(/ META-INF/spring/batch/servlet/override/*.xml)时,就像您一样,将新bean添加到第一个上下文中,而不是覆盖第二个上下文的dataSource bean.
因此,您需要将自定义data-source-context.xml放在META-INF/spring/batch/override /而不是META-INF/spring/batch/servlet/override /
然后它工作,你甚至不会得到Could not resolve placeholder 'batch.jdbc.driver' in string value [${batch.jdbc.driver}]错误.
| 归档时间: |
|
| 查看次数: |
7593 次 |
| 最近记录: |