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 “无效或损坏的 jar 文件”