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();
}}
@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();
}}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货