我有一个订单对象和联系人(与1:N关系相关。一个订单可以包含多个联系人)。所以
答案 0 :(得分:1)
<强>步骤1:强>
- 创建订单时,应用程序必须向所有已连接的联系人发送电子邮件。
醇>
在联系人表格(或类似表格)中添加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。
快乐学习: - )