我是春天的新人。请帮我明白我必须使用(TaskExecutor接口,@ Sceduled,石英Sceduler,...)来实现这个问题:春季的任务执行和调度
我有一个订单对象和联系人与1连接(:N关系。一个订单可以有很多联系人)。所以
- 当创建订单时,应用程序必须发送电子邮件到所有连接的联系人。
- 当新联系人最近创建并连接到已创建的订单时,此联系人还必须收到电子邮件。
- 当订单过期时,2天后联系人必须收到电子邮件。
我是春天的新人。请帮我明白我必须使用(TaskExecutor接口,@ Sceduled,石英Sceduler,...)来实现这个问题:春季的任务执行和调度
我有一个订单对象和联系人与1连接(:N关系。一个订单可以有很多联系人)。所以
第一步:
- 当创建订单,应用程序可以将电子邮件发送到所有连接的联系人。
将2个新列添加到联系人表(或类似表)中。
is_Send_Email - >布尔类型
Email_Send_Time - >时间戳/日期类型
虽然插入新行(在创建新的命令),设置is_Send_Email = 真和Email_Send_Time = 当前时间。 for 全部相关联系人。
2.当新联系人最近创建并连接到已创建的订单时,此联系人还必须收到电子邮件。
当将联系人添加到订单,设置is_Send_Email =真和Email_Send_Time =当前时间(同时插入)为新添加的联系人。
3.当订单过期时,2天后联系人必须收到电子邮件。
设置is_Send_Email =真为所有在到期为了接触和Email_Send_Time =当前时间+ 2天。
第二步:
在配置类使用@EnableScheduling启用调度。
@Configuration
@EnableScheduling
public class AppConfig {
@Bean
public MyBean bean() {
return new MyBean();
}
}
第三步:
使用@Scheduled注解以指定的时间间隔调用你的邮件发送方式。
作为每弹簧documentation ..
34.4.2的@Scheduled注释
的@Scheduled注释可以被添加到方法与扳机 元数据。例如,以固定延迟每隔5秒钟调用以下方法,这意味着从每次前面调用的完成时间开始测量时间段为 。
@Scheduled(fixedDelay=5000) public void doSomething() {
// something that should execute periodically
}
如果以固定速率执行是期望的,简单地改变注释中指定的属性名 。在每个 调用的连续开始时间之间测量,每隔 执行以下操作。
@Scheduled(fixedRate=5000) public void doSomething() {
// something that should execute periodically
}
对于固定延迟和固定速率的任务,初始延迟可以是 指定指示该方法的 第一次执行之前等待的毫秒数。
@Scheduled(initialDelay=1000, fixedRate=5000) public void
doSomething() {
// something that should execute periodically
}
如果简单定期调度是不够的表达,则可以设置一个cron 表达。例如,以下将仅在工作日执行 。
@Scheduled(cron="*/5 * * * * MON-FRI") public void doSomething() {
// something that should execute on weekdays only
}
[提示]可以另外使用区属性来指定时间 区,其中 cron表达式将得到解决。 请注意,计划为 的方法必须具有无效返回,并且不能指望任何参数。如果 该方法需要与应用程序上下文中的其他对象进行交互,那么通常会通过依赖注入来提供这些方法。
第四步:
检查,以表中的每个记录,如果is_Send_Email = TRUE一个记录,然后触发电子邮件为订单/联系方式什么的。
如何使用Spring发送电子邮件,您可以参考这个article。
快乐学习:-)
要使用SpringBoot一个还可以依靠[这个库(https://github.com/ozimov/spring-boot-email-tools) – JeanValjean
@Mary发送电子邮件,请接受这个答案,如果有帮助的话。 –