Цикл данных транзакции Spring - PullRequest
0 голосов
/ 02 мая 2019

Я использую весеннюю загрузку 2, с данными пружины jpa и hibernate

В классе у меня есть этот код.

...

private final MailContentBuilder mailContentBuilder;

private void sendEmail() {

    try {

        List<FactoryEmail> factoryEmails = prepareData();


        if (factoryEmails != null) {
            logger.info(String.valueOf(factoryEmails.size()) + " factories");
        }

        for (FactoryEmail factoryEmail : factoryEmails) {

            String message = mailContentBuilder.build(factoryEmail);

            if (factoryEmail.getEmails() != null && !factoryEmail.getEmails().isEmpty()) {

                logger.info("prepare to sent email to : " + factoryEmail.getFactoryName());

                mailService.sendHtmlMail(factoryEmail.getEmails(), "no conform", message);
                setSampleEmailSent(factoryEmail);

                Thread.sleep(5000);
            }
        }
    } catch (MessagingException | InterruptedException ex) {
        logger.error(ex.getMessage());
    }
}

private void setSampleEmailSent(FactoryEmail factoryEmail) {
    ...
    samplesServices.setEmailsSent(testSampleIdEmailSent);
}

В классе SampleService

@Transactional
public void setEmailsSent(Map<String, List<SampleId>> testSampleIdEmailSent) {
    ...
    repository.save(....);
}

Потому что я зацикливаюсь, если один из них не удается, я не хочу откат для всех.Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 03 мая 2019

Такой подход должен работать хорошо, хотя в некоторых случаях вам может понадобиться @Transactional(propagation = Propagation.REQUIRES_NEW) вместо?

Более программный подход раньше был TransactionTemplate , хотяЯ не уверен, есть ли более свежий подход, чем этот.

...