springboot之异步、定时、邮件

异步任务

  1. 创建一个service包
  2. 创建一个类AsyncService
    异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。编写方法,假装正在处理数据,使用线程设置一些延时,模拟同步等待的情况;
@Service
public class AsyncService {
	public void hello(){
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("数据处理中....");
	}
}
  1. 编写controller包
  2. 编写AsyncController类
    我们去写一个Controller测试一下
@RestController
public class AsyncController {
	
	@Autowired
	AsyncService asyncService;
	
	@GetMapping("/hello")
	public String hello(){
		asyncService.hello();
		return "success";
	}
}
  1. 访问http://localhost:8080/hello进行测试,3秒后出现success,这是同步等待的情况。
  2. 给hello方法添加@Async注解;
//告诉Spring这是一个异步方法
@Async
public void hello(){
	try {
		Thread.sleep(3000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	System.out.println("数据处理中....");
}

SpringBoot就会自己开一个线程池,进行调用!但是要让这个注解生效,我们还需要在主程序上添加一个注解@EnableAsync ,开启异步注解功能;

@EnableAsync //开启异步注解功能
@SpringBootApplication
public class SpringbootTaskApplication {

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

定时任务

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

  • TaskExecutor接口
  • TaskScheduler接口

两个注解:

  • @EnableScheduling
  • @Scheduled

cron表达式:
在这里插入图片描述

  1. 创建一个ScheduledService
    我们里面存在一个hello方法,他需要定时执行,怎么处理呢?
@Service
public class ScheduledService {

	//秒 分 时 日 月 周几
	//0 * * * * MON-FRI
	//注意cron表达式的用法;
	@Scheduled(cron = "0 * * * * 0-7")
	public void hello(){
		System.out.println("hello.....");
	}
}
  1. 这里写完定时任务之后,我们需要在主程序上增加@EnableScheduling 开启定时任务功能
@EnableAsync //开启异步注解功能
@EnableScheduling //开启基于注解的定时任务
@SpringBootApplication
public class SpringbootTaskApplication {

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

邮件任务

邮件发送,在我们的日常开发中,也非常的多,Springboot也帮我们做了支持

  • 邮件发送需要引入spring-boot-start-mail
  • SpringBoot 自动配置MailSenderAutoConfiguration
  • 定义MailProperties内容,配置在application.yml中
  • 自动装配JavaMailSender
  • 测试邮件发送

演示

  1. 引入pom依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

看它引入的依赖,可以看到 jakarta.mail

<dependency>
	<groupId>com.sun.mail</groupId>
	<artifactId>jakarta.mail</artifactId>
	<version>1.6.4</version>
	<scope>compile</scope>
</dependency>
  1. 查看自动配置类:MailSenderAutoConfiguration

在这里插入图片描述
然后我们去看下配置文件

@ConfigurationProperties(
	prefix = "spring.mail"
)
public class MailProperties {
	private static final Charset DEFAULT_CHARSET;
	private String host;
	private Integer port;
	private String username;
	private String password;
	private String protocol = "smtp";
	private Charset defaultEncoding;
	private Map<String, String> properties;
	private String jndiName;
}
  1. 配置文件:
spring.mail.username=24736743@qq.com
spring.mail.password=yhkrgtqwbnrcbhcj
spring.mail.host=smtp.qq.com
# qq需要配置ssl
spring.mail.properties.mail.smtp.ssl.enable=true
  1. Spring单元测试
@Autowired
JavaMailSenderImpl mailSender;
@Test
public void contextLoads() {
	//邮件设置1:一个简单的邮件
	SimpleMailMessage message = new SimpleMailMessage();
	message.setSubject("通知-明天不上班");
	message.setText("今晚7:30开会");
	message.setTo("xxx@qq.com");
	message.setFrom("yyy@qq.com");
	mailSender.send(message);
}
@Test
public void contextLoads2() throws MessagingException {
	//邮件设置2:一个复杂的邮件
	MimeMessage mimeMessage = mailSender.createMimeMessage();
	MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
	helper.setSubject("通知-明天不上班");
	helper.setText("<b style='color:red'>今天 7:30来开会</b>",true);
	//发送附件
	helper.addAttachment("1.jpg",new File(""));
	helper.addAttachment("2.jpg",new File(""));
	helper.setTo("xxx@qq.com");
	helper.setFrom("yyy@qq.com");
	mailSender.send(mimeMessage);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值