java - Spring Batch 电子邮件监听器
问题描述
我想将 Spring Batch 配置为在作业开始时发送电子邮件,并在作业完成或失败时发送电子邮件。我通过搜索看到了一些示例,例如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();
}
解决方案
您需要定义一个类型的 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);
}
}
希望这可以帮助。
推荐阅读
- python-3.x - 在python中将时间序列转换为日期时间格式
- vb.net - 单击 vb.net 中的单选按钮时更改按钮的背景颜色
- angular - 添加元素时如何滚动到 NgFor 中的元素底部?
- java - 如何将 HostApduService 保留为 Android 上的后台服务
- rust - 比较 RefCell 中包含的值
- javascript - 如何在 Wordpress 上延迟嵌入 YouTube 视频的 javascript?
- python - 我需要使用 Python 登录 Goodreads
- python - 从单个 2D 视频重建飞行物体的 3D 轨迹
- javascript - 正则表达式在字符串中查找图像链接
- javascript - 如何在 Angular 2+ 中更改锚点的 html 元素后设置 @ViewChild('anchor_name')?