Spring boot 运行完全可执行的 JAR 并指定 -D 属性

Posted

技术标签:

【中文标题】Spring boot 运行完全可执行的 JAR 并指定 -D 属性【英文标题】:Spring boot running a fully executable JAR and specify -D properties 【发布时间】:2016-02-24 15:42:24 【问题描述】:

Spring Boot Maven 和 Gradle 插件现在可以为 Linux/Unix 操作系统生成完整的可执行档案。运行完全可执行的 JAR 就像键入一样简单:

$ ./myapp.jar

我的问题是在这种情况下如何设置 -D 属性,例如

-Dspring.profiles.active=test

另外,如果服务器没有安装jdk,这个完全可执行的jar还能运行吗?

【问题讨论】:

【参考方案1】:

有两种方法可以配置这样的属性:

1:

通过在单独的配置文件中指定它们。 Spring Boot 将查找名为 JARfilename.conf 的文件,该文件应与 JAR 文件存储在同一文件夹中。在那里你可以添加环境变量JAVA_OPTS:

JAVA_OPTS="-Dpropertykey=propvalue"

2:

或者您可以在执行应用程序之前在 shell 中指定环境变量的值:

JAVA_OPTS="-Dpropertykey=propvalue" ./myapp.jar

查看文档以获取可用变量的完整列表:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#deployment-service

关于您的第二个问题:要执行 JAR,您不需要 JDK,JRE 就足够了(但您至少需要,如果您没有在服务器上安装任何 java,则应用程序将不会t运行)。

【讨论】:

谢谢!我试过JAVA_OPTS="-Dspring.profiles.active=test" ./myapp.jar 它有效。但在我看来设置环境变量只能这样:export spring_profiles_active=test。我首先知道使用您的方式设置环境变量。你能给我一些这样介绍的文件吗? 或者您可以在 jar 所在的同一目录中添加一个 config/application.properties 文件并添加以下行:'spring.profiles.active=test'【参考方案2】:

默认情况下,SpringApplication 会将任何命令行选项参数(以“--”开头,例如 --server.port=9000)转换为属性并将其添加到 Spring 环境中。如上所述,命令行属性始终优先于其他属性源。

例如

$ java -jar myapp.jar --spring.application.json='"foo":"bar"'

请看http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

【讨论】:

java -jar csdn-0.1.0.jar --spring.datasource.password=hldh214完美 这正是我想要的!由于 jar 是可执行的,甚至可以在 unix 系统上运行它,只需 ./csdn-0.1.0.jar --spring.datasource.password=hldh214。在 Spring Boot 2 中,任务现在是 bootJar,要添加执行权限,您可以修改 build.gradle 中的 bootJar 任务以添加 launchScript()

以上是关于Spring boot 运行完全可执行的 JAR 并指定 -D 属性的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 完全可执行的 jar,内部没有依赖项

Spring Boot:通过jar包启动

你的第一个Spring Boot应用

Spring Boot 可执行 jar “无效或损坏的 jar 文件”

使用 init.d 运行 Spring Boot Jar 时出错

Spring boot JSF可执行JAR找不到xhtml文件