Cloud Foundry 无法识别@Transactional

Cloud Foundry not recognizing @Transactional

我有两个应用程序。我们称它们为 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 实际上使用的是完全相同的代码。为了让 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 class 中(也就是我的主要配置 class) ,错误消失了。为什么我不知道,所以如果有人能帮助我理解,那就太好了!

谢谢, 布莱恩