0
点赞
收藏
分享

微信扫一扫

springboot与异步任务+定时任务+邮件任务


1、异步任务

1、pom文件,web即可

2、@Async写在要异步执行的文件上,主启动类写上@EnableAsync

package pshdhx.task.demo.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

/**
* @Authtor pshdhx
* @Date 2021/4/120:29
* @Version 1.0
*/
@Service
public class AsyncService {

@Async //异步
public void hello() throws InterruptedException {
Thread.sleep(Long.parseLong("3000"));
System.out.println("hello...");
}
}

package pshdhx.task.demo.service.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import pshdhx.task.demo.service.AsyncService;

/**
* @Authtor pshdhx
* @Date 2021/4/120:30
* @Version 1.0
*/
@RestController
public class TaskController {
@Autowired
AsyncService asyncService;

@GetMapping("/hello")
public String hello() throws InterruptedException {
asyncService.hello();
return "success";
}
}

package pshdhx.task.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;

@SpringBootApplication
@EnableAsync
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}

2、定时任务

项目开发中经常需要执行一些定时任务,比如需要在每天凌晨的时候,分析一次前一天的日志。spring为我们提供了执行异步调度的方式提供TaskExecude TaskScheduler接口

两个注解:@EnableScheduling @Scheduled

cron表达式

字段

允许值

允许的特殊字符


0-59

,  -   *  /


0-59

, -   *  /

小时

0-23

,-  *  /

日期

1-31

, - * /  L  W  C

月份

1-12

, - * /

星期

0-7或SUN-SAT 0和7都是星期日

, - * / L C #

 

 

特殊字符

代表含义

,

枚举

-

区间

*

任意

/

步长


日/星期冲突了进行匹配

L

最后

W

工作日

C

和Calendar联系后计算过的值

#

第几个 4#2第二个星期四

package pshdhx.task.demo.service;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

/**
* @Authtor pshdhx
* @Date 2021/4/120:44
* @Version 1.0
*/
@Service
public class SchedulerService {

/**
* 0,1,2,3,4 * * * * MON-SAT 每第一秒 第二 第三 第四秒执行
* 0-4 * * * * MON-SAT 第0秒到第四秒执行 每周一到周六
* 0/4 * * * * MON-SAT 每周一到周六每隔4秒执行一次
* quartz框架 的0 代表周日 sheduler是0和7 都是代表周日
* 0 0/15 14,18 * * ? 每天14点和15点 每隔15分钟执行一次
* 0 15 10 ? * 1-6 每个月的周一到周六的10点 15分执行一次
* 0 0 2 ? * 6L 每个月的最后一个星期六2点执行一次
* 0 0 2 LW * ? 每个月的最后一个工作日两点执行一次
* 0 0 2-4 ? * 1#1 每个月的第一个星期一两点到四点期间,每个整点执行一次
* 总结: ? 是处理 日 和 星期的冲突
* *:代表汉字 每
*/
@Scheduled(cron = "0/2 * * * * *") //每两秒执行一次
public void hello(){
System.out.println("hello");
}
}

package pshdhx.task.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableAsync
@EnableScheduling
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}

邮件任务

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

springboot与异步任务+定时任务+邮件任务_asynctask

 

springboot与异步任务+定时任务+邮件任务_jobs_02

 

 

 

 

spring.mail.username=1152777670@qq.com
spring.mail.password=fjajfakdfadf
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true

 

 

 

package pshdhx.task.demo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMailMessage;
import org.springframework.mail.javamail.MimeMessageHelper;

import java.io.File;

@SpringBootTest
class DemoApplicationTests {


@Autowired
JavaMailSenderImpl javaMailSender;

//发送简单邮件
@Test
void contextLoads() {
SimpleMailMessage message = new SimpleMailMessage();
//邮件设置
message.setSubject("通知:今晚开会");
message.setText("content mail");
message.setTo("15321234531@163.com");
message.setFrom("1152777670@qq.com");
javaMailSender.send(message);
}

//发送复杂邮件
@Test
void Test2() throws Exception{
javax.mail.internet.MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setSubject("通知:今晚开会");
mimeMessageHelper.setText("<b style='color:red'>今天7:30开会</b>");
mimeMessageHelper.setTo("15321234531@163.com");
mimeMessageHelper.setFrom("1152777670@qq.com");

//上传文件
mimeMessageHelper.addAttachment("1.jpg",new File("D:/1.jpg"));
mimeMessageHelper.addAttachment("2.jpg",new File("D:/2. jpg"));

javaMailSender.send(mimeMessage);

}


}

 

举报

相关推荐

0 条评论