zoukankan      html  css  js  c++  java
  • springboot 异步邮件服务

    目标:springboot,使用异步方式后台发送邮件。

    关键点:异步服务不能在同类里调用。

    1、mail依赖

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

    2、yml配置

    spring:
      mail:
        host: smtp.126.com
        port: 25
        username: abc99@126.com
        password: HXAABBCCBEJLSYPQ
        properties:
          mail:
            debug: false

    username:发件人邮件地址,

    password:发件人邮箱密码或者授权码

    3、代码实现

    3.1 线程池准备

    @Configuration
    @EnableAsync
    public class ThreadPoolConfig {
        @Bean("messageThread")
        public TaskExecutor taskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            // 设置核心线程数
            executor.setCorePoolSize(4);
            // 设置最大线程数
            executor.setMaxPoolSize(8);
            // 设置队列容量
            executor.setQueueCapacity(100);
            // 设置线程活跃时间(秒)
            executor.setKeepAliveSeconds(60);
            // 设置默认线程名称
            executor.setThreadNamePrefix("com.wood.message-");
            // 设置拒绝策略
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            // 等待所有任务结束后再关闭线程池
            executor.setWaitForTasksToCompleteOnShutdown(true);
            executor.setAwaitTerminationSeconds(60);
            return executor;
        }
    }

    3.2 邮件服务

    @Slf4j
    @Service
    public class MailServiceImpl implements MailService {
    
        @Resource
        private JavaMailSender javaMailSender;
    
        @Value("${spring.mail.username}")
        private String sender;
    
        @Override
        @Async("messageThread") //对应线程池的bean,使用线程池实现异步调用
        public void sendMail(List<SysUser> receivers, String subject, String content) {
    // 获取收件人邮件地址数组 String[] receiverMails
    = receivers.stream().map(SysUser::getEmail).filter(StringUtils::isNotBlank).distinct().toArray(String[]::new); if(receiverMails.length<1) return; SimpleMailMessage message = new SimpleMailMessage();
    // 邮件主题 message.setSubject(subject);
    // 发件人 message.setFrom(
    "邮件提醒<"+sender+">");
       // 收件人数组  message.setTo(receiverMails);
    // 发送日期 message.setSentDate(
    new Date());
    // 正文 message.setText(content); javaMailSender.send(message); log.info(
    "邮件提醒,收件人:"+ Arrays.toString(receiverMails)+",内容:"+content); } }
  • 相关阅读:
    DES CBC java加密 php解密
    CocosCreator入门(一) ------ 简介、安装、微信小游戏
    H5游戏开发----CocosCreator、CocosCreator3D、Cocos2dX差异与选择
    GIT:git -c diff.mnemonicprefix=false -c core.quotepath=false revert --no-edit
    xxx was built without full bitcode" 编译错误解决
    程序猿之GitHub
    【北医三院】生孩、出院等事宜
    Unity:Andriod部分手机频繁闪退,vivo y55a等,Skipped 62 frames! The application may be doing too much work on its main thread
    初识LUA
    Unity3D开发之Matrix4x4矩阵变换
  • 原文地址:https://www.cnblogs.com/asker009/p/13500362.html
Copyright © 2011-2022 走看看