将 spring-batch-admin 集成到现有 spring 引导后无法导入属性
Can't Import properties after integrating spring-batch-admin into existed spring boot
我使用 spring-batch 和 spring-boot 开发了一个项目。
我遵循了如何集成它的确切规则:
1.删除所有@EnableBatchProcessing
2. 添加 ServletConfiguration 和 WebappConfiguration(并使用
导入它们
@Import({ ServletConfiguration.class, WebappConfiguration.class })
添加道具:
批量-mysql.properties
业务架构-mysql
并修改 application.properties 为:
server.servletPath=/*
spring.freemarker.checkTemplateLocation=false
ENVIRONMENT=mysql
现在是副作用。我的应用程序使用 applicationContext .xml 除了它的 java config.
applicationContext 有一些占位符:
<context:property-placeholder
location="file:///etc/location/services/myapp.properties"/>
<bean name="configuration" class="com.mycompany.commons.configuration.factory.BeanAwareConfigurationFactory">
<property name="serviceId" value="${serviceId}"/>
...
</bean>
我一集成 spring-batch-admin
就收到了这个错误:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'serviceId' in string value "${serviceId}"
at
...
我试过@PropertySource导入它,但没有成功:
@PropertySource("file:///etc/location/services/myapp.properties")
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.printf("Started processor service app");
}
从我的 spring-boot
项目中删除 spring-batch-admin
后,我就设法附加了这些道具。
知道如何克服这个问题吗?
您可以覆盖spring-batch-admin
默认上下文加载配置。在 src/main/resources/META-INF/spring/batch/override/manager/
中,您可以放置 env-context.xml
文件,其中包含需要加载的资源配置。
这是 spring batch admin 一个可以用作起点的,因此您可以执行以下操作:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Use this to set additional properties on beans at run time -->
<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/org/springframework/batch/admin/bootstrap/batch.properties</value>
<value>classpath:batch-default.properties</value>
<value>classpath:batch-${ENVIRONMENT:hsql}.properties</value>
<!-- this line you can add-->
<value>file:///etc/location/services/myapp.properties</value>
</list>
</property>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="ignoreUnresolvablePlaceholders" value="false" />
<property name="order" value="1" />
</bean>
</beans>
我分叉了 github 项目并添加了修复程序以防止占位符错误。您可以在此处获取新代码:https://github.com/vesperaba/spring-batch-admin-spring-boot.
问题是 SpringBatch 有它自己的 PropertyPlaceholder,您必须覆盖它,但要做到这一点,您必须手动导入一些文件以避免定义它。
在这里你可以找到新的 conf:https://github.com/vesperaba/spring-batch-admin-spring-boot/blob/master/src/main/java/de/codecentric/batch/config/MainV2Configuration.java
我使用 spring-batch 和 spring-boot 开发了一个项目。
我遵循了如何集成它的确切规则: 1.删除所有@EnableBatchProcessing 2. 添加 ServletConfiguration 和 WebappConfiguration(并使用
导入它们@Import({ ServletConfiguration.class, WebappConfiguration.class })
添加道具:
批量-mysql.properties
业务架构-mysql
并修改 application.properties 为:
server.servletPath=/*
spring.freemarker.checkTemplateLocation=false
ENVIRONMENT=mysql
现在是副作用。我的应用程序使用 applicationContext .xml 除了它的 java config.
applicationContext 有一些占位符:
<context:property-placeholder
location="file:///etc/location/services/myapp.properties"/>
<bean name="configuration" class="com.mycompany.commons.configuration.factory.BeanAwareConfigurationFactory">
<property name="serviceId" value="${serviceId}"/>
...
</bean>
我一集成 spring-batch-admin
就收到了这个错误:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'serviceId' in string value "${serviceId}"
at
...
我试过@PropertySource导入它,但没有成功:
@PropertySource("file:///etc/location/services/myapp.properties")
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.printf("Started processor service app");
}
从我的 spring-boot
项目中删除 spring-batch-admin
后,我就设法附加了这些道具。
知道如何克服这个问题吗?
您可以覆盖spring-batch-admin
默认上下文加载配置。在 src/main/resources/META-INF/spring/batch/override/manager/
中,您可以放置 env-context.xml
文件,其中包含需要加载的资源配置。
这是 spring batch admin 一个可以用作起点的,因此您可以执行以下操作:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Use this to set additional properties on beans at run time -->
<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/org/springframework/batch/admin/bootstrap/batch.properties</value>
<value>classpath:batch-default.properties</value>
<value>classpath:batch-${ENVIRONMENT:hsql}.properties</value>
<!-- this line you can add-->
<value>file:///etc/location/services/myapp.properties</value>
</list>
</property>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="ignoreUnresolvablePlaceholders" value="false" />
<property name="order" value="1" />
</bean>
</beans>
我分叉了 github 项目并添加了修复程序以防止占位符错误。您可以在此处获取新代码:https://github.com/vesperaba/spring-batch-admin-spring-boot.
问题是 SpringBatch 有它自己的 PropertyPlaceholder,您必须覆盖它,但要做到这一点,您必须手动导入一些文件以避免定义它。
在这里你可以找到新的 conf:https://github.com/vesperaba/spring-batch-admin-spring-boot/blob/master/src/main/java/de/codecentric/batch/config/MainV2Configuration.java