使用 maven 创建 SpringBoot 项目,引入 Web 场景启动器。

异步任务

1、编写异步服务类,注册到 IoC 容器:

package zze.springboot.task.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class AsyncService {
    @Async // 标识方法将会异步执行
    public void hello() {
        try {
            Thread.sleep();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("hello");
    }
}

zze.springboot.task.service.AsyncService

2、使用注解开启异步任务支持:

package zze.springboot.task;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;

@EnableAsync // 开启异步任务支持
@SpringBootApplication
public class TaskApplication {

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

}

zze.springboot.task.TaskApplication

3、编写控制器测试:

package zze.springboot.task.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import zze.springboot.task.service.AsyncService;

@RestController
public class AsyncController {

    @Autowired
    private AsyncService asyncService;

    @GetMapping("/hello")
    public String testAsyncHello(){
        asyncService.hello();
        return "执行完毕";
        /*
        访问 localhost:8080/hello
            a、立即返回了 “执行完毕”,并没有因为 asyncService.hello() 方法中的线程 sleep 等待 3 秒。
            b、3 秒后控制台输出 hello
        OK,异步任务执行成功
         */
    }
}

zze.springboot.task.controller.AsyncController

定时任务

1、编写定时任务类,使用 Cron 表达式指定任务执行时机,注册到 IoC 容器:

package zze.springboot.task.service;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;

@Service
public class ScheduleService {
    @Scheduled(cron = "*/3 * * * * ?")  // 编写 cron 表达式,每 3 秒执行一次
    public void test(){
        Date now = new Date();
        SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
        System.out.println(timeFormat.format(now));
    }
}

zze.springboot.task.service.ScheduleService

2、使用注解开启定时任务支持:

package zze.springboot.task;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableScheduling // 开启定时任务支持
@SpringBootApplication
public class TaskApplication {

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

}

zze.springboot.task.TaskApplication

3、启动项目测试:

hello at ::
hello at ::
hello at ::
hello at ::
/*
每间隔 3 秒控制台会执行 hello 方法
*/

test

SpringBoot 中的定时任务 Cron 表达式与任务调度框架 Quartz 的 Cron 表达式规则相似,可参考【Quartz 表达式】。

但它们有一处区别是:

  • SpringBoot 任务的 Cron 表达式中星期部分 1-6 为周一到周六,0 和 7都为周日。
  • Quartz 框架的 Cron 表达式中星期部分 1-7 为周日到周六。

邮件任务

邮件的自动配置类为 org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration 。

下面以 QQ 邮箱给 GMail 邮箱发送邮件为例。

1、引入 Mail 场景启动器:

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

2、获取 qq 邮箱授权码,登录进入 qq 邮箱,进入设置,选择账户,选择生成授权码:

3、邮箱相关配置:

spring.mail.username=632404164@qq.com
// 使用生成的授权码
spring.mail.password=nffutccjfabdbchc
spring.mail.host=smtp.qq.com

# qq 邮箱需要开启 ssl
spring.mail.properties.mail.smtp.sll.enable=true

application.properties

4、测试:

package zze.springboot.mail;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.test.context.junit4.SpringRunner;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MailApplicationTests {

    @Autowired
    JavaMailSender javaMailSender;

    // 发送普通文本内容
    @Test
    public void test1() {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        // 设置邮件标题
        mailMessage.setSubject("标题");
        // 设置邮件内容
        mailMessage.setText("hello");

        mailMessage.setFrom("632404164@qq.com");
        mailMessage.setTo("zhangzhongen326@gmail.com");
        javaMailSender.send(mailMessage);

    }

    // 发送 html 内容带附件
    @Test
    public void test2() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
        // 设置标题
        mimeMessageHelper.setSubject("标题");
        // 设置内容
        mimeMessageHelper.setText("<font color='red'>hello</font>",true);

        // 设置附件,可设置多个
        mimeMessageHelper.addAttachment("1.jpg", new File("C:\\Users\\Administrator\\Desktop\\1mail.png"));

        mimeMessageHelper.setFrom("632404164@qq.com");
        mimeMessageHelper.setTo("zhangzhongen326@gmail.com");
        javaMailSender.send(mimeMessage);

    }

}

test

java框架之SpringBoot(14)-任务的更多相关文章

  1. java框架之SpringBoot(1)-入门

    简介 Spring Boot 用来简化 Spring 应用开发,约定大于配置,去繁从简,just run 就能创建一个独立的.产品级别的应用. 背景: J2EE 笨重的开发.繁多的配置.低下的开发效率 ...

  2. java框架之SpringBoot(2)-配置

    规范 SpringBoot 使用一个全局的配置文件,配置文件名固定为 application.properties 或 application.yml .比如我们要配置程序启动使用的端口号,如下: s ...

  3. java框架之SpringBoot(3)-日志

    市面上的日志框架 日志抽象层 日志实现 JCL(Jakarta Commons Logging).SLF4J(Simple Logging Facade For Java).JBoss-Logging ...

  4. java框架之SpringBoot(4)-资源映射&thymeleaf

    资源映射 静态资源映射 查看 SpringMVC 的自动配置类,里面有一个配置静态资源映射的方法: @Override public void addResourceHandlers(Resource ...

  5. java框架之SpringBoot(5)-SpringMVC的自动配置

    本篇文章内容详细可参考官方文档第 29 节. SpringMVC介绍 SpringBoot 非常适合 Web 应用程序开发.可以使用嵌入式 Tomcat,Jetty,Undertow 或 Netty ...

  6. java框架之SpringBoot(15)-安全及整合SpringSecurity

    SpringSecurity介绍 Spring Security 是针对 Spring 项目的安全框架,也是 Spring Boot 底层安全模块默认的技术选型.它可以实现强大的 Web 安全控制.对 ...

  7. java框架之SpringBoot(16)-分布式及整合Dubbo

    前言 分布式应用 在分布式系统中,国内常用 Zookeeper + Dubbo 组合,而 SpringBoot 推荐使用 Spring 提供的分布式一站式解决方案 Spring + SpringBoo ...

  8. Java - 框架之 SpringBoot 攻略day01

          Spring-Boot 攻略 day01 spring-boot   一. 基本配置加运行   1. 导入配置文件(pom.xml 文件中)   <parent> <gr ...

  9. 【java框架】SpringBoot(5)--SpringBoot整合分布式Dubbo+Zookeeper

    1.理论概述 1.1.分布式 分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像单个系统. 由多个系统集成成一个整体,提供多个功能,组合成一个板块,用户在使用上看起来是一个服务.(比如淘宝网 ...

随机推荐

  1. 很烦人的maven和gradle的jar缓存

    1. 起因 a. 最近在学习大数据相关东西,自然就少不免去操作linux系统,更别说不敲命令 b. 然而那个配置软件时,很经常使用ln -s为一个软件目录(带着版本或者其他信息的长命名)创建别名(软连 ...

  2. [HDFS Manual] CH7 ViewFS Guide

    ViewFS Guide ViewFS Guide 1 介绍 2. The Old World(Prior to Federation) 2.1单个Namenode Clusters 2.2 路径使用 ...

  3. 通过JS页面唤醒app(安卓+ios)

    var browser = { versions: function () { var u = navigator.userAgent, app = navigator.appVersion; ret ...

  4. SQL server 在附加数据库后,数据库总是变成了只读

    1.  要把数据库文件的属性改了 右键点击两个文件的属性--安全--添加--立即查找--找everyone这个用户把他的权限都勾上 确定再附加就OK. 2. 在数据库管理器中对数据库点右键属性,然后切 ...

  5. Win2008R2+Apache+PHP+Tomcat配置

    一.VC运行库 对于Apache和PHP,在Windows上运行的话都需要对应VC运行库的支持,即Apache.PHP和VC运行库这三者的版本必须相对应,这就会带来很多问题,比如下了较新的Apache ...

  6. java Illegal unquoted character ((CTRL-CHAR, code X)): has to be escaped using backslash to be included in string value

    今天在同步日志到ES的时候出现转换Json后 存到es中报这个错. Illegal unquoted character ((CTRL-CHAR, code X)): has to be escape ...

  7. Python __all__变量用法

    Python中一个py文件就是一个模块,“__all__”变量是一个特殊的变量,可以在py文件中,也可以在包的__init__.py中出现. 1.在普通模块中使用时,表示一个模块中允许哪些属性可以被导 ...

  8. vmare 往 virtualbox迁移

    vmare实在太卡了.抓狂. 于是想迁移到virtualbox观察下. 谷歌了下方案,发现众说纷纭. 有操作超级复杂的,比如:http://stackoverflow.com/questions/69 ...

  9. Number()、parseInt()和parseFloat()的区别

    JS中Number().parseInt()和parseFloat()的区别 三者的作用: Number(): 可以用于任何数据类型转换成数值: parseInt(): 函数可解析一个字符串,并返回一 ...

  10. PHP(层叠样式表,写法分类),选择器的种类)

    表单元素的取值怎么取  对应的属性值都有哪些? <span> 标签被用来组合文档中的行内元素. 注释:span 没有固定的格式表现.当对它应用样式时,它才会产生视觉上的变化. style ...