liujijiang

java异步任务,定时任务,邮件任务

2020.02.16

开启注解扫描

在application中开启注解扫描

//定时任务注解扫描
@EnableScheduling
//异步任务注解扫描
@EnableAsync

定时任务

private int num = 1;
    @Scheduled(cron = "0/1 * * * * 1-7")
    public void ScheduledTest(){
        System.out.println(num++);
    }


@Scheduled注解开启定时任务,参数为任务发生的时间,
参数为:秒 分 时 日 月 星期

  • 0 0 12 * * ? 每天12点触发
  • 0 15 10 ? * * 每天10点15分触发
  • 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分每分触发
  • 0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
  • 0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 每天下午的 18点到18点59分(整点开始,每隔5分触发)
  • 0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
  • 0 10,44 14 ? 3 WED 3月分每周三下午的 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 每月的第三周的星期五开始触发
  • 0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次
  • 0 11 11 11 11 ? 每年的11月11号 11点11分触发

截屏2020-02-16下午4.08.28-087731ff60f742a9b85f61a3cca5232b

截屏2020-02-16下午4.08.39-5b7ff81fb6f54c68bfd90cde6d4aad83

异步任务

  • @Async:一个方法不能调用在本类中的异步方法

假设一个方法要执行2秒钟

    public void AsyncTest1(){
        
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
System.out.println("休眠2秒---");
    }


另一个类中调用了这个方法

public void AsyncTest(){
        System.out.println("启动---");
        asyncService.AsyncTest1();
        System.out.println("终止---");
    }


没有异步任务程序会同步执行,就是按照顺序执行,休眠两秒的方法执行完了才会输出---终止---

截屏2020-02-16下午4.20.50-ec1595af504e46879cec6852ebde61cf

如果在休眠两秒的方法加上异步任务注解

@Async
    public void AsyncTest1(){
        
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
System.out.println("休眠2秒---");
    }


截屏2020-02-16下午4.32.07-b768bab1753a49868616a78356fa0c7b

程序不会等休眠方法执行完再往下执行

邮件

pom中导入依赖

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

application.yml中配置

以qq邮箱为例

  mail:
    username: xxxxxxxxxx@qq.com
    password: xxxxxxxxxx
    host: smtp.qq.com
    properties.mail.smtp.ssl.enable: true

用户名为qq邮箱
密码不是你的qq密码也不是你的qq邮箱密码,因为直接把密码写在配置中比较危险
在qq邮箱的设置中在账户设置下

截屏2020-02-16下午5.08.01-4dc6b568bc084114ba5f8917990bbb74

  • 开启并生成授权码
  • 只有开启服务才可以生成授权码

发送邮件

 MimeMessage message = mailSender.createMimeMessage();

        MimeMessageHelper messageHelper = new MimeMessageHelper(message);

        try {
            messageHelper.setSubject("jj");
            messageHelper.setText("hello word");
            messageHelper.setTo("xxxxxxxxx@163.com");
            messageHelper.setFrom("liuxiansen");
            messageHelper.addAttachment("jjboy",new File("images/1.jpg"));
        } catch (MessagingException e) {
            e.printStackTrace();
        }

        mailSender.send(message);

可以设置主题,内容,收件人,发件人,以及附件。