定时任务

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、实验:在用户的用户卡过期前一天发送邮件提醒

以上是关于定时任务的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot的定时任务

SpringBoot的定时任务

SpringBoot的定时任务

spring实现动态定时任务

数据库定时执行sql mysql定时任务 event 执行定时任务 和sql server定时任务 作业执行定时任务

Linux设置定时任务