2016-08-04 45 views
1

我想每天發送電子郵件給我的數據庫的所有用戶。 我在後端使用Springboot和JHipster。每天發送電子郵件給Springboot - JHipster

在靜止控制器,我有一個GET請求(這是自動JHipster創建):

/** 
* GET /users : get all users. 
* 
* @param pageable the pagination information 
* @return the ResponseEntity with status 200 (OK) and with body all users 
* @throws URISyntaxException if the pagination headers couldnt be generated 
*/ 
@RequestMapping(value = "/users", 
    method = RequestMethod.GET, 
    produces = MediaType.APPLICATION_JSON_VALUE) 
@Timed 
@Transactional(readOnly = true) 
public ResponseEntity<List<ManagedUserDTO>> getAllUsers(Pageable pageable) 
    throws URISyntaxException { 
    Page<User> page = userRepository.findAll(pageable); 
    List<ManagedUserDTO> managedUserDTOs = page.getContent().stream() 
     .map(ManagedUserDTO::new) 
     .collect(Collectors.toList()); 
    HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/users"); 
    return new ResponseEntity<>(managedUserDTOs, headers, HttpStatus.OK); 
} 

我也有已用於帳戶驗證和密碼復位MailService的:

/** 
* Service for sending e-mails. 
* <p> 
* We use the @Async annotation to send e-mails asynchronously. 
* </p> 
*/ 
@Service 
public class MailService { 

    private final Logger log = LoggerFactory.getLogger(MailService.class); 

    private static final String USER = "user"; 
    private static final String BASE_URL = "baseUrl"; 

    @Inject 
    private JHipsterProperties jHipsterProperties; 

    @Inject 
    private JavaMailSenderImpl javaMailSender; 

    @Inject 
    private MessageSource messageSource; 

    @Inject 
    private SpringTemplateEngine templateEngine; 

    @Async 
    public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) { 
     log.debug("Send e-mail[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}", 
      isMultipart, isHtml, to, subject, content); 

     // Prepare message using a Spring helper 
     MimeMessage mimeMessage = javaMailSender.createMimeMessage(); 
     try { 
      MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, CharEncoding.UTF_8); 
      message.setTo(to); 
      message.setFrom(jHipsterProperties.getMail().getFrom()); 
      message.setSubject(subject); 
      message.setText(content, isHtml); 
      javaMailSender.send(mimeMessage); 
      log.debug("Sent e-mail to User '{}'", to); 
     } catch (Exception e) { 
      log.warn("E-mail could not be sent to user '{}', exception is: {}", to, e.getMessage()); 
     } 
    } 

    @Async 
    public void sendActivationEmail(User user, String baseUrl) { 
     user.setLangKey("en"); 
     log.debug("Sending activation e-mail to '{}'", user.getEmail()); 
     Locale locale = Locale.forLanguageTag(user.getLangKey()); 
     Context context = new Context(locale); 
     context.setVariable(USER, user); 
     context.setVariable(BASE_URL, baseUrl); 
     String content = templateEngine.process("activationEmail", context); 
     String subject = messageSource.getMessage("email.activation.title", null, locale); 
     sendEmail(user.getEmail(), subject, content, false, true); 
    } 

    @Async 
    public void sendCreationEmail(User user, String baseUrl) { 
     log.debug("Sending creation e-mail to '{}'", user.getEmail()); 
     Locale locale = Locale.forLanguageTag(user.getLangKey()); 
     Context context = new Context(locale); 
     context.setVariable(USER, user); 
     context.setVariable(BASE_URL, baseUrl); 
     String content = templateEngine.process("creationEmail", context); 
     String subject = messageSource.getMessage("email.activation.title", null, locale); 
     sendEmail(user.getEmail(), subject, content, false, true); 
    } 

    @Async 
    public void sendPasswordResetMail(User user, String baseUrl) { 
     log.debug("Sending password reset e-mail to '{}'", user.getEmail()); 
     Locale locale = Locale.forLanguageTag(user.getLangKey()); 
     Context context = new Context(locale); 
     context.setVariable(USER, user); 
     context.setVariable(BASE_URL, baseUrl); 
     String content = templateEngine.process("passwordResetEmail", context); 
     String subject = messageSource.getMessage("email.reset.title", null, locale); 
     sendEmail(user.getEmail(), subject, content, false, true); 
    } 

} 

我知道如何從前端發出請求並將其與後端連接,但在這裏,我需要的是從背面到後面執行請求。

我也想不明白的可分頁的對象是什麼,以及如何創建它,因爲它是一個接口:

public interface Pageable { 

    int getPageNumber(); 

    int getPageSize(); 

    int getOffset(); 

    Sort getSort(); 

    Pageable next(); 

    Pageable previousOrFirst(); 

    Pageable first(); 

    boolean hasPrevious(); 
} 

回答

0

Vinzee,

所有你需要的是一個使用排程的新服務。見下文摘錄

@Service 
@Transactional 
public class ScheduleService { 
    //send mails daily at 1am 
    @Scheduled(cron = "0 0 1 * * ?") 
    public void sendDailyMails{ 
     //call userRepository.findAll 
     //create mail content or use a template (e.g. Velocity) 
     //for each user call MailService.sendMail 
     //passing content, to(user.getEmail()), from, etc; 
    } 
}