Существует Spring-приложение, используемое с Spring-Batch и Spring-Quartz.
Существует класс @Service, который запускает Spring-Batch и называется MyService.
@Service
@EnableBatchProcessing
@EnableScheduling
public class MyService {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job processExportJob;
public void helloMethod() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {
JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis())
.toJobParameters();
jobLauncher.run(processExportJob, jobParameters);
}
}
Существует задание и конфигурация "весенние кварталы", которые пытаются внедрить этот serrvice и метод запуска helloMethod () Если задание содержит только регистратор, проблем нет и работает хорошо.
ТогдаПытаюсь залить свой сервис в одно из полей. После каждого запуска приложения первый раз задание содержит это поле, но в следующий раз в этом поле есть ноль.
Я пытался просто создать свой сервис с помощью нового: MyService service = new MyService ();
Но в сервисе все поля с автоматической связью после первого успешного запуска становятся пустыми
Приложение развернуто на веб-узле 8.5.5.13 (кластер с 2 узлами), oracle11g и spring4. Java8.
Затем, используя аннотацию @Autowired
, я внедряю сервис в задание, если это задание работает ровно один раз. Введенное поле является нулевым во время всех последующих выполнений задания. Более того, если я создаю сервис вне весны:
MyService service = new MyService();
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class MyJob implements Job {
@Autowired
private MyService service;
private static final String MESSAGE = "===================================QUARTZ TACT===================================";
private Logger logger = Logger.getLogger(getClass());
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
logger.log(Level.INFO, MESSAGE);
try {
service.helloMethod();
} catch (Exception e) {
e.printStackTrace();
logger.log(Level.ERROR, " Failed..");
logger.log(Level.ERROR, Arrays.toString(e.getStackTrace()));
}
}
}