Spring中的任务执行和调度

时间:2016-07-01 15:15:36

标签: java spring

我是春天的新人。请帮助我理解我必须使用的东西(TaskExecutor,@ Sceduled,Quarts Sceduler,...)来实现这个问题:

我有一个订单对象和联系人与1:N关系相关。一个订单可以包含多个联系人)。所以

  1. 创建订单时,应用程序必须向所有已连接的联系人发送电子邮件。
  2. 当最近创建新的联系人并将其连接到已创建的订单时,此联系人也必须收到一封电子邮件。
  3. 订单到期时,2天后联系方式需要收到电子邮件。

1 个答案:

答案 0 :(得分:1)

<强>步骤1:

  
      
  1. 创建订单时,应用程序必须向所有已连接的联系人发送电子邮件。
  2.   

在联系人表格(或类似表格)中添加2个新列。

is_Send_Email - &gt;布尔类型

Email_Send_Time - &gt;时间戳/日期类型

插入新行(创建新订单)时,为设置is_Send_Email = true 和Email_Send_Time = 当前时间。所有相关联系人。

  

2.最近创建新联系人并将其连接到已创建的订单时,此联系人也必须收到电子邮件。

在订单中添加联系人时,请为新添加的联系人设置is_Send_Email = true和Email_Send_Time =当前时间(插入时)。

  

3.订单何时到期,2天后联系方式必须收到电子邮件。

该到期订单中的所有联系人设置is_Send_Email = true,并且Email_Send_Time =当前时间+ 2天。

<强>步骤2:

在配置类中使用@EnableScheduling启用计划。

@Configuration
@EnableScheduling
public class AppConfig {

    @Bean
    public MyBean bean() {
        return new MyBean();
    }

}

第3步:

使用@Scheduled注释以特定间隔调用您的邮件发送方法。

按照春天documentation ..

  

34.4.2 @Scheduled Annotation

     

@Scheduled注释可以与触发器一起添加到方法中   元数据。

     

例如,每5个调用以下方法   具有固定延迟的秒,意味着将测量周期   从每个前一次调用的完成时间开始。

@Scheduled(fixedDelay=5000) public void doSomething() {
 // something that should execute periodically
 }
  

如果需要固定费率执行,只需更改属性名称即可   在注释中指定。每次都会执行以下操作   在每个的连续开始时间之间测量5秒   调用

@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表达式将被解析。 注意方法   schedule必须有void返回,不能指望任何参数。如果   该方法需要与Application中的其他对象进行交互   上下文,然后通常会提供这些   依赖注入。

<强>步骤4:

检查订单表中的每条记录,如果记录的is_Send_Email = true,则触发该订单/联系人的电子邮件。

如何使用Spring发送电子邮件,您可以参考article

快乐学习: - )