Понимание Cron в Springboot, для автоматизации отправки электронной почты - PullRequest
0 голосов
/ 11 января 2019

На Кроне много информации, и я немного запутался. Большая часть информации предназначена исключительно для установки запланированной аннотации cron. Я никогда не использовал SpringBoot Scheduling раньше. Я пытаюсь сделать так, чтобы электронное письмо отправлялось раз в месяц, скажем 15 числа каждого месяца. Я отправил электронные письма, прежде чем использовать EmailService и Helpers. Правильно ли сочетать эти два метода или я должен настроить шаблон электронной почты и отправить письмо другим способом? То, что у меня есть, это не отправка электронного письма (когда я переключаюсь на сегодняшнюю дату и время). Может кто-нибудь сказать мне, почему он не отправляет в запланированное время, я пропускаю какой-то фрагмент кода или это не способ сделать это с помощью планирования ? Я использовал этот метод отправки электронной почты службой электронной почты раньше, и он сработал, поэтому должно быть что-то не так с тем, как я настроил планировщик. У кого-нибудь есть идея, почему он не запускает sendReminder () в назначенное время?

Это то, что у меня есть в моем коде до сих пор ... Контроллер:

@Controller
public class MailController {
    @Autowired
    LicenseRepository licenseRepository;

    @Autowired
    InsuranceRepository insuranceRepository;

    @Autowired
    EmailService emailService;

    @Scheduled(cron = "0 15 10 15 * ?")
    public void sendReminder(){
        License license = new License();
        Insurance insurance = new Insurance();
        Mail mail = new Mail();
        mail.setFrom("no-reply@gmail.com");
        mail.setTo(new String[]{"myemail@gmail.com"});
        mail.setSubject("Policy Renewal Notice");

        Map<String, Object> mailModel = new HashMap<String, Object>();
        mail.setModel(mailModel);

        try {
            emailService.sendSimpleMessage(mail, license, insurance);
        } catch (Exception e) {
            e.printStackTrace();

        }

    }

    @RequestMapping(value="/email")
    public String email(){
        return "emailMessage";
    }
}

И почтовый сервис:

@Service
public class EmailService{

    private JavaMailSender javaMailSender;

    @Autowired
    public EmailService(JavaMailSender javaMailSender){
        this.javaMailSender = javaMailSender;
    }

    @Autowired
    private SpringTemplateEngine templateEngine;

    public void sendSimpleMessage(Mail mail, License license, Insurance insurance) throws MessagingException, IOException {
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,
                MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED,
                StandardCharsets.UTF_8.name());

        helper.addAttachment("Mail_Icon.png", new ClassPathResource("static/images/Mail_Icon.png"));

        Context context = new Context();
        context.setVariables(mail.getModel());
        context.setVariable("license",license);
        context.setVariable("insurance",insurance);
        String html = templateEngine.process("emailMessage", context);

        helper.setTo(mail.getTo());
        helper.setText(html, true);
        helper.setSubject(mail.getSubject());
        helper.setFrom(mail.getFrom());

        javaMailSender.send(message);
    }



}

И, наконец, HTML-шаблон электронной почты:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:th="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>HTML Reminder Email</title>
    <style type="text/css">
  lots of styling here removed for easier reading
  </style>
</head>

<body bgcolor="#f6f8f1">
<table width="100%" bgcolor="#f6f8f1" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td>
            <!--[if (gte mso 9)|(IE)]>
            <table width="600" align="center" cellpadding="0" cellspacing="0" border="0">
                <tr>
                    <td>
            <![endif]-->
            <table bgcolor="#ffffff" class="content" align="center" cellpadding="0" cellspacing="0" border="0">
                <tr>
                    <td bgcolor="#6435c9" class="header">
                        <table width="70" align="left" border="0" cellpadding="0" cellspacing="0">
                            <tr>
                                <td height="70" style="padding: 0 20px 20px 0;">
                                    <img class="fix" src="cid:Mail_Icon.png" width="70" height="70" border="0" alt="" />
                                </td>
                            </tr>
                        </table>
                        <!--[if (gte mso 9)|(IE)]>
                        <table width="425" align="left" cellpadding="0" cellspacing="0" border="0">
                            <tr>
                                <td>
                        <![endif]-->
                        <table class="col425" align="left" border="0" cellpadding="0" cellspacing="0" style="width: 100%; max-width: 425px;">
                            <tr>
                                <td height="70">
                                    <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                        <tr>
                                            <td class="subhead" style="padding: 0">
                                                Policy Renewal Expiration Reminder
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                        <!--[if (gte mso 9)|(IE)]>
                        </td>
                        </tr>
                        </table>
                        <![endif]-->
                    </td>
                </tr>
                <tr>
                    <td class="innerpadding borderbottom">
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                            <tr class="emailRow">
                                <p>AFFILIATE NAME HERE</p>
                            </tr>
                            <tr class="emailRow">
                                <p>Our Records indicate that your policy is up for renewal in 30 days. Please provide the updated proof of insurance to the Director of Operations by email: <a href="mailto:myemail@gmail.com">myemail@gmail.com</a>.  We appreciate your compliance. </p>
                                <p>Thank you,</p>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>
</body>
</html>

Здесь я поместил аннотацию «Включить планирование»: в моем файле main.java

@EntityScan(
		basePackageClasses = {ODbApplication.class, Jsr310JpaConverters.class}
)
@EnableScheduling
@SpringBootApplication
@Configuration
public class ODbApplication extends SpringBootServletInitializer {
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(ODbApplication.class);
	}


	public static void main(String[] args) {
		SpringApplication.run(ODbApplication.class, args);
	}

	@Bean
	public FilterRegistrationBean securityDatabaseFilterRegistration(SecurityDatabaseFilter securityDatabaseFilter) {
		FilterRegistrationBean registrationBean = new FilterRegistrationBean(securityDatabaseFilter);
		registrationBean.setEnabled(false);
		return registrationBean;
	}

}

1 Ответ

0 голосов
/ 11 января 2019

Понять выражение cron, оно состоит из шести полей. <year> field is optional. документы

<second> <minute> <hour> <day-of-month> <month> <day-of-week> <year>

* означает all

? означает any

@ Запланировано (cron = "0 15 10 15 *?")

Вы cron выражение хорошо, и оно начнется в 10:15 AM 15-го числа каждого месяца

Правильно ли комбинировать эти два метода?

В этом нет никакого вреда, если это не работает, значит, вы что-то упустили

@ EnableScheduling Просто включит возможность

Включает возможность выполнения запланированных задач Spring

@ Запланированные

Аннотация, помечающая метод для планирования. Точно должен быть указан один из атрибутов cron (), fixedDelay () или fixedRate ().

...