springboot系列九,springboot整合邮件服务、整合定时任务调度

Easter79
• 阅读 447

一、整合邮件服务

   如果要进行邮件的整合处理,那么你一定需要有一个邮件服务器,实际上 java 本身提供有一套 JavaMail 组件以实现邮件服务器的搭建,但是这个搭建的服务器意义不大,因为你现在搭建完成了,向一些大型的站点发送一封邮件,若干小时你就会被拉黑, 如果不想拉黑彼此之间就做一个白名单即可。

   要发送邮件,首先要知道邮件服务器,相当于我们是往对方的邮件服务器发送了一个请求。再一个,要有一个发件人。所以我们先用自己的账号密码登陆邮件服务器,再用登陆的邮件服务器给目标邮箱发送一个邮件。下面以163邮件为例。

1、添加依赖

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

2、添加yml

spring:  
  mail:
    host: smtp.163.com
    port: 25
    username: xxxxxxx@163.com
    password: xxxxxxx
    properties:
      mail.smtp.auth: true
      mail.smtp.starttls.enable: true
      mail.smtp.starttls.required: true

3、发送示例

    @Resource
    private JavaMailSender javaMailSender ;
    @Test
    public void testSendMail() {
        SimpleMailMessage message = new SimpleMailMessage() ;    // 要发送的消息内容
        message.setFrom("18842688753@163.com");
        message.setTo("1065754909@qq.com");
        message.setSubject("测试邮件)");
        message.setText("好好学习,天天向上");
        this.javaMailSender.send(message);
    }

二、整合定时任务

  所有的系统开发里面定时调度绝对是一个核心的话题,对于定时调度的实现在实际开发之中可以使用:TimerTask、Quartz、 SpringTask 配置,实际上这里面最简单的配置就是 Spring 自己所提供的 Task 处理。

1、配置定时任务组件

MyTask.java

package com.example.demo.task;

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

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

@Component
public class MyTask {
    @Scheduled(fixedRate = 2000) // 采用间隔调度,每2秒执行一次
    public void runJobA() { // 定义一个要执行的任务
        System.out.println("【*** MyTaskA - 间隔调度 ***】"
                + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
                .format(new Date()));
    }
    @Scheduled(cron = "* * * * * ?") // 每秒调用一次
    public void runJobB() {
        System.err.println("【*** MyTaskB - 间隔调度 ***】"
                + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
                .format(new Date()));
    }

}

2、启动类开启定时任务

@SpringBootApplication
@Import({SmsConfig.class})
@MapperScan("com.example.*.dao")
@EnableScheduling    // 启用间隔调度
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

当前任务调度只是串行任务调度,只有一个线程在工作,也就是说所有的任务是一个一个执行的处理方式,那么如果现在有一个任务所花费的时间特别的长,则其它的任务都会积压,实际开发之中很明显这种处理是不可能存在的。

如果要想启用并行的调度处理,则一定要准备出一个线程调度池,进行一个线程调度的配置类:

3、配置线程池

package com.example.demo.task;

import java.util.concurrent.Executors;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;

@Configuration // 定时调度的配置类一定要实现指定的父接口
public class SchedulerConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // 开启一个线程调度池
        taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
    }

}

 注:如果觉得定时任务cron表达式每次初始化时已经确定了,维护起来不方便,可以考虑使用spring+quartz,把定时任务持久化到数据库中。参考:

Quartz实现数据库动态配置定时任务

点赞
收藏
评论区
推荐文章
Karen110 Karen110
2年前
赶在元旦前夕!10分钟用Python批量定制化发送元旦祝福邮件!
上一篇关于邮件的自动发送教程中,我们讲解了如何使用yagmail进行简单的邮件发送:现实生活中,如果只是发邮件给自己,像上一篇文章那样简陋的格式是可以接受的,但若要针对每个人进行邮件的定制化,群发给公司客户、内部员工、亲戚朋友,则需更加高级的邮件发送方式。我们可以通过HTML制作一封精美的元旦祝福邮件,但是邮件的内容——比如姓名、祝福语等应该怎样动态
Easter79 Easter79
2年前
sprintboot
一、邮件发送使用springboot自带的邮件系统就能实现邮件的发送,首先导入依赖:1、新建springboot项目,添加依赖<dependency<groupIdorg.springframework.boot</groupId<artifactIdspringbootstartermail
Wesley13 Wesley13
2年前
JavaMail发送和接收邮件API(详解)
一、JavaMail概述:    JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。    厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:SMTP:简单邮件传输
Easter79 Easter79
2年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Easter79 Easter79
2年前
SpringBoot使用JavaMailSender发送邮件(1)
邮件发送是一个非常常见的功能,最初Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。后来Spring中提供了JavaMailsender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。在开始之前我们需要申请开通POP3/SMTP服
Stella981 Stella981
2年前
Spring Boot demo系列(七):邮件服务
2021.2.24更新1概述SpringBoot整合邮件服务,包括发送普通的文本邮件以及带附件的邮件。2邮箱选择这里选择的是QQ邮箱作为发送的邮箱,当然也可以选择其他的邮箱,只是具体的配置不一样。使用QQ邮箱的话,需要在个人设置中开启SMTP服务:!在这里插入
Stella981 Stella981
2年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Stella981 Stella981
2年前
SpringBoot使用JavaMailSender发送邮件(1)
邮件发送是一个非常常见的功能,最初Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。后来Spring中提供了JavaMailsender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。在开始之前我们需要申请开通POP3/SMTP服
Stella981 Stella981
2年前
Azure 上通过 SendGrid 发送邮件
SendGrid是什么?SendGrid是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递。并且具有可扩充性和实时分析的能力。常见的用例有:自动回复用户的邮件定期发送信息给用户生成报表等由于使用SendGrid这样的第三方邮件服务既稳定可靠又不用自己维护邮件服务器,
Stella981 Stella981
2年前
Linuxprobe15
电子邮件系统简单邮件传输协议(SimpleMailTransferProtocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的25/TCP端口。邮局协议版本3(PostOfficeProtocol3):用于将电子邮件存储到本地主机,占用服务器的110/TCP端口。Internet消息访问协议版本4(In
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k