异步任务
- 开启异步
@EnableAsync
@EnableAsync //开启异步任务
@SpringBootApplication
public class SpringbootAsyncDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootAsyncDemoApplication.class, args);
}
}
- 标注需要异步执行的方法
@Async
@Service
public class AsyncService {
@Async //标注这是一个异步执行的方法
public void hello() {
try {
Thread.sleep(5000);
System.out.println("这是异步执行的函数");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
邮件发送
邮件发送,在我们的日常开发中,也非常的多,Springboot也帮我们做了支持
-
邮件发送需要引入spring-boot-start-mail
-
SpringBoot 自动配置MailSenderAutoConfiguration
-
定义MailProperties内容,配置在application.yml中
-
自动装配JavaMailSender
示例
- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 配置相关信息
spring.mail.username=986707252@qq.com
spring.mail.password=你的授权密码
spring.mail.host=smtp.qq.com
# qq邮箱需要配置ssl
spring.mail.properties.mail.mail.smtp.ssl.enable=true
以上信息可以从邮箱设置中获取
3. 简单的代码示例
@SpringBootTest
class SpringbootAsyncDemoApplicationTests {
@Autowired
private JavaMailSenderImpl mailSender;
@Test
public void testMailSender1() {
//发送简单邮件内容
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom("986707252@qq.com");
simpleMailMessage.setTo("123456@qq.com");
simpleMailMessage.setText("你好呀,3413576768!");
simpleMailMessage.setSubject("Java Mail 练习Demo");
//发送邮件
mailSender.send(simpleMailMessage);
}
@Test
public void testMailSender2() throws MessagingException {
//发送带附件邮件内容
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom("986707252@qq.com");
mimeMessageHelper.setTo("123456@qq.com");
mimeMessageHelper.setText("你好呀,3413576768!");
mimeMessageHelper.setSubject("Java Mail 练习Demo");
//发送附件
mimeMessageHelper.addAttachment("这是一张图片.jpg", new File("E://壁纸//316774.jpg"));
mimeMessageHelper.addAttachment("这是一份word文档.doc",new File("C://Desktop//test.doc"));
//发送邮件
mailSender.send(mimeMessage);
}
}
定时任务
两个主要接口
TaskExecutor
接口TaskScheduler
接口
两个主要注解
@EnableScheduling
@Scheduled
cron表达式
字段 | 值 | 允许特殊字符 |
---|---|---|
秒 | 0~59 | , - * / |
分 | 0~59 | , - * / |
小时 | 0~23 | , - * / |
日期 | 1~31 | , - * / ? L W C |
月份 | 1~12 | , - * / |
星期 | 0~7 或者 SUN ~ SAT (其中0和7都是星期日) | , - * / ? L W C |
特殊字符含义:
特殊字符 | 含义 |
---|---|
, | 枚举 |
- | 区间 |
* | 任意 |
/ | 步长 |
? | 日或星期中的冲突匹配 |
L | 最后的 |
W | 工作日 |
C | 和calendar联系计算过的值 |
# | 星期,4#2 表示第2个星期三 |
常见的cron表达式
0/2 * * * * ? 表示每2秒 执行任务
0 0/2 * * * ? 表示每2分钟 执行任务
0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务
0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
0 0 12 * * ? 每天中午12点触发
0 15 10 ? * * 每天上午10:15触发
0 15 10 * * ? 每天上午10:15触发
0 15 10 * * ? 每天上午10:15触发
0 15 10 * * ? 2005 2005年的每天上午10:15触发
0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
0 15 10 15 * ? 每月15日上午10:15触发
0 15 10 L * ? 每月最后一日的上午10:15触发
0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
示例
- 创建ScheduledService
@Scheduled
@Service
public class ScheduledService {
//秒 分 时 日 月 周几
//0 * * * * MON-FRI
//注意cron表达式的用法;
@Scheduled(cron = "0 * * * * 0-7")
public void hello(){
System.out.println("hello.....");
}
- 开启定时任务
@EnableScheduling
@EnableAsync //开启异步任务
@EnableScheduling //开启定时任务
@SpringBootApplication
public class SpringbootAsyncDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootAsyncDemoApplication.class, args);
}
}
- 直接启动程序,该任务自动执行。