定时任务
1、常用定时任务
(1)Java自带的java.util.Timer类
timer:配置比较麻烦,时间延后问题
timertask:不推荐
(2)Quartz框架
配置更简单(SSM)
xml或者注解
(3)SpringBoot使用注解方式开启定时任务
启动类里面 @EnableScheduling开启定时任务,自动扫描
定时任务业务类 加注解 @Component被容器扫描
定时执行的方法加上注解 @Scheduled(fixedRate=2000) 定期执行一次
2、定时实例:2秒定时打印当前时间
(1)每2秒定时打印当前时间,测试
@Component
public class TestTask {
@Scheduled(fixedRate = 2000) // 两秒执行一次
public void sum() {
if(stop==true){
return;
}
System.out.println("当前时间:" + new Date());
}
}
(2)可以控制开始和停止
@Component
public class TestTask {
private boolean stop;
public TestTask() {
super();
stop=false;
}
@Scheduled(fixedRate = 2000) // 两秒执行一次
public void sum() {
if(stop==true){
return;
}
System.out.println("当前时间:" + new Date());
}
public String stopCron() {
if (stop ==false) {
stop=true;
}
System.out.println("DynamicTask.stopCron()"+stop);
return "stopCron";
}
public String startCron() {
if (stop ==true) {
stop=false;
}
System.out.println("DynamicTask.startCron()"+stop);
return "startCron";
}
}
@RestController
@RequestMapping(value="/api/v1/test")
public class TestController {
@Autowired
TestTask testTask;
@RequestMapping("/stopCron")
public String stopCron() {
return testTask.stopCron();
}
@RequestMapping("/startCron")
public String startCron() {
return testTask.startCron();
}
}
3、定时任务表达式配置
cron 定时任务表达式 @Scheduled(cron="*/1 * * * * *") 表示每秒
fixedRate: 定时多久执行一次(上一次开始执行时间点后xx秒再次执行;)
fixedDelay: 上一次执行结束时间点后xx秒再次执行
fixedDelayString: 字符串形式,可以通过配置文件指定
每天的下午3点30分执行
@Scheduled(cron = "0 30 15 * * ?")
public void sum() {
if(stop==true){
return;
}
System.out.println("当前时间:" + new Date());
}
4、邮件开启POP3/SMTP服务:
注意开启完之后,QQ邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原始的邮箱密码,这样可以避免使用明文密码。
5、springboot整合邮件发送
(1)pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
(2)application.properties
spring.mail.host=smtp.qq.com
spring.mail.username=249811636@qq.com
spring.mail.password=****************
(3)发送邮件接口
@RestController
@RequestMapping(value="email")
public class EmailController {
@Value("${spring.mail.username}")
private String sendName;
@Autowired
private JavaMailSender javaMailSender;
@RequestMapping("send")
public JsonData sendMail03(){
MimeMessage mMessage=javaMailSender.createMimeMessage();//创建邮件对象
MimeMessageHelper mMessageHelper;
Properties prop = new Properties();
try {
mMessageHelper=new MimeMessageHelper(mMessage,true);
mMessageHelper.setFrom(sendName);//发件人邮箱
mMessageHelper.setTo("249811636@qq.com");//收件人邮箱
mMessageHelper.setSubject("会员卡即将到期提醒");//邮件的主题
mMessageHelper.setText("会员卡即将到期提醒");
javaMailSender.send(mMessage);//发送邮件
} catch (MessagingException e) {
e.printStackTrace();
return new JsonData(0, "邮件发送失败", null);
}
return new JsonData(0, "邮件发送成功", null);
}
}
(4)测试