У меня есть компонент, который загружает конфигурационный XML Spring Spring в методе postConstruct:
@PostConstruct
private void starter(){
String[] springConfig = {
"SpringBatch/override/application-context.xml",
"SpringBatch/override/database.xml",
"SpringBatch/jobs/job-dataExtraction.xml",
};
ApplicationContext context = new ClassPathXmlApplicationContext(springConfig);
}
}
Я использую таймер для проверки записи в БД и запуска задания.Таймер вызывает метод ниже в другом классе.
public static void startUnidataJob(MessageDTO<String> msgDto){
JobLauncher jobLauncher = (JobLauncher) ApplicationContextProvider.getApplicationContext().getBean("jobLauncher"); //Problem occurs here
Job job = (Job) ApplicationContextProvider.getApplicationContext().getBean("dataExtractionJob");
try {
logger.info("With in starting...........................");
JobExecution execution = jobLauncher.run(job, new JobParameters());
} catch (Exception e) {
logger.error("Job launching Exception : ", e);
}
}
}
Проблема при загрузке приложения, тогда я могу видеть из журнала, что загружен bean jobLauncher.Но когда ApplicationContextProvider.getApplicationContext().getBean("jobLauncher")
выполняется, он выбрасывает .NoSuchBeanDefinitionException: No bean named 'jobLauncher' is defined
:
2019-03-11 02:03:39,594 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating shared instance of singleton bean 'jobLauncher'
2019-03-11 02:03:39,594 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'jobLauncher'
2019-03-11 02:03:39,595 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Eagerly caching bean 'jobLauncher' to allow for resolving potential circular references
2019-03-11 02:03:39,596 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'jobRepository'
2019-03-11 02:03:39,597 [main] DEBUG o.s.a.f.JdkDynamicAopProxy - Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [org.springframework.batch.core.repository.support.SimpleJobRepository@61d84e08]
2019-03-11 02:03:39,604 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Creating instance of bean 'org.springframework.core.task.SimpleAsyncTaskExecutor#3f3ddbd9'
2019-03-11 02:03:39,605 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'org.springframework.core.task.SimpleAsyncTaskExecutor#3f3ddbd9'
2019-03-11 02:03:39,605 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name 'jobLauncher'
2019-03-11 02:03:39,605 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'jobLauncher'
Вот код ApplicationContextProvider
@Component
public class ApplicationContextProvider implements ApplicationContextAware{
private static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
Следующее присутствует в загружаемом application-context.xmlчерез ClassPathXmlApplicationContext
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor">
<bean class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
</property>
</bean>
<!-- Must set this -->
<bean
class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<property name="jobRegistry" ref="jobRegistry" />
</bean>
<bean id="jobRegistry"
class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
Как ни странно, приложение отлично работает в моем Local. На сервере у меня запущено 2 одинаковых весенних пакетных Java-приложения.Кто-нибудь может мне помочь?