使用SpringBoot处理事务隔离级别

时间:2018-10-12 15:46:15

标签: java spring spring-boot

我正在使用Spring-Boot应用程序并使用Spring Boot版本1.5.9。

我有一种付款转账方法,其中包含一组数据库插入,并且我想使其具有锁定性事务性,以避免重复支出。所以我需要将隔离级别设置为Serializable。 这就是我所做的:

@Transactional(isolation = Isolation.SERIALIZABLE)
public void transfer() {
...
}

问题是调用此方法时出现以下异常:

{
    "timestamp": 1539357851437,
    "status": 500,
    "error": "Internal Server Error",
    "exception": "org.springframework.transaction.InvalidIsolationLevelException",
    "message": "JtaTransactionManager does not support custom isolation levels by default - switch 'allowCustomIsolationLevels' to 'true'",
    "path": "app/transfer"
}

一般来说,我是Spring的新手,SpringBoot似乎没有XML配置,可以重写以将JtaTransactionManager bean的allowCustomIsolationLevels设置为true。但是相反,我应该使用Java批注和@Bean定义,而且我不确定该如何实现我的目标。

任何帮助都会得到感谢!

1 个答案:

答案 0 :(得分:1)

如果您想使用XML文件进行配置,请在带有@SprintBootApplication批注的主类中添加以下内容:

@ImportResource("classpath:/static/context/name-of-context-file.xml")

这将从路径中导入XML文件,该路径的根是项目中的资源目录。

根据我从Spring's Documentation的了解,您可能希望使用DataSourceTransactionManager或使用我提到的XML文件,因为根据该文档(类似于错误消息的状态,但是在至少可以让您选择设置)

  

JTA不支持自定义隔离级别。

我知道我链接的页面很长,但是如果您只是在页面上查找“自定义隔离”,则会将其缩小为三个选项,其中两个彼此相邻。

希望这会有所帮助。