【问题标题】:How to pass maven variable to springboot application如何将 Maven 变量传递给 Spring Boot 应用程序
【发布时间】:2017-04-20 08:35:27
【问题描述】:

我想将变量从 maven 命令行传递给 spring boot 主类,但我不知道,这是我的 maven pom 文件:

<properties>        
   <maven.tomcat.home>Here should add argument from command line</maven.tomcat.home>
</properties>

这是我的 Spring Boot 主类:

@PropertySource(value ={"file:@maven.tomcat.home@/em/easymobile-application.properties"})
public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);

    }

}

所以当我通过如下命令行运行 maven 时,应用程序将作为 war 文件部署到 tomcat

mvn clean install -Dmaven.tomcat.home=/usr/local/apache-tomcat-8.0.33/webapps

然后我启动tomcat,错误提示找不到easymobile-application.properties,所以你知道如何使用@PropertySource或其他东西从maven命令行加载easymobile-application.properties。谢谢!!

【问题讨论】:

标签: spring-boot maven-3


【解决方案1】:

我认为这不是正确的方法,假设在某些时候你可以让它工作,如果你需要/必须将 webapp 部署到 /usr/local/apache-tomcat-8.0.xx 会发生什么?您是否需要再次编译工件?这不好。更好的方法是只生成 1 个可以在每个环境中部署/安装的二进制/工件:staging / prod / etc..

如前所述,如果应用需要文件路径配置,我建议使用配置属性文件而不是 Maven 属性。

【讨论】:

  • 谢谢,ootero。注释@PropertySource 需要一个常量值,但我想尝试是否可以从命令行传递参数,我可以更改easymobile-application.properties 的路径。如果配置文件退出resource文件夹,会打包成war/或jar文件,不方便修改。
  • 如果你要斥责提问者,至少要回答这个问题。出于不同的原因,我需要这样做。
【解决方案2】:

谢谢!我用一种简单的方法解决了这个问题,我只是在tomcat\bin\catalina.sh中添加了包含application.properties的文件夹的路径

CLASSPATH=:/usr/local/apache-tomcat-8.0.33

@PropertySource 指向“classpath:em/easymobile-application.properties”

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 2023-02-24
    • 1970-01-01
    • 2016-10-21
    • 2022-12-17
    • 2019-11-10
    • 2018-10-06
    • 2020-12-15
    • 2020-12-13
    相关资源
    最近更新 更多