前段时间因为公司用了定时任务,所以写了2篇定时任务的文章,一篇是正常如何在Springboot 编程中如何去使用quartz ,第二篇就是 正常业务性的增删改查,今天我们来看下如何使用 quartz 去定时给女朋友发邮件 ,结尾会放上完整代码
- Springboot 在Java使用 定时任务
- Springboot 使用quartz CRUD
首先你是不是要发邮件,那你就需要用到Springboot 整合邮件 ,导入下面三个依赖,当然如果你还想把给女朋友发的邮件存数据库 你还要加一个 MyBATIS 和 Mysql
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId>
<version>1.6.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
我们导入好依赖之后
配置授权码
接下来需要配置一下 yam
# 配置你发邮件的 账号
spring.mail.username=2509919428@qq.com
# 注意 这里不是密码 ,是授权码
spring.mail.password=oqkesvkbzromecje
spring.mail.host=smtp.qq.com
#开启加密规则
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.password
上面的 这一项不是密码 是授权码
这里我们以QQ邮箱为例 ,你需要得到一个 授权码
然后咱们发送邮件之后, 就可以了
配置任务
要使用定时任务,我们就需要定义任务 ,不懂的小伙伴可以去看我之前的文章,这里我们简单搞下
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Date;
@Slf4j
@Component
public class MailConfig {
@Autowired
JavaMailSenderImpl javaMailSender;
@Scheduled(cron = "0/7 * * * * ?")
@Bean
public void loadBean() throws MessagingException {
log.info("测试发送 邮件 ---------》 " + new Date());
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("hello byc");
helper.setText("<b style='color:red'>测试一个复杂邮件</b>", true);
helper.addAttachment("1.jpg", new File("D:\\Computer\\图片\\Snipaste_2023-02-11_14-47-17.png"));
helper.setTo("2509919428@qq.com");
helper.setFrom("2509919428@qq.com");
javaMailSender.send(mimeMessage);
}
}
由于我们之前导入了依赖,所以可以直接用 MimeMessage 去发送邮件 ,上面的
@Scheduled(cron = "0/7 * * * * ?")
这就是核心,我们标注了这个注解就相当于 这个方法可以定时发送
MimeMessageHelper : 这个是发送邮件的复杂对象,我们可以看到 下面定义了 发送的内容 以及 发送的字体颜色, 还有图片 ,我们可以看到
- 格式
/**
* 在特定的时间执行
* cron表达式
* (1)0/2 * * * * ? 表示每2秒 执行任务
* (1)0 0/2 * * * ? 表示每2分钟 执行任务
* (1)0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务
* (2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
* (3)0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作
* (4)0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
* (5)0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
* (6)0 0 12 ? * WED 表示每个星期三中午12点
* (7)0 0 12 * * ? 每天中午12点触发
* (8)0 15 10 ? * * 每天上午10:15触发
* (9)0 15 10 * * ? 每天上午10:15触发
* (10)0 15 10 * * ? 每天上午10:15触发
* (11)0 15 10 * * ? 2005 2005年的每天上午10:15触发
* (12)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
* (13)0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
* (14)0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
* (15)0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
* (16)0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
* (17)0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
* (18)0 15 10 15 * ? 每月15日上午10:15触发
* (19)0 15 10 L * ? 每月最后一日的上午10:15触发
* (20)0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
* (21)0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
* (22)0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
* */
接下来我们在Springboot 项目中加入注解
/**
* 开启异步注解的功能
* 开启定时任务的注解
*
* @author 全栈小刘
*/
@EnableScheduling
@EnableAsync
@SpringBootApplication
public class Demo4Application {
public static void main(String[] args) {
SpringApplication.run(Demo4Application.class, args);
}
}
完整项目结构 ,当然 你也加一套增删改查进去,例如输入谁的邮箱开启定时任务 ,这样就会比枯燥的代码有趣许多
源码地址
下载好代码之后记得修改授权码尝试一下