我有两个申请。我们将其称为MyApp1和MyApp2。 MyApp1在本地工作,并使用@Transactional标签部署到PCF。我能够使用spring JDBC查询和读取DB。 MyApp2在本地工作,工作正常,没有任何错误。然而,当我将MyApp2推送到云代工厂时,我开始得到最奇怪的错误:
"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实际上使用完全相同的代码。为了让Spring能够识别MyDAOJar中的注释,我有以下内容:
@SpringBootApplication(scanBasePackages = {
"org.MyApp1",
"org.MyDaoJar"})
@SpringBootApplication(scanBasePackages = {
"org.MyApp2",
"org.MyDaoJar"})
最后要注意的是,如果我将@Transactional放在MyApp2中,就在调用MyDAOJar之上,它就开始在PCF中工作了,所以它出于某些奇怪的原因,因为Spring无法在MyDAOJar中看到@Transactionl与MyApp2。我已经在MyApp1和MyApp2之间检查了我的配置10次,并没有看到任何差异。
奇怪的是,我最终需要做的就是将任何返回地图的Bean移动到它自己的@Configuration类(也就是我的主配置类),然后错误就消失了。为什么我不知道,所以如果有人能帮助我理解,那就太好了!
谢谢,Brian