我有一个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);
}
}
config类DataConfig.java
如下:
@Configuration
@EnableTransactionManagement
@ComponentScan("com.pr.hotel")
@EnableJpaRepositories("com.pr.hotel")
@PropertySource("classpath:application.properties")
public class DataConfig
{
// code
}
我担心@EnableTransactionManagement
。此注释的确切含义是什么?在这种情况下(我不应该)使用@Transactional
吗?
答案 0 :(得分:2)
@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();
}
}