java框架之SpringBoot(14)-任务
使用 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)-任务的更多相关文章
- java框架之SpringBoot(1)-入门
简介 Spring Boot 用来简化 Spring 应用开发,约定大于配置,去繁从简,just run 就能创建一个独立的.产品级别的应用. 背景: J2EE 笨重的开发.繁多的配置.低下的开发效率 ...
- java框架之SpringBoot(2)-配置
规范 SpringBoot 使用一个全局的配置文件,配置文件名固定为 application.properties 或 application.yml .比如我们要配置程序启动使用的端口号,如下: s ...
- java框架之SpringBoot(3)-日志
市面上的日志框架 日志抽象层 日志实现 JCL(Jakarta Commons Logging).SLF4J(Simple Logging Facade For Java).JBoss-Logging ...
- java框架之SpringBoot(4)-资源映射&thymeleaf
资源映射 静态资源映射 查看 SpringMVC 的自动配置类,里面有一个配置静态资源映射的方法: @Override public void addResourceHandlers(Resource ...
- java框架之SpringBoot(5)-SpringMVC的自动配置
本篇文章内容详细可参考官方文档第 29 节. SpringMVC介绍 SpringBoot 非常适合 Web 应用程序开发.可以使用嵌入式 Tomcat,Jetty,Undertow 或 Netty ...
- java框架之SpringBoot(15)-安全及整合SpringSecurity
SpringSecurity介绍 Spring Security 是针对 Spring 项目的安全框架,也是 Spring Boot 底层安全模块默认的技术选型.它可以实现强大的 Web 安全控制.对 ...
- java框架之SpringBoot(16)-分布式及整合Dubbo
前言 分布式应用 在分布式系统中,国内常用 Zookeeper + Dubbo 组合,而 SpringBoot 推荐使用 Spring 提供的分布式一站式解决方案 Spring + SpringBoo ...
- Java - 框架之 SpringBoot 攻略day01
Spring-Boot 攻略 day01 spring-boot 一. 基本配置加运行 1. 导入配置文件(pom.xml 文件中) <parent> <gr ...
- 【java框架】SpringBoot(5)--SpringBoot整合分布式Dubbo+Zookeeper
1.理论概述 1.1.分布式 分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像单个系统. 由多个系统集成成一个整体,提供多个功能,组合成一个板块,用户在使用上看起来是一个服务.(比如淘宝网 ...
随机推荐
- vue及ElementUI环境搭建
1. nodejs安装及npm安装 下载地址:https://nodejs.org/en/download/ 选择windows Installer 下载完成后 运行node-v8.11.1-x64. ...
- 代码注释中的专有词——TODO、FIXME和XXX
[时间:2017-09] [状态:Open] [关键词:代码注释,TODO, FIXME, XXX] 阅读开源代码时可能经常遇到TODO.FIXME.XXX的单词,通常这些都是有其特殊含义的. 中文版 ...
- python之字符串操作方法
定义及特性: 以引号(单引号,双引号,三引号)包围且不能修改 a= ' \t aBcdE fgFijDlmNopq rSt uTwxy z 123 !@# \t ' 一.判断字符串,返回bool值:F ...
- 如何查看.Net Framework版本
地址栏输入 %systemroot%\Microsoft.NET\Framework,或win+R快捷方式打开“运行”窗口,输入%systemroot%\Microsoft.NET\Framework ...
- git踩过的坑
一.git 解决fatal: Not a git repository 我用git add file添加文件时出现这样错误: fatal: Not a git repository (or any o ...
- 第四百零三节,python网站在线支付,支付宝接口集成与远程调试,
第四百零三节,python网站在线支付,支付宝接口集成与远程调试, windows系统安装Python虚拟环境 首先保证你的系统已经安装好了Python 安装virtualenv C:\WINDOWS ...
- 利用rqalpha帅选股票 1
最近股市好了,然后过了3100点后躺着赚钱已经不容易了,股票又太多,想着现在也是做这个东西,倒不如再进一步,把之前研究的量化交易利用起来. rqalpha很早就开源了,之前看过,貌似用来选股什么的很好 ...
- mysql主从复制-方案2
MySQL主从介绍 (两台机器数据同步) 主:-->binlog 从:-->relaylog 主上有一个log dump线程,用来和从的I/O线程传递binlog 从上有两个线程,其中I/ ...
- vs2010下release版本调试设置
设置在Release模式下调试的方法: 1.工程项目上右键 -> 属性 2.c++ -> 常规 -〉调试信息格式 选 程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi) ...
- Dart 语言简易教程系列
google Fuchsia系统 及 dart语言简介 在 InteIIiJ IDEA 中搭建 Dart 的开发环境 Dart Linux 开发环境搭建 Dart 语言简易教程(一) Dart 语言简 ...