AWS lambda запускает Spring Batch Job из обработчика запросов без использования планировщика - PullRequest
0 голосов
/ 15 ноября 2018

Мое приложение использует весеннюю загрузку с пакетной обработкой и тестирует ее в AWS Lambda. Я хочу запустить задание в основном методе, а НЕ через планировщик. Возможно ли это сделать?

    @SpringBootApplication
@EnableAutoConfiguration
@EnableJpaRepositories("com.myrepo.repository")
@ComponentScan("com.myrepo")
@EnableScheduling
public class Main {

    private static final Logger LOG = LoggerFactory.getLogger(hMain.class);
    @Autowired
    JobLauncher launcher;

    @Autowired
    Job job;

    public static void main(String[] args) {

        try {
            LOG.info("Start of application - debt card notofication JOB");
            SpringApplication.run(BatchMain.class, args);

        } catch (Exception e) {
            LOG.error("Exception caught bathch Main, );
        }
    }
}

РЕДАКТИРОВАТЬ - я написал ниже код, но он не работает внутри лямбда-функции AWS

    @Scheduled(cron = "0/1 * * * * *")
public void performBatchOpertaion() {
    try {
        LOG.info("Scheduling Job and Launcher {}, {}", job, launcher);
        JobParameters params = new JobParametersBuilder()
                .addString(Constants.MYBATCH, String.valueOf(System.currentTimeMillis()))
                .toJobParameters();
        launcher.run(job, params);
    } catch (Exception e) {
        LOG.error("Unable to schedules ", e.getCause());

    }
}

 public static void startApp() {
        LOG.info("start batch job ");
        SpringApplication.run(Main.class);
        LOG.info("end batch job ");
    }

вот мой класс обработчика запросов, который вызывает statApp () класса Main

    --------------------------------------------------------
public class MyHandler implements RequestHandler<Map<String, Object>, String> {

    private static final Logger LOG = LoggerFactory.getLogger(MyHandler.class);

    @Autowired
    BatchMain main;

    @Override
    public String handleRequest(Map<String, Object> input, Context context) {
        LOG.info("Inside the handler request");
        BatchMain.startApp();
        LOG.info("End of handler request");
        return "End Of Application";
    }

}

1 Ответ

0 голосов
/ 17 июня 2019

метод handleRequest дождитесь завершения BatchMain.Вы можете использовать Thread join.Лямбда-обработчик приостанавливает основной поток, как только запрос дескриптора возвращает результат.В следующем случае он может завершить предыдущие приостановленные задачи

...