【问题标题】:transaction working without @EnableTransactionManagement没有@EnableTransactionManagement 的事务工作
【发布时间】:2018-03-30 00:57:05
【问题描述】:
我正在使用带有 mybatis 的 spring boot。如果我使用像这样的注释,我没有使用弹簧数据或其他任何东西,但我的服务
@Transactional(readOnly = true, propagation = Propagation.REQUIRED, rollbackFor= {Exception.class})
它正在处理事务。我没有指定任何地方来启用事务管理。 spring boot 如何启用此功能。这怎么可能?
【问题讨论】:
标签:
spring-boot
spring-transactions
【解决方案1】:
默认情况下,如果数据库源属性确实存在,Spring Boot 会启动事务自动配置。
请参阅DataSourceTransactionManagerAutoConfiguration 代码。
@Configuration
@ConditionalOnClass({ JdbcTemplate.class, PlatformTransactionManager.class })
@AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceTransactionManagerAutoConfiguration
// other code
@Bean
@ConditionalOnMissingBean(PlatformTransactionManager.class)
public DataSourceTransactionManager transactionManager(
DataSourceProperties properties) {
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(
this.dataSource);
if (this.transactionManagerCustomizers != null) {
this.transactionManagerCustomizers.customize(transactionManager);
}
return transactionManager;
}
数据源属性为:url、driverClassName、jndiName 等。