Java 事务无回滚-Spring Boot 2.0
我对SpringBoot2.0.0有问题。当我抛出RuntimeException时,它不是回滚事务。我使用的是SpringBoot1.5.9,具有相同的设置,它工作正常。它刚刚迁移到SpringBoot2并停止工作 我的配置类:Java 事务无回滚-Spring Boot 2.0,java,spring,spring-boot,Java,Spring,Spring Boot,我对SpringBoot2.0.0有问题。当我抛出RuntimeException时,它不是回滚事务。我使用的是SpringBoot1.5.9,具有相同的设置,它工作正常。它刚刚迁移到SpringBoot2并停止工作 我的配置类: @Configuration @EnableJpaRepositories(basePackages = "com.test.repository") @EnableTransactionManagement public class DatabaseConfigur
@Configuration
@EnableJpaRepositories(basePackages = "com.test.repository")
@EnableTransactionManagement
public class DatabaseConfiguration {
public static final String MODEL_PACKAGE = "com.test.model";
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource() throws SQLException {
org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl(this.url);
dataSource.setUsername(this.username);
dataSource.setPassword(this.password);
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
我的商务舱:
@Service
public class TestBusinessImpl implements TestBusiness {
@Override
@Transactional
public void save(final Test test) {
this.testRepository.save(test);
throw new RuntimeException("Test rollback");
}
}
有人知道会发生什么吗?你用的是哪种方言?您必须指定
spring.jpa.properties.hibernate.dial
org.hibernate.dialent.mysql5dialent不支持Springboot 2.0@Transaction
相反,使用org.hibernate.dialent.mysql5innodbdialent作为旁注,您已经在没有任何连接验证的情况下配置了连接池。您至少应该使用由Spring在自动配置中完成的
settstonbrow(true)
。另外,SpringBoot2.0也将HikariCP作为首选池。我已经简化为在这里发布配置。我用HikariCP进行了测试,但没有成功。事务在不回滚的情况下继续。当您使用org.springframework.Transaction.interceptor=trace
登录时,是否看到事务工作?是否存在任何事务活动,例如打开事务?如果将事务放入bean管理的事务管理器会发生什么情况?@KarolDowbecki是的,存在事务活动:2018-03-25 02:10:51.202跟踪24185---[nio-8080-exec-3]o.s.t.i.事务接收器:获取事务[com.test.business.impl.TestBusinessImpl.save]/2018-03-25 02:10:51.221 TRACE 24185---[nio-8080-exec-3]o.s.t.i.TransactionInterceptor:获取[org.springframework.data.jpa.repository.support.simplejpepository.save]的事务MySQL支持多个存储引擎,InnoDB是其中之一。因此,您的解决方案可能只有在匹配了存储引擎集后才能工作。参考-InnoDB是使用最广泛的支持事务的存储引擎。它是一个符合ACID的存储引擎。它支持行级锁定、崩溃恢复和多版本并发控制。它是唯一一个提供外键引用完整性约束的引擎。Oracle建议对表使用InnoDB,但特殊用例除外。我将方言更改为MySQL5InnoDB方言,它可以工作。谢谢@user3531698@user3531698当前位置它对我也很有效。我在这个问题上纠缠了几个小时。终于完成了。