springboot项目@Transactional注解,所有的数据库操作都没问题,但是事务未提交,在service使用注解
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
在controller捕获!然而接口返回成功啦,但是事务未提交,导致数据库线程sleep,一杀死sleep的线程,数据就没啦以下是数据源配置
@Component
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
    static final String PACKAGE = "com.zpkj.ddw.mappers";
    static final String MAPPER_LOCATION = "classpath:mybatis/mapper/*.xml";    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;    @Value("${spring.datasource.url}")
    private String url;    @Value("${spring.datasource.username}")
    private String username;    @Value("${spring.datasource.password}")
    private String password;    @Value("${spring.datasource.druid.initial-size}")
    private int initialSize;    @Value("${spring.datasource.druid.min-idle}")
    private int minIdle;    @Value("${spring.datasource.druid.max-active}")
    private int maxActive;    @Value("${spring.datasource.druid.max-wait}")
    private int maxWait;    @Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
    private long timeBetweenEvictionRunsMillis;    @Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
    private long minEvictableIdleTimeMillis;    @Value("${spring.datasource.druid.test-on-borrow}")
    private Boolean testOnBorrow;
    @Value("${spring.datasource.druid.test-while-idle}")
    private Boolean testWhileIdle;
    @Value("${spring.datasource.druid.test-on-return}")
    private Boolean testOnReturn;    @Value("${spring.datasource.druid.validation-query}")
    private String validationQuery;
    @Value("${spring.datasource.druid.validation-query-timeout}")
    private int validationQueryTimeout;    @Value("${spring.datasource.druid.pool-prepared-statements}")
    private Boolean poolPreparedStatements;
    @Value("${spring.datasource.druid.connection-init-sqls}")
    private List<String> connectionInitSqls;
    @Value("${spring.datasource.druid.max-open-prepared-statements}")
    private int  maxOpenPreparedStatements;    @Bean(name = "masterDataSource")
    @Primary
    public DataSource masterDataSource() {
        return DruidDataSourceBuilder.newInstance()
                .appendDriverClassName(driverClassName)
                .appendUrl(url)
                .appendUsername(username)
                .appendPassword(password)
                .appendInitialSize(initialSize)
                .appendMinIdle(minIdle)
                .appendMaxActive(maxActive)
                .appendMaxWait(maxWait)
                .appendTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis)
                .appendMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis)
                .appendTestOnBorrow(testOnBorrow)
                .appendTestOnReturn(testOnReturn)
                .appendTestWhileIdle(testWhileIdle)
                .appendValidationQuery(validationQuery)
                .appendValidationQueryTimeout(validationQueryTimeout)
                .appendMaxOpenPreparedStatements(maxOpenPreparedStatements)
                .appendConnectionInitSqls(connectionInitSqls)
                .getDataSource();
    }    @Bean(name = "masterTransactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager() {
        return new DataSourceTransactionManager(masterDataSource());
    }    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MasterDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }}