Weblogic 12c:如何将“活动配置文件”传递给Spring Boot应用程序?

我正在开发一个Spring Boot应用程序,我必须让它在我们的Weblogic 12c服务器上运行,这是一场战争.

我试图找到一种方法将默认的Spring活动配置文件(info herehere)传递给应用程序,而无需在计算机本身上设置环境变量.如果可能的话,我希望能够使用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

有没有想过是否可以使用Weblogic将spring.profiles.active传递给Spring?我需要传递“dev”,“acc”或“prod”.

更新:我会接受一个答案,解释使用不同的.properties文件用于应用程序配置的任何简单方法,具体取决于运行Sprint Boot应用程序的环境.这些.properties文件可以捆绑在应用程序本身中,也可以是外部的.但我需要至少尽可能触摸Weblogic运行的系统……没有环境变量,理想情况下也不会改变Weblogic文件!理想情况下,解决方案将涉及使用Weblogic管理控制台完成的某种操作,例如,将表示当前环境的参数传递给Spring Boot应用程序,以便使用正确的应用程序.[ENVIRONMENT] .properties文件.

更新2:允许每个环境拥有自己的application.properties文件的一种方法是使用Deployment plans.这可能是推荐的方法.我将补充一点作为答案,但我仍然倾向于采用一种更简单的方法……当我在Weblogic中部署参数时,我无法简单地将参数传递给应用程序!什么是“环境/服务器/ MyServer /服务器启动/参数”选项,如果它不能用于此目的?

更新3:Related thread.如果我理解正确,“环境/服务器/ MyServer /服务器启动/参数”选项可能仅在启用NodeManager时有效?这可以解释为什么我无法传递那个spring.profiles.active = dev变量!

最佳答案
虽然Spring Profiles允许我们使用属于同一个名为profile的逻辑组的属性集来填充Spring Environment,但Spring Profiles不是目标,而是实现目标的方法之一.

目标是能够从外部化配置填充Spring环境,也就是说,目标是能够在不同环境中部署相同的应用程序代码,并为每个单一环境加载特定配置.

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属性实际上是最优先的:

>我建议不要使用全局设置,如全局属性文件,命令行参数,系统环境变量等,因为它们由部署在同一应用程序服务器中的所有应用程序共享.

>您将获得附带好处:无需修改Weblogic启动文件

> ServletConfig和ServletContext的init参数不是外部配置,使用它们意味着你必须为每个环境打包应用程序.

请注意,要激活配置文件,您必须使用全局变量,因此同一应用服务器中的所有已部署应用程序将激活相同的配置文件.

因此,实际上,在纯JEE环境的Spring Boot应用程序中,您只有两个配置源:

> JNDI属性
>打包的application.properties

请注意,您应该避免使用打包的application- {profile} .properties文件,因为配置文件激活意味着在同一应用服务器中部署的所有应用中激活相同的配置文件.

在这一点上,您可以想象纯JEE *中唯一的外部配置源是JNDI.

[*]“纯JEE”是指不使用Spring Cloud Config(https://cloud.spring.io/spring-cloud-config/)等外部配置服务器.

也就是说,Weblogic部署计划为您提供了为每个部署加载JNDI属性的最简单,最舒适的方式,Spring Boot将从JNDI填充Spring环境.

解决方案非常简单:

>部署您的应用程序和为您的环境定制的Weblogic部署计划(dev,pre,pro,…)
>在应用程序中使用JNDI属性值作为任何其他Spring Environment属性:${jndi.var}在application.properties,@ Value(${jndi.var})等中.

>请注意,Spring Boot将使用JNDI属性填充Spring环境,因此您可以像使用application.properties文件中的属性一样使用它们.

希望能帮助到你!

转载注明原文:Weblogic 12c:如何将“活动配置文件”传递给Spring Boot应用程序? - 代码日志