我正在使用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定义,而且我不确定该如何实现我的目标。
任何帮助都会得到感谢!
答案 0 :(得分:1)
如果您想使用XML文件进行配置,请在带有@SprintBootApplication
批注的主类中添加以下内容:
@ImportResource("classpath:/static/context/name-of-context-file.xml")
这将从路径中导入XML文件,该路径的根是项目中的资源目录。
根据我从Spring's Documentation的了解,您可能希望使用DataSourceTransactionManager或使用我提到的XML文件,因为根据该文档(类似于错误消息的状态,但是在至少可以让您选择设置)
JTA不支持自定义隔离级别。
我知道我链接的页面很长,但是如果您只是在页面上查找“自定义隔离”,则会将其缩小为三个选项,其中两个彼此相邻。
希望这会有所帮助。