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

时间:2018-06-27 02:50:10

标签: spring jsp controller environment-variables maven-profiles

我有maven构建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值并执行分支操作

1 个答案:

答案 0 :(得分:0)

您问题的简短答案可能是“否”,但是 我将在此处尝试提供总体答案,以澄清两件事

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

通常情况如下:

构建阶段

您调用maven来构建工件。它可以是WAR,JAR,EAR文件或其他任何文件。 作为构建工具,maven负责编译源代码,如果有要运行的测试,则对源代码进行测试,将编译后的类打包(因此是jar / war / etc。工件),就是这样。

运行阶段

然后,您在服务器上运行应用程序。从这里开始spring / jsp的责任,但简而言之,这个阶段是运行时阶段,到发生时,您甚至都不知道该应用程序是由maven构建和打包的,已经没有关系了。您有工件-运行它

现在很清楚,定义一些属性的maven概要文件在构建期间是“相关的”,并且不会传播到运行时,因为在一般情况下它们不存在。

现在,您可以从maven本地触发应用程序的启动(如果使用,则类似mvn java:exec之类的东西),在这种情况下,您可以摆弄命令行参数,但这同样仅用于本地开发目的,与应用程序寿命无关。

从技术上讲,如果您绝对需要它,可以找到一种方法:

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

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