Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 事务无回滚-Spring Boot 2.0_Java_Spring_Spring Boot - Fatal编程技术网

Java 事务无回滚-Spring Boot 2.0

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

我对SpringBoot2.0.0有问题。当我抛出RuntimeException时,它不是回滚事务。我使用的是SpringBoot1.5.9,具有相同的设置,它工作正常。它刚刚迁移到SpringBoot2并停止工作

我的配置类:

@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当前位置它对我也很有效。我在这个问题上纠缠了几个小时。终于完成了。