在春季安排批处理邮件作业

时间:2020-07-14 09:18:22

标签: java spring-boot email spring-batch spring-scheduled

我需要发送大约40-50000封邮件,具体取决于用户的选择。这些邮件ID存储在数据库中。可以有任意数量的邮件。为此设置了专用的邮件服务器。我不希望他们最终成为垃圾邮件。 我想每小时发送大约5000封邮件,以避免被列入黑名单。我想安排一个批处理邮件作业,在该作业中,所有邮件均已发送,而重试失败的邮件。从而避免。批处理作业是在用户启动它时计划的,并且他可以控制停止并记录发送的邮件。 这是我发现可以开始和停止工作的方式,但是可以有更好的方法来实现此目的。请帮忙

  @RequestMapping("start")
ResponseEntity<Void> start() {
    scheduledFuture = taskScheduler.scheduleAtFixedRate(sendMail(), FIXED_RATE);

    return new ResponseEntity<Void>(HttpStatus.OK);
}

@RequestMapping("stop")
ResponseEntity<Void> stop() {
    scheduledFuture.cancel(false);
    return new ResponseEntity<Void>(HttpStatus.OK);
}

这些邮件将发送给一群封闭的学生,这与垃圾邮件或电子邮件营销无关。 我是Spring批处理的新手,不知道如何进行和使用Spring Boot。 注意:这与电子邮件营销或垃圾邮件无关。

到目前为止,我已经想到了一种将所有要发送的邮件保存在邮件队列中的方法

邮件队列实体:

package com.iitraa.alumnus.iitAlumnus.entity;

import lombok.*;

import javax.persistence.*;

@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class MailQueue {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private  int id;
    private String name;
    private String email;
    @ManyToOne
    private MailJobs mailJobs;
  
    private boolean complete;



    public void setName(String name) {
        this.name = name;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setMailJobs(MailJobs mailJobs) {
        this.mailJobs = mailJobs;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public MailJobs getMailJobs() {
        return mailJobs;
    }

    
}

邮件作业是安排了邮件数量的每个作业

package com.iitraa.alumnus.iitAlumnus.entity;

import lombok.*;

import javax.persistence.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class MailJobs {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column
    private  String subject;
    @Column
    private String mailMessage;
    @Column
    private String fromEmail;
    @Column
    private String name;

    @ManyToMany
    private Set<Year> years= new HashSet<>();;

    public Set<Year> getYears() {
        return years;
    }

    public void setYears(Set<Year> years) {
        this.years = years;
    }

    public int getId() {
        return id;
    }
}

我要添加包含要发送的所有邮件的邮件队列,然后在启动方法sendMail()上方每小时运行一次,该方法将从mailQueue中获取一批邮件,并将其发送并从表中删除,直到表为空为止。 我不知道更好的方法或如何使用Spring Batch邮件计划来实现它。 这就是我需要的帮助。

0 个答案:

没有答案