微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 weblogic 上激活时出现 Spring Boot 应用程序错误

如何解决在 weblogic 上激活时出现 Spring Boot 应用程序错误

场景:

我有一个 Spring boot 应用程序,其中包含 4 个 maven 配置文件和 5 个不同的 application.properties 文件(例如 application-dev.properties)(4 个用于 maven 配置文件,1 个用于认配置)。 测试和生产 Maven 配置文件具有几乎相同的设置,不同之处在于域、文本等。 我们有 2 个 Weblogic 服务器,具有相同的配置和 JNDI。一个用于测试,一个用于生产。

问题:

test Weblogic 服务器上部署和激活应用程序(在构建时选择了测试 maven 配置文件)时,.war 的部署和激活成功。应用程序运行良好,每个人都很高兴。

生产 Weblogic 服务器(使用生产 maven 配置文件)上部署和激活应用程序时,部署很好,但是在激活 .war 时它会失败,出现以下错误

    weblogic.application.ModuleException: java.lang.IllegalArgumentException: Could not resolve placeholder 'xxxxxxxx' in value "${xxxxxxxx}"

        at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)

        at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)

        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)

        at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)

        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)

        Truncated. see log file for complete stacktrace

Caused By: java.lang.IllegalArgumentException: Could not resolve placeholder 'xxxxxxxx' in value "${xxxxxxxx}"

        at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:178)

        at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124)

        at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236)

        at org.springframework.core.env.AbstractPropertyResolver.resolverequiredPlaceholders(AbstractPropertyResolver.java:210)

        at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processproperties$0(PropertySourcesPlaceholderConfigurer.java:175)

        Truncated. see log file for complete stacktrace

一开始我以为是生产maven配置文件的问题,后来我尝试在测试Weblogic中使用生产配置文件部署和激活应用,一切正常。

我还尝试检查 setDomainEnv.sh 中 Weblogic 环境变量的差异,但它们是相同的。

有什么想法吗?

解决方法

好吧,出于某种未知原因,在生产 weblogic 服务器中,当激活 .war 时,weblogic 尝试从仅包含 spring.profiles.active=prod 的 application.properties 文件中解析占位符。 所以通常 Spring 应该在 application-prod.properties 中找到属性(适用于测试 weblogic 服务器)。

解决方案

连续 2 天进行一些 RnD 后,无法理解为什么这不起作用,我尝试了一个可行的解决方案。 我用 application-prod.properties 的内容替换了 application.properties 内容(spring.profiles.active 行)。

我知道,最好的解决方案是找出 spring.profiles.active 在生产网络逻辑上不起作用的原因。但我写这篇文章只是为了帮助其他人在截止日期前如何快速解决问题。

我希望有比我在 Spring 方面更有经验的人解释为什么会发生这种情况。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。