gpt4 book ai didi

java - Spring Transaction 不会在 @Transactional 方法中的 RuntimeException 处回滚

转载 作者:行者123 更新时间:2023-11-30 22:26:38 24 4
gpt4 key购买 nike

我有这个数据库配置:

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = "com.mycompany")
public class DBConfiguration {

@Bean(destroyMethod = "close")
public javax.sql.DataSource dataSource() {
DataSource ds = new DataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost/v2");
ds.setUsername("java");
ds.setPassword("mypass");
ds.setInitialSize(5);
ds.setMaxActive(10);
ds.setMaxIdle(5);
ds.setMinIdle(2);
ds.setRemoveAbandoned(true);
ds.setLogAbandoned(true);
return ds;
}

@Bean
public DataSourceTransactionManager txManager()
{
DataSourceTransactionManager tx= new DataSourceTransactionManager(dataSource());
return tx;
}

}

问题已更新

我不太理解@Transaction注解是如何工作的,请考虑这个场景:

@Service
public class FirstService {
@Transactional //<--- this annotation seems to be mandatory for my rollback but I don't want it.
public void test() throws Exception{
secondService.insert();
}
}

@Service
public class SecondService {
@Transactional //<-- I would like to have only this method in transaction
protected void insert() throws Exception{
dao.insertEntity(new Entity()); //<<--- this is an SQL insert command
throw new RuntimeException("Rollback test");
}
}

测试代码:

@RequestMapping("/test") @ResponseBody
public void test() throws Exception{
firstService.test();
}

道:

public void insertEntity(Entity e) {
getJdbcTemplate().update(SQL_INSERT,e.getCode(),e.getName());
}

此测试有效,抛出的异常可以回滚事务。

为什么如果我在 firstService 上省略 @Transaction 注释就不会回滚?

似乎从@Controller 到@Service txmanager 寻找@Transaction 注释,从@Service 到(另一个)@Service 或@Component 它不寻找它。

最佳答案

这对我有用:

@Bean(name = "transactionManager")
@Primary
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}

请更新 spring 版本,也许还有一些日志或调试日志,看看事务是否有问题

关于java - Spring Transaction 不会在 @Transactional 方法中的 RuntimeException 处回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com