spring boot中开启定时任务功能很简单,只需要两个注解就可以完成,它们分别是: @EnableScheduling
和 @Scheduled
@EnableScheduling 注解标注在主启动类上即可
@SpringBootApplication @EnableScheduling public class SpringBootApplication { public static void main(String[] args) { SpringApplication.run(SpringBootApplication.class, args); } }
@Scheduled 标注在业务方法上
@Service public class ScheduledService { @Scheduled(cron = "0/4 * * * * SUN-MON") public void task() { System.out.println("业务逻辑..."); } }
表达式字段 | 字段值 | 允许特殊的字符 |
---|---|---|
秒 | 0-59 | , * - / |
分 | 0-59 | , * - / |
时 | 0-24 | , * - / |
日期 | 1-31 | , * - / ? L W C |
月份 | 1-12 | , * - / |
星期 | 0-7或SUN-SAT,0和7都表示周日 | , * - / ? L C # |
特殊字符 | 值含义 |
---|---|
, | 用于枚举值 |
* | 任意 |
- | 表示区间 |
/ | 步长 |
? | 日或者星期冲突匹配 |
L | 最后 |
W | 工作日 |
C | 和calender联系后计算过的值 |
# | 星期 ,4#2 : 表示第二个星期四 |
【0 * * * * MON-FRI】 :周一到周五每分钟执行一次 【0,1,2,3,4 * * * * SUN-MON】 : 每到秒数是 0,1,2,3,4 时执行 【0/4 * * * * * 】: 0秒启动,每隔4秒执行一次 【0 0/5 14,18 * * ?】 : 每天14点整,和18点整,每隔5分钟执行一次 【0 15 10 ? * 1-6】 : 每个月的周一至周六10:15分执行一次 【0 0 2 ? * 6L】 :每个月的最后一个周六凌晨2点执行一次 【0 0 2 LW * ?】 :每个月的最后一个工作日凌晨2点执行一次 【0 0 2-4 ? * 1#1】 : 每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次;
spring boot对邮件发送进行了整合,只需引入相关starter即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
spring: mail: username: bbb@qq.com password: cybdkhhmcqclbfac #qq邮箱授权码,qq账户设置里发短信获取 host: smtp.qq.com properties: mail.smtp.ssl.enable: true
org.springframework.mail.javamail.JavaMailSenderImpl
进行邮件发送 public class SpringBootCacheApplicationTests { @Autowired private JavaMailSenderImpl sender; /** * 发送简单邮件 */ @Test public void sendMail() { SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setSubject("通知"); mailMessage.setText("今晚7:00开会"); mailMessage.setTo("aaa@163.com"); mailMessage.setFrom("bbb@qq.com"); sender.send(mailMessage); } /** * 发送复杂邮件 * * @throws Exception */ @Test public void sendMail2() throws Exception { MimeMessage mimeMessage = sender.createMimeMessage(); //创建多文件邮件 MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true); messageHelper.setSubject("通知"); messageHelper.setText("<b style='color:red;'>今晚7:00开会</b>", true); messageHelper.setTo("aaa@163.com"); messageHelper.setFrom("bbb@qq.com"); //添加附件 messageHelper.addAttachment("nfc.png", new File("/Users/shifeifei/Desktop/nfc.png")); sender.send(mimeMessage); } }
实际开发中,在某个方法中调用某个系统的方法,但是不关心该方法的返回结果,此时可以使用异步调用。spring boot 中只需要注解 @EnableAsync
和 @Async
@SpringBootApplication @EnableAsync public class SpringBootCacheApplication { public static void main(String[] args) { SpringApplication.run(SpringBootCacheApplication.class, args); } } @Service public class AsyncService { @Async public void async(){ System.out.println("----方法同步逻辑----"); System.out.println("异步逻辑"); System.out.println("----方法同步逻辑----"); } }