Max*_*nov 3 spring transactions spring-data-jpa spring-boot
我有一个 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);
}
}
Run Code Online (Sandbox Code Playgroud)
配置类DataConfig.java如下所示:
@Configuration
@EnableTransactionManagement
@ComponentScan("com.pr.hotel")
@EnableJpaRepositories("com.pr.hotel")
@PropertySource("classpath:application.properties")
public class DataConfig
{
// code
}
Run Code Online (Sandbox Code Playgroud)
我很担心@EnableTransactionManagement。这个注释到底是什么意思呢?在这种情况下我应该使用@Transactional(我不)吗?
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7046 次 |
| 最近记录: |