用Spring Boot按部件发送电子邮件(带分页)



我想通过电子邮件从数据库发送有关用户的信息。

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT user from User user where user.reportDate >= :ago order by user.reportDate desc")
List<User> findAllWithDateAfter(@Param("ago") LocalDate ago);
}

经典用户实体:

@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
/getters and setters, etc
}

服务:

@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> getUsersForRequiredDays(int days) {
LocalDate daysAgoDate = LocalDate.now().minusDays(days);
return badUtmMarksRepository.findAllWithDateAfter(daysAgoDate);
}
}

但我想限制这个查询。如果我要从这个查询中检索30多行,我想把它分成几个部分。我想发送四封电子邮件(30/30/10(,而不是发送一封100行的电子邮件。我听说过分页,但我不知道如何将其应用于邮件。

我正在按计划发送电子邮件:

public class ScheduledMailSenderService {
private final MailSenderService mailSender;
@Scheduled(cron = "${schedule.cron.update}")
public void send() {
log.info("Scheduled sending started");
try {
mailSender.send();
} catch (MessagingException | IOException | TemplateException e) {
log.error("Error occurred while sending email message:: {}", e.toString());
}
log.info("Scheduled sending finished");
}
}

从senderService发送的方法(在上面的try块中(:

public void send() throws MessagingException, IOException, TemplateException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
List<User> users = userService.getUsersForRequiredDays(interval); //im using info from db here
setMimeMessageSettings(mimeMessage, subject, emailTo, reportTable, from);
mailSender.send(mimeMessage);
}

您的repo方法应该是:

List<User> findAllWithDateAfter(Pageable pageable, @Param("ago") LocalDate ago);

当调用该方法时,您应该执行以下操作:

@Autowired
UserRepository userRepository; 
...
int size;
int index;
*** fill the size and index variables ***
PageRequest pageRequest = PageRequest.of(index, size);
userRepository.findAllWithDateAfter(pageRequest, your-other-parameter);

最新更新