欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Springboot与任务-笔记

程序员文章站 2022-06-28 10:08:59
字段允许值允许的特殊字符秒0-59, - * /分0-59, - * /小时0-23, - * /日期1-31, - * ? / L W C月份1-12, - * /星期0-7或SUN-SAT 0,7是SUN, - * ? / L C #...

一、异步任务

在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的,但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务。

其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题。

两个注解:

  • @Async : 在需要异步执行的方法上标注注解
  • @EnableAsync : 在主类上标注开启异步任务支持

步骤 :

第一步 : 在springboot的入口类头添加 @EnableAsync 开启异步注解功能。

@SpringBootApplication
@EnableAsync // 开启异步注解功能
public class SpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}

第二步 : 在需要异步执行的方法上加上 @Async 实现异步执行。

通过controller调用service中的异步方法测试。

	@Async
    public void hello() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("处理数据中");
    }

二、定时任务

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

两个注解:

  • @Scheduled : 标注在执行的方法上,并制定cron属性
  • @EnableScheduling : 标注在主类,开启对定时任务支持
	@Service
	public class ScheduledService {
	    /**
	     * second(秒), minute(分), hour(时), day of month(日), month(月), and day of week(周几).
	     * {@code "0 * * * * MON-FRI"}
	     */
//    @Scheduled(cron = "0 * * * * MON-FRI")
//    @Scheduled(cron = "0,1,2,3,4 * * * * MON-SAT") // 枚举
//    @Scheduled(cron = "0-4 * * * * MON-SAT") // 区间
    @Scheduled(cron = "0/4 * * * * MON-SAT") // 步长 从0秒启动,没4秒执行一次
	    public void hello() {
	        System.out.println("hello...");
	    }
	}

cron表达式

second(秒), minute(分), hour(时), day of month(日), month(月), day of week(周几)

举例 :
0 0/5 14,18 * * ? : 每天14点整,和18点整,每隔5分钟执行一次
0 15 10 ? * 1-6 :每个月的周一至周六10:15分执行一次
0 0 2 ? * 6L : 每个月的最后一个周六凌晨2点执行一次
0 0 2 LW * ? : 每个月的最后一个工作日凌晨2点执行一次
0 0 2-4 ? * 1#1 : 每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次;

字段 允许值 允许的特殊字符
second(秒) 0-59 , - * /
minute(分) 0-59 , - * /
hour(时) 0-23 , - * /
day of month(日) 1-31 , - * ? / L W C
month(月) 1-12 , - * /
day of week(周几) 0-7或SUN-SAT 0,7是SUN(即0、7代表周日,1-6代表周一到周六) , - * ? / L C #
特殊字符 代表含义
,(逗号) 枚举
- 区间
* 任意
/ 步长
日/星期冲突匹配
L 最后
W 工作日
C 和calendar联系后计算过的值
# 星期,4#2,第2个星期四

三、邮件任务

邮件发送需要引入spring-boot-starter-mail,Spring Boot自动配置MailSenderAutoConfiguration,我们可以通过定义MailProperties内容,在application.yml全局配置文件中配置,使用自动装配的JavaMailSender组件来进行邮件发送。

步骤:

1.首先导入spring-boot-starter-mail依赖

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

2.全局配置文件中配置属性

spring.mail.username=邮箱账号
spring.mail.password=授权码
spring.mail.host=smtp.qq.com // 我使用qq邮箱

3.自动装配JavaMailSenderImpl对象

	@Autowired
    JavaMailSenderImpl mailSender;

4.1.简单的邮件发送

@Test
    void contextLoads() throws MessagingException {
        // 简单的邮件发送
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        // 邮件设置
        mailMessage.setSubject("标题通知-java学习安排");
        mailMessage.setText("学无止境,欲速则不达");

        mailMessage.setTo("xxx@163.com");
        mailMessage.setFrom("xxx@qq.com");
        mailSender.send(mailMessage);
    }

4.2.复杂的邮件发送

  • new MimeMessageHelper(message,true)
    设置multipart=true,开启对内联元素和附件的支持
  • helper.setText(“xxxx”,true) 设置 html=ture
    即设置content type=text/html,默认为text/plain
@Test
    void contextLoads() throws MessagingException {
        // 创建一个复杂的消息邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setSubject("标题通知-java学习安排");
        helper.setText("<b>学无止境</b><br>" +
                "<span style = 'color:red'>欲速则不达</span>",
                true); // 设置为true,则告诉他我写的是html

        helper.setTo("xxx@163.com");
        helper.setFrom("xxx@qq.com");

        // 上传文件
        helper.addAttachment("1.jpg", new File("C:\\...\\...\\...\\...\\21.png"));
        helper.addAttachment("2.jpg", new File("C:\\...\\...\\...\\...\\2.png"));
        mailSender.send(mimeMessage);
    }

本文地址:https://blog.csdn.net/weixin_44414492/article/details/112003157

相关标签: spring boot java