一、Quartz定时器
定时器Quartz是一个完全由Java编写的开源任务调度框架,通过触发器trigger设置作业定时运行规则、控制作业的运行时间。Quartz定时器能完成 定时发送信息、生成报表等一系列 规律性任务。
1.依赖引入
<!--集成定时任务-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
2.定时器配置文件
创建定时器方法有俩种:一是使用XML配置文件的方式;二是使用注解方式,此处使用注解方式,因为简单。
创建定时器类,注意注解,@Configurable,相当于将该类编成XML配置文件,能别SpringBoot扫描初始化,
@EnableScheduling通过在配置类中注解来开启对对计划任务的支持,再在执行计划任务的方法上注解@Scheduled,声明这是一个计划任务
而注解中cro表达式写执行时机。
/**
* @program: demo
* @description: 发送邮件定时器
* @author: wllmp520
* @create: 2019-06-17 16:28
*/
@Component
@Configurable
@EnableScheduling
public class SendMailQuartz {
@Autowired
private SendJunkMailService sendJunkMailService;
private static final Logger logger= LogManager.getLogger(SendMailQuartz.class);
@Scheduled(cron = "*/5 * * * * *")
public void sendEmailToHaiS(){
sendJunkMailService.sendMail("10000@qq.com");
logger.info("lz正在接收....");
}
}
二、Email
邮件服务,免费,SpringBoot自动化配置好。
1、依赖引入
<!--集成邮件Email-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、配置文件配置参数,注意授权码是去邮箱开启获取的,可百度163邮箱获取授权码
#####Email配置=====================
#邮箱主机
spring.mail.host=smtp.163.com
##用户名
spring.mail.username=xxx@163.com
#设置授权码
spring.mail.password=password
##默认编码
spring.mail.default-encoding=UTF-8
spring.mail.properties.smtp.auth=true
spring.mail.properties.smtp.starttls.enable=true
spring.mail.properties.smtp.starttls.required=true
3.配置发送短信服务类,用到了JavaMailSender类,目前了解比较少,不多做阐述。
/**
* @program: demo
* @description: 邮件发送服务实现
* @author: wllmp520
* @create: 2019-06-17 16:59
*/
@Service
public class SendJunkMailServiceImpl implements SendJunkMailService {
@Autowired
JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String from;
private static final Logger logger= LoggerFactory.getLogger(SendJunkMailServiceImpl.class);
@Override
public boolean sendMail(String receive) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
try {
message.setFrom(from);
message.setSubject("比心心");
message.setTo(receive);
message.setText("富士X-A20\n" +
"\n" +
"不到两千元的价格对于一款微单相机来说还是非常超值的。富士X-A20不仅拥有更好的画质表现,同时在易用性上也值得称道,翻转触控屏幕和USB充电功能都是非常不错的。");
this.mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
logger.error("sendMail error receiver=%s",receive,e);
return false;
}
return true;
}
}