Должен ли я использовать @Transactional используя @EnableTransactionManagement? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть приложение Spring Boot.Все отлично работаетЯ просто пытаюсь понять, как работает менеджер транзакций, потому что у меня есть подозрения по поводу моего приложения.В частности, меня немного смущают аннотации.

Вот Application.java (основной класс):

@SpringBootApplication(exclude = ActiveMQAutoConfiguration.class)
@EnableScheduling
public class Application extends SpringBootServletInitializer
{

    @Override
    protected SpringApplicationBuilder configure (SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }

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

}

класс конфигурации DataConfig.java выглядит так:

@Configuration
@EnableTransactionManagement
@ComponentScan("com.pr.hotel")
@EnableJpaRepositories("com.pr.hotel")
@PropertySource("classpath:application.properties")
public class DataConfig
{
    // code
}

Я беспокоюсь о @EnableTransactionManagement.Что именно означает эта аннотация?Должен ли я использовать @Transactional в этом случае (я не)?

1 Ответ

0 голосов
/ 13 сентября 2018

@EnableTransactionManagement делает именно то, что говорит:

Включает возможность управления транзакциями Spring на основе аннотаций, похож на поддержку, найденную в пространстве имен Spring в XML.

Да, вы все равно должны использовать аннотацию @Transactional для методов, которые вы хотите заключить в транзакцию. В следующем примере результат saveSomething() не будет применен, если maybethrowaneException() сгенерирует исключение. Будьте осторожны, используйте org.springframework.transaction.annotation.Transactional, а не javax.transaction.Transactional.

Аннотация @Transactional сообщает Spring, чтобы контролировать, когда данные сбрасываются в базу данных (обычно после успешного завершения метода). Без аннотации данные будут немедленно сброшены.

Это механизм, предотвращающий запись неполных изменений в базу данных, когда что-то идет не так. Дальнейшее чтение: https://dzone.com/articles/how-does-spring-transactional

@Service
public class DataTransformer() {

     @Transactional
     public void doETL() throws Exception {
        loadSomeEntities();
        saveSomething();
        maybethrowanException();
        saveSomethingElse();
     }
 }
...