没有@EnableTransactionManagement的事务工作

时间:2018-03-29 15:11:55

标签: spring-boot spring-transactions

我正在使用带有mybatis的弹簧靴。如果我使用像

这样的注释,我不会使用弹簧数据或其他任何东西,而是我的服务
@Transactional(readOnly = true, propagation = Propagation.REQUIRED, rollbackFor= {Exception.class})

它正在处理事务。我没有在任何地方指定启用事务管理。 spring boot如何启用它。这怎么可能?

1 个答案:

答案 0 :(得分: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;
    }

数据源属性为:urldriverClassNamejndiName等。