spring boot中的@Transactionnal注解真的会创建事务吗?
Posted
技术标签:
【中文标题】spring boot中的@Transactionnal注解真的会创建事务吗?【英文标题】:@Transactionnal annotation in spring boot does it really create a transaction? 【发布时间】:2021-11-25 14:39:01 【问题描述】:我想用一种方法调用与我的数据库交互的不同方法。
类似这样的:
@Autowired
EnteteService es; // service for jpaRepository
@Autowired
SystemOracleServiceJpa so; // service using jdbcTemplate
@Autowired
DetailService ds; // service for jpaRepository
@Transactional
public void configure(EnteteAR entete) throws ConfigurationException
try
this.es.save(entete); // first methode
List<DetailAR> details = this.so.getStructure(entete.getTableName());
if(details.size()>0)
this.ds.saveAllDetails(details); // second
this.so.CreateTable(details, entete.getTableName(), "DEM");//third
this.so.createPkIdxDem(entete.getTableName()); // fourth
this.so.CreateTable(details, entete.getTableName(), "BACK"); // fifth
else
throw new ConfigurationException("Configuration error");
catch(Exception e)
throw new ConfigurationException(e.getMessage());
只有当我的主要方法“配置”中的所有这些方法都没有出现错误时,我才想提交。
我在想@transactionnal 注释为此工作,但在内部的每个方法之后提交。
示例:
如果 this.es.save 有效而 this.ds.saveAllDetails 无效,我会在数据库中找到 es.save 的数据:(
有人可以帮帮我吗?
提前感谢您的阅读和您的潜在帮助。
【问题讨论】:
【参考方案1】:@Transactional
将在执行的方法抛出未经检查的异常时自动调用回滚。
在您的情况下,ConfigurationException 是一个检查异常,因此它不起作用。
您可以通过将注释修改为来使其工作
@Transactional(rollbackOn = ConfigurationException.class)
public void configure(EnteteAR entete) throws ConfigurationException
try ....
【讨论】:
@10hamrani 如果解决了问题,请接受答案 我怎样才能接受它? :p 我是新来的。 @10hamrani ***.com/help/someone-answers以上是关于spring boot中的@Transactionnal注解真的会创建事务吗?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2 / Kotlin / JDK9 - 引起:java.lang.ClassNotFoundException:javax.transaction.SystemExceptio