2016-07-01 62 views
0

我是春天的新人。请帮我明白我必须使用(TaskExecutor接口,@ Sceduled,石英Sceduler,...)来实现这个问题:春季的任务执行和调度

我有一个订单对象和联系人与1连接:N关系。一个订单可以有很多联系人)。所以

  1. 当创建订单时,应用程序必须发送电子邮件到所有连接的联系人。
  2. 当新联系人最近创建并连接到已创建的订单时,此联系人还必须收到电子邮件。
  3. 当订单过期时,2天后联系人必须收到电子邮件。

回答

1

第一步:

  1. 当创建订单,应用程序可以将电子邮件发送到所有连接的联系人。

将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

快乐学习:-)

+0

要使用SpringBoot一个还可以依靠[这个库(https://github.com/ozimov/spring-boot-email-tools) – JeanValjean

+0

@Mary发送电子邮件,请接受这个答案,如果有帮助的话。 –