定时任务
Posted addddui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时任务相关的知识,希望对你有一定的参考价值。
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)测试
6、实验:在用户的用户卡过期前一天发送邮件提醒
以上是关于定时任务的主要内容,如果未能解决你的问题,请参考以下文章