使用Spring Batch Config如何发送邮件以及如何在作业中配置

ram*_*ddy 4 spring spring-batch spring-jms

我需要使用 Spring Batch 配置发送邮件。在具有邮件状态(成功或失败)的邮件中,现在可以从 csv 读取数据并写入数据库。写入数据库后,我需要发送邮件。请任何人向我建议这是我的 java 配置文件作业配置

return jobs.get("insertIntoDbFromCsvJob")
            .start(readRegistrations())
                .build();
    }
Run Code Online (Sandbox Code Playgroud)

这是 readRegistrations() 步骤,从 csv 读取数据并写入数据库。现在,如果该步骤成功或失败,我需要发送邮件。

Aru*_*unM 5

您可以使用 Spring 电子邮件支持和作业侦听器。

    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl javaMailSenderImpl = new JavaMailSenderImpl();
        javaMailSenderImpl.setHost("localhost");
        javaMailSenderImpl.setUsername("");
        javaMailSenderImpl.setPassword("");
        javaMailSenderImpl.setProtocol("smtp");
        javaMailSenderImpl.setPort(25);
        return javaMailSenderImpl;
    }

    @Bean
    public SimpleMailMessage templateMessage() {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setTo("to@gmail.com");
        mailMessage.setSubject("Job Status");
        mailMessage.setFrom("test@test.com");
        return mailMessage;
    }
Run Code Online (Sandbox Code Playgroud)

实现一个监听器

@Component
public class JobCompletionNotificationListener extends
        JobExecutionListenerSupport {

    private static final Logger log = LoggerFactory
            .getLogger(JobCompletionNotificationListener.class);

    @Autowired
    private JavaMailSender javaMailSender;

    @Autowired
    private SimpleMailMessage templateMessage;

    @Override
    public void afterJob(JobExecution jobExecution) {
        if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
            log.info("!!! JOB FINISHED! Time to verify the results");
            SimpleMailMessage mailMessage = new SimpleMailMessage(
                    templateMessage);
            mailMessage.setText("Job Success");
            javaMailSender.send(mailMessage);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

作业配置

@Autowired
private JobCompletionNotificationListener listener;

@Bean
public Job importUserJob(JobBuilderFactory jobs, Step s1,
        JobExecutionListener listener) {
    return jobs.get("importUserJob").incrementer(new RunIdIncrementer())
            .listener(listener).flow(s1).end().build();
}
Run Code Online (Sandbox Code Playgroud)