我有两个申请。我们将它们称为MyApp1和MyApp2。 MyApp1在本地工作,并通过@Transactional标记部署到PCF。我能够使用Spring JDBC查询和读取数据库的内容。 MyApp2在本地可以正常工作,没有任何错误。但是,当我将MyApp2推送到Cloud Foundry时,我开始遇到最奇怪的错误:
"Failed to obtain JDBC Connection: Cannot execute JDBC statements outside of a Transaction. Define @Transactional(readOnly="true") or @Transactional for all methods"
要注意的另一件事是,两个应用程序都使用同一个MyDAOJar,其中包含@Transactional,因此MyApp1和MyApp2实际上使用了完全相同的代码。为了使弹簧能够识别MyDAOJar中的注释,我需要执行以下操作:
@SpringBootApplication(scanBasePackages = {
"org.MyApp1",
"org.MyDaoJar"})
@SpringBootApplication(scanBasePackages = {
"org.MyApp2",
"org.MyDaoJar"})
要注意的最后一件事是,如果我将@Transactional放在MyApp2中,即对MyDAOJar的调用之上,它将开始在PCF中工作,因此由于某种奇怪的原因,spring无法在MyDAOJar中看到@Transactionl MyApp2。我已经检查了MyApp1和MyApp2之间的配置,例如10次,但看不到任何差异。
答案 0 :(得分:0)
奇怪的是,我最后要做的就是将所有返回了映射的Bean移到它自己的on @Configuration类中(也就是我的主要配置类之外),错误消失了。为什么我不知道,所以如果有人可以帮助我理解,那就太好了!
谢谢, 布莱恩