代码之家  ›  专栏  ›  技术社区  ›  Josh

Spring批处理电子邮件侦听器

  •  0
  • Josh  · 技术社区  · 7 年前

    我想将SpringBatch配置为在作业开始时发送电子邮件,并在作业完成或失败时发送电子邮件。我通过搜索看到了一些例子,比如这里的链接 on codecentric 但我在项目中不使用XML注释。

    我有一个类似这样的听众,但不确定我还需要什么其他作品。如有任何意见,将不胜感激

    public class SendMailListener implements JobExecutionListener {
    
        final static Logger LOGGER = LoggerFactory.getLogger(SendMailListener.class);
    
        @Autowired
        private JobExplorer explorer;
    
        @Autowired
        private StepExecution stepExecution;
    
        @Override
        public void afterJob(JobExecution jobExecution) {
            if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
                LOGGER.info("The job has been completed with the following parameters: " + jobExecution.getJobParameters());
            }
            //send email here
    
        }
    
        @Override
        public void beforeJob(JobExecution jobExecution) {
            // TODO Auto-generated method stub
    
        }
        //send email here
    }
    

    编辑:

    我已使用侦听器定义了作业:

    @Bean(name = "mccINSTANCETESTjob")
        public Job mccOrz004job(JobBuilderFactory jobFactory, //
                @Qualifier("instanceTestSetupStep") Step orz004SetupStep, //
                @Qualifier("callM204Step") Step callM204Step, //
                @Autowired SingleInstanceListener listener, @Autowired SendMailListener mailListener) { //
            return jobFactory.get("mccINSTANCETESTjob") //
                    .incrementer(new RunIdIncrementer()) //
                    .listener(mailListener) //
                    .start(orz004SetupStep) //
                    .next(callM204Step) //
                    .build();
        }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Mahmoud Ben Hassine    7 年前

    您需要定义类型为的bean JavaMailSender (如您共享的链接中所示),类似于:

    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        // set properties on javaMailSender (user, password, etc)
        return javaMailSender;
    }
    

    SendMailListener 就像您使用作业资源管理器一样。一旦注入,邮件发送者就可以用来发送电子邮件,下面是一个示例:

    public class SendMailListener implements JobExecutionListener {
    
        final static Logger LOGGER = LoggerFactory.getLogger(SendMailListener.class);
    
        @Autowired // field injection is not recommended, use constructor injection instead
        private JobExplorer explorer;
        @Autowired // field injection is not recommended, use constructor injection instead
        private JavaMailSender javaMailSender;
    
        @Autowired
        private StepExecution stepExecution;
    
        @Override
        public void afterJob(JobExecution jobExecution) {
            if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
                LOGGER.info("The job has been completed with the following parameters: " + jobExecution.getJobParameters());
            }
            //send email here
            MimeMessage message = javaMailSender.createMimeMessage();
            // set message properties (sender, receiver, content)
            javaMailSender.send(message);
        }
    
        @Override
        public void beforeJob(JobExecution jobExecution) {
            // TODO Auto-generated method stub
            //send email here
            MimeMessage message = javaMailSender.createMimeMessage();
            // set message properties (sender, receiver, content)
            javaMailSender.send(message);
        }
    
    }
    

        2
  •  0
  •   Anuj Vishwakarma    7 年前

    因此,对于XML表示法的变通方法,您可以选择类似于的作业配置。

    @Bean
    public Job demoJob(){
    return jobs.get("demoJob")
            .incrementer(new RunIdIncrementer())
            .listener(new JobResultListener())
            .start(demostep())
            .build();
    }
    

    你可以在这里找到合适的文章: https://howtodoinjava.com/spring-batch/spring-batch-event-listeners/