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

11 浏览
0 Comments

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

我正在开发一个Spring Boot应用程序,并且必须将其作为war包在我们的Weblogic 12c服务器上运行。

我试图找到一种方法来传递默认的Spring活动配置文件(在这里和这里),而无需在机器本身上设置环境变量。如果可能的话,我希望能够使用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”。

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

更新2:允许每个环境拥有自己的application.properties文件的一种方法是使用部署计划。这可能是推荐的做法。我将其添加为一个答案,但我仍然希望有一种更简单的方法...我不敢相信当应用程序在Weblogic中部署时,简单地传递一个参数是不可能的!如果无法用于此目的,那么“Environment / Servers / MyServer / Server Start / Arguments”选项的用途是什么?

更新3:相关主题。如果我理解正确,只有在启用NodeManager时,“Environment / Servers / MyServer / Server Start / Arguments”选项才能起作用?这就解释了为什么我无法传递那个spring.profiles.active=dev变量!

0
0 Comments

问题的出现的原因是,应用程序需要根据不同的环境加载不同的配置文件,但当前的配置文件被打包在WAR文件中,而且无法在不同环境中使用相同的环境变量。

解决方法是将配置文件放在WAR文件外部,并通过指定不同的active profile来加载对应的配置文件。可以在application.properties文件中使用spring.profiles.active属性来设置active profile,同时可以使用@PropertySource注解来指定特定的配置文件。

另外,还可以将配置文件放在类路径下,然后在Weblogic中设置类路径来加载这些配置文件。

整理如下:

Weblogic 12c : 如何将"active profile"传递给Spring Boot应用程序?

你可以使用application.properties文件来设置active profile,如下所示:

# PROFILES

spring.profiles.active= # Comma-separated list of active profiles.

由于你的WAR文件中有多个属性文件(不推荐这样做,最好将动态属性提取到WAR文件外部),你可以使用(value = "classpath:application.dev.properties")来指定应用程序使用特定的属性文件。

你可以查看这里了解更多信息。

由于我需要在不同的环境中使用不同的配置,单独的application.properties文件对我没有帮助!应用程序需要知道它运行在哪个环境上。我有多个properties文件:application.dev.propetiesapplication.acc.propetiesapplication.prod.propeties。我想要加载正确的配置文件...所以第一个active profile必须在加载属性文件之前定义。

你难道没有将属性文件放在应用程序的WAR/EAR文件之外吗?

目前没有,它们是内嵌的(我知道这是不好的实践!)。如果使用Weblogic,你会将这些外部的属性文件放在哪里,以便应用程序能够找到它们?

那么目前你是如何让应用程序指向正确的属性文件的?

我目前是在本地工作,使用SPRING_PROFILES_ACTIVE环境变量。但是我们不能在其他环境中使用它们。

你可以使用(value = "classpath:application.dev.properties")

但是你会将application.properties文件放在哪里,以便它们在类路径中?放在机器上的某个地方,然后使用Weblogic的"Environment / Servers / MyServer / Server Start / Class Path"选项将该类路径添加到Weblogic中?我猜这样可以工作。但是对于这个项目,我更希望Weblogic简单地将配置文件的名称传递给应用程序!无论如何,感谢你的建议!

你编辑后的示例(value = "classpath:application.dev.properties")并不起作用:它要求应用程序知道当前的环境是"dev"。但是它怎么知道呢?再次强调,是Weblogic应该告诉应用程序它所在的环境...

0
0 Comments

Weblogic 12c是一种Java应用服务器,Spring Boot是一个用于构建独立的、可执行的Spring应用程序的框架。在使用Weblogic 12c部署Spring Boot应用程序时,如何将"active profile"传递给应用程序是一个问题。

根据提供的信息,我们可以得出以下原因和解决方法。

问题原因:

- 开发团队将"DEPLOYMENT_ENV"属性传递给WebLogic,通过使用"-D"机制来定义部署环境。

- 在不同的Spring配置机制中使用这个属性,从类路径中加载特定的属性文件。

- 他们不使用Spring profiles来区分部署环境,而是使用运行模式来区分,默认模式用于部署在Web容器下的环境,测试模式用于JUnit测试。

解决方法:

- 在WebLogic中通过"-D"机制将"DEPLOYMENT_ENV"属性传递给应用程序。

- 在Spring配置中使用表达式"classpath:configuration/${DEPLOYMENT_ENV}/some_property_filename.properties"加载特定的属性文件。

- 使用不同的运行模式来区分不同的bean定义。

根据提供的讨论内容,我们可以得出以下结论:

- 他们使用"DEPLOYMENT_ENV"属性来区分部署环境和运行模式。

- 在生产/验收环境中,部署团队根据开发团队提供的部署手册进行配置。

- 在开发/测试环境中,开发人员可以直接访问WebLogic控制台并编辑启动脚本。

- WebLogic服务器经过修改,使得在启动时能够传递"DEPLOYMENT_ENV"属性。

在Weblogic 12c部署Spring Boot应用程序时,通过传递"active profile"来区分部署环境和运行模式是一个常见的问题。开发团队使用"-D"机制将"DEPLOYMENT_ENV"属性传递给WebLogic,并在Spring配置中使用这个属性来加载不同的属性文件。他们不使用Spring profiles来区分部署环境,而是使用运行模式来区分。在生产/验收环境中,部署团队根据开发团队提供的部署手册进行配置,而在开发/测试环境中,开发人员可以直接访问WebLogic控制台并编辑启动脚本。通过修改WebLogic服务器,使得在启动时能够传递"DEPLOYMENT_ENV"属性,从而解决了这个问题。

0
0 Comments

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

尽管Spring Profiles允许我们将Spring环境填充为属于同一逻辑组的属性集,但Spring Profiles不是目标,而是实现目标的一种方式。

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

Spring Boot提供了一种实现该目标的方法,基于拥有自己的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属性实际上具有最高优先级:

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

- 你会得到一个副作用:无需修改Weblogic启动文件

2. ServletConfig和ServletContext初始化参数不是外部配置,使用它们意味着必须为每个环境打包应用程序。

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

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

1. JNDI属性

2. 打包的application.properties

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

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

Weblogic部署计划为每个部署提供了最简单和舒适的方式来加载JNDI属性,而Spring Boot将从JNDI中填充Spring环境。

解决方案非常简单:

1. 部署您的应用程序和为您的环境(开发,预生产,生产等)定制的Weblogic部署计划

2. 在您的应用程序中像使用任何其他Spring环境属性一样使用JNDI属性值:${jndi.var}在您的application.properties中,(${jndi.var})等。

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

希望对您有所帮助!

感谢帮助。使用部署计划是我尽量避免的一件事,除非可以在管理控制台中自动化。我希望只需部署一个.ear或.war文件,然后使用管理控制台指定要用于应用程序的环境。

此外,我不同意“请注意,应避免使用打包的application-{profile}.properties文件,因为配置文件的激活意味着在同一应用服务器上部署的所有应用程序中激活相同的配置文件。”:我计划有一个第一个Spring活动配置文件,它将是环境:“local”,“dev”,“acc”,“prod”。然后,每个应用程序可以添加其他活动配置文件,在它们自己的application-{profile}.properties文件中。但是环境,即第一个活动配置文件,将在该机器上的所有应用程序中共享,这很好:它是相同的环境!

对不起,编辑我的第一条评论已经太晚了,但是,继续它:如果可以使用Weblogic管理控制台仅使用JNDI变量为Spring指定,则我想知道如何!但是,我尽量避免提供plan.xml文件并在部署应用程序时创建特殊目录结构。

好吧,我想我们对于使用全局变量设置活动配置文件有不同的观点。在我的环境中,DEV的应用服务器并不意味着我们只有一个DEV配置文件。尽管建议为DEV配置文件使用“dev”后缀,但每个应用程序可以有自己的DEV配置文件名称:“development”,“devel”等,所有这些应用程序都部署在同一个DEV环境的应用程序服务器中。

Weblogic不提供JNDI服务器的管理工具,因此不,您无法使用Weblogic管理控制台来管理JNDI属性。但是,管理JNDI属性非常容易:项目的WEB-INF目录包含web.xml(定义具有默认值的JNDI属性)以及每个环境的一个plan.xml(plan-dev.xml,plan-pre.xml),该plan.xml为每个环境自定义了JNDI属性。当使用Weblogic管理控制台上传WAR时,上传所需的plan-{profile}.xml,就这样。

0