Передать данные в GlobalControllerExceptionHandler весной - PullRequest
0 голосов
/ 14 декабря 2018

Мой проект должен создать файл, содержащий журналы и загрузить его в S3.

Для этого при каждом выполнении задания Spring Batch я создаю файл, подобный следующему:

String startTime = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date());
new File(startTime + "_error_logs");

Затем я добавляю его в набор JobParameters, который передается моемуJobLauncher вот так:

SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
JobParameters param = new JobParametersBuilder()
   .addString("startTime", startTime)
   .toJobParameters();
jobLauncher.run(getJob(), param);

Затем на протяжении всего проекта я хочу получить доступ к этому параметру задания.Например, я могу получить его в своем классе JobCompletionNotificationListener, который в функции afterJob принимает JobExecution в качестве параметра, что означает, что я могу сделать это:

String startTime = jobExecution.getJobParameters().getString("startTime");

Однако в GlobalControllerExceptionHandler класс, у меня нет доступа к этому JobExecution объекту, что означает, что я не могу получить параметр startTime.

Можно ли как-нибудь передать ему данные?Или есть лучший подход к этой проблеме?Я знаю, что у меня будет такая же проблема в других классах.Другие подходы, о которых я подумал, тоже не сработают, например, сохранение строки в файле не сработает, потому что тогда, если параллельно выполняется другое задание, оно будет сбито с толку.

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете добавить JobExplorer в свой GlobalControllerExceptionHandler и запросить jobExecution, который вас интересует. Как только вы получите дескриптор нужного исполнения, вы можете получить параметр, как вы упомянули:

String startTime = jobExecution.getJobParameters().getString("startTime");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...