我正在开发一个 Spring Boot 应用程序,我必须让它在我们的 Weblogic 12c
中运行服务器,作为 war 。
我尝试找到一种方法将默认的 Spring 事件配置文件(信息 here 和 here)传递给应用程序,而无需在机器本身上设置环境变量。如果可能,我希望能够使用 Weblogic 管理控制台指定此配置文件。
我尝试使用“Environment / Servers / MyServer / Server Start / Arguments
”选项,但我一直无法让 Spring 以这种方式加载指定的配置文件。我试过了,没有成功:
spring.profiles.active=dev
-Dspring.profiles.active='dev'
-Dspring.profiles.active=dev
-spring.profiles.active=dev
--spring.profiles.active=dev
知道是否可以通过
spring.profiles.active
到 Spring,使用 Weblogic?我需要通过“dev
”、“acc
”或“prod
”。更新:我会接受一个解释任何简单方法的答案
.properties
用于应用程序配置的文件,具体取决于运行 Sprint Boot 应用程序的环境。那些.properties
文件可以捆绑在应用程序本身中,也可以是外部的。但是我需要至少尽可能地接触 Weblogic 正在运行的系统......没有环境变量,理想情况下也没有对 Weblogic 文件进行更改!理想情况下,该解决方案将涉及使用 Weblogic 管理控制台完成的某种操作,例如将表示当前环境的参数传递给 Spring Boot 应用程序以便正确的 application.[ENVIRONMENT].properties
的方法。文件被使用。更新 2 :允许每个环境拥有自己的一种方式
application.properties
文件,使用 Deployment plans .这可能是推荐的方法。我将添加它作为答案,但我仍然更喜欢更简单的方法......我无法相信在 Weblogic 中部署应用程序时,不可能简单地将参数传递给应用程序!如果不能用于此目的,“Environment / Servers / MyServer / Server Start / Arguments
选项是什么?更新 3 :Related thread .如果我理解正确,“
Environment / Servers / MyServer / Server Start / Arguments
”选项可能仅在启用 NodeManager 时才有效?这将解释为什么我无法通过 spring.profiles.active=dev
多变的!
最佳答案
尽管 Spring Profiles 允许我们使用属于名为 profile 的同一逻辑组的一组属性填充 Spring Environment,但 Spring Profiles 不是目标,而是实现目标的方法之一。
目标是能够从外部化的配置中填充 Spring Environment,即目标是能够在不同的环境中部署相同的应用程序代码,并为每个单独的环境加载特定的配置。
Spring Boot 提供了一种基于拥有自己的 PropertySource 来实现该目标的方法,该 PropertySource 旨在允许合理地覆盖值。
如果您阅读 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config您将看到特定于配置文件的应用程序属性只是可用的属性来源之一,并且 JNDI 属性将覆盖特定于配置文件的属性。
分析 JEE 环境的 Spring Boot 属性覆盖顺序 (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config),JNDI 属性实际上具有最高优先级:
请注意,要激活配置文件,您必须使用全局变量,因此同一应用服务器中的所有部署应用程序将激活相同的配置文件。
因此,实际上,在纯 JEE 环境的 Spring Boot 应用程序中,您只有两个配置源:
请注意,您应该避免使用打包的 application-{profile}.properties 文件,因为配置文件激活意味着在部署在同一应用服务器中的所有应用中激活相同的配置文件。
在那一点上,您可以想象您在纯 JEE* 中拥有的唯一外部配置源是 JNDI。
[*] “纯 JEE”是指不使用 Spring Cloud Config ( https://cloud.spring.io/spring-cloud-config/ ) 等外部配置服务器。
也就是说,Weblogic 部署计划为您提供了为每个部署加载 JNDI 属性的最简单和舒适的方法,并且 Spring Boot 将从 JNDI 填充 Spring Environment。
解决方案非常简单:
希望能帮助到你!
关于spring - 网络逻辑 12c : How to pass the "active profile" to a Spring Boot application?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40428943/