SpringBoot 三大任务

本篇主要讲:

  1.  JMS邮件发送
  2.   Async异步任务
  3.   Scheduled定时任务


Java中常见 3 种任务
1. 在我们做项目时常常会用到邮件发送,比如说验证码,反馈用户信息等等,这时就会用到JMS邮件发送。
2. 而同步发送邮件,前台会一直响应直到邮件发送完成,这就给用户造成了很不好的使用体验,所以就需要使用到 Async 邮件异步发送,后台开启新的线程单独用于邮件发送,不会拖慢响应时间。
3. 关于定时任务,我们常常在凌晨需要自动保存昨天 redis 缓存库的数据或者更新一些数据,那么 Scheduled 定时任务就可以完成。这些其实SpringBoot都给我们提供了对应的支持,我们上手使用十分的简单,只需要开启一些注解支持,配置一些配置文件即可!那我们来看看吧~

(一)JMS邮件发送 

 1. Springboot 的邮件发送是非常简单的,只需要在 pom.xml 中导入 mail 依赖。

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

2. 在QQ邮箱电脑端开启 POP3/SMTP 服务,如下 :

        设置==》账户==》往下翻,点击右边开启第一个服务 ==》点击生成授权码

​​​​​​​

 

  3. 配置 yml 文件 如下:

spring:
  mail:
    default-encoding: UTF-8
    host: smtp.qq.com(可以是 smtp.163.com 等等)
    protocol: smtp
    username: 自己的邮箱
    password: 生成的授权码(注意:不是自己的QQ密码)
  smtp:
    auth: true
    starttls:
      enable: true
      required: true

4. 下面是具体邮件发送代码:

//1. 发送简单文本邮件(为方便项目,下面是我写的工具类,后面直接在service中调用)
	
public void sendMail(String title, String content, String to, JavaMailSender mailSender){
        String from="xxxxxx";  //自己发邮件的邮箱
        try{
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(title);
            helper.setText(content,true); //加上true表示可以附带html内容,不加则表示简单文本
            try{
                mailSender.send(message);
                log.info("发送成功");
            }catch (Exception es){
                log.error("发送失败");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

//调用
String title = "xxxx";
String to = users.getEmail();
String content = "恭喜你注册成功!<br>" + "为你生成的随机密码为: " + pwd + "<br><span>请记录好,以便下次密码登录。</span>";
sendEmail.sendMail(title, content, to, mailSender);

2.发送html邮件
	
public void sendHtmlMail(String to,String subject, String content,JavaMailSender mailSender) throws MessagingException {
	String from="xxxx";
	MimeMessage mimeMessage = mailSender.createMimeMessage();
	MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
	helper.setFrom(from;
	helper.setTo(to);
	helper.setSubject(subject);
	helper.setText(content,true);
	try{
		mailSender.send(mimeMessage);
		log.info("发送成功");
	}catch (Exception es){
		log.error("发送失败");
	}
}
					   
//调用
String title="xxxxxxxx";
String to=message1.getEmail();
//下面是html需要的数据
Context context = new Context();
context.setVariable("usernickname",message1.getNickname());
context.setVariable("usercontent",message1.getContent());
//结合Thymeleaf模板引擎,"hostToUser"是要发送的hostToUser.html文件
String process=templateEngine.process("hostToUser",context);
try {
	sendEmail.sendHtmlMail(to,title,process,mailSender);
	log.info("回复邮箱成功");
} catch (MessagingException e) {
	e.printStackTrace();
	log.error("回复邮箱失败");
}

(二)Aynsc 异步任务

1. 在启动类加上注解

@EnableAsync//开启异步注解功能
@EnableScheduling//开启定时任务注解功能
@SpringBootApplication
public class MyApplication {

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

2. 在方法上加上注解(这里我就用异步发送邮件为例)

    @Async
    public void sendMail(String title, String content, String to, JavaMailSender mailSender){
        String from="xxxx";
        try{
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(title);
            helper.setText(content,true);
            try{
                mailSender.send(message);
                log.info("发送成功");
            }catch (Exception es){
                log.error("发送失败");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

(三)定时任务

 1. 定时任务的使用场景入戏下:

  • 类似凌晨12点,定时执行日志输出
  • 某一个时间点,定时举办商品折扣的互动弄
  • 利用定时任务实现某一个时间点,执行某一个业务代码。

2. 注解:

  • @EnableScheduling 表示:开启定时功能的注解(加在启动类Main()方法上)
  •  @Scheduled 表示:表示什么时候执行异步任务(里面涉及了:Cron表达式)

3. 使用:

@EnableAsync//开启异步注解功能
@EnableScheduling//开启定时任务注解功能
@SpringBootApplication
public class MyApplication {

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

4. 在方法上使用:
     
     * 1.1 Cron表达式
     *      -->Cron表达式从左到右分别表示:
     *      秒 分 时 日 月 周几
     * 1.2 Cron表达式讲解
     *     30 15 10 * * ? ==》表示每天的10点15分30秒执行一次
     *     30 0/5 10,18 * * ? ==》表示每天10点和18点,每隔五分钟执行一次
     *     0 15 10 ? * 1-6  ==》每个月的周一到周六10点15分,执行一次
     *     0 0 12 * * ? ==》每天中午12点执行一次
     *     0 15 10 15 * ? ==》每个月15号的上午10点15分执行一次
     *     0 15 10 L * ? ==》每个月最后一天的上午10点15分执行一次
     *     0/2 * * * * ? ==》每隔两秒执行一次
     *     --->具体更多Cron执行的表达式可网上搜索!
     

@Service
public class ScheduledService {

    @Scheduled(cron = "0/2 * * * * ?")
    public void testScheduledTask(){
        System.out.println("testScheduledTask,被执行了!");
    }
}

 以上就是三大java任务,如有疑问欢迎在评论区提出。

也可以去我的个人博客 :~ 欢迎来到我的小栈 ~   访问留言。电脑访问效果更好哦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值