如何从控制器获取 Maven 属性环境值?



I have maven build pom.xml配置

<profile>
<id>local</id>
<properties>
<env>local</env>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>

和构建选项如下

<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/resources-${env}</directory>
</resource>
</resources>

是否可以在任何控制器上引入 ENV 值? 我想放置 env 值并执行分支操作

您的问题的简短回答可能是"否",但是 我将尝试在这里提供一个总体答案来澄清几件事

您应该区分纯粹的构建工具和应用程序运行时的maven。

通常,它是这样的:

构建阶段

你打电话给 maven 来构建你的神器。它可以是战争,JAR,耳朵文件或其他任何东西。 作为构建工具,maven负责编译您的源代码,如果您有测试要运行,请对其进行测试,打包编译的类(因此是jar/war/etc.工件(,仅此而已。

运行时阶段

之后,在服务器上运行应用程序。在这里,Spring/jsp 的责任开始了,但简而言之,这个阶段是一个运行时阶段,当它发生时,你甚至不知道应用程序是由 maven 构建和打包的 - 这已经不重要了。你有工件 - 你运行它

现在很明显,定义某些属性的 maven 配置文件在构建时是"相关的",并且不会传播到运行时,因为它们在一般情况下不会存在。

现在你可以从 maven 本地触发应用程序的启动(如果你使用它,比如mvn java:exec(,在这种情况下,你可以摆弄命令行参数,但它同样仅用于本地开发目的,与应用程序生活无关。

从技术上讲,如果你绝对需要它,你可以找到一种方法来做到这一点:

您还可以创建一种更复杂的构建方式,该构建将在 maven(某种 maven 插件(中读取这些属性,并将生成具有这些属性及其值的源文件,如果这种情况发生在打包之前(再次由 maven(,该文件将与其余代码一起"烘焙到您的工件中"。这样它就可以在运行时访问,因为 spring 可以读取此属性文件。

你应该问自己的真正问题是,这是正确的做法吗?通常,这里的答案是否定的:)

最新更新