java应用程序级变量,SpringBoot系列: Java应用程序传参和SpringBoot参数文件

===========================

向java 程序传参的几种形式:

===========================

1. 使用 OS 环境变量.

这个不推荐.

2. 使用JVM变量, 最常用的是 -D 参数. -XX 和-X 参数是用来设定内存和GC参数, 不同JVM的参数设置可能不同.

-D 和 -X 参数紧跟在 java 后面.

java -Dfile.encoding=UTF-8 -jar abc.jar

java -Dkey=value1 -jar abc.jar

在java 程序中, 可以通过下面的方式获取-D的参数:

String value = System.getProperty("key", "defaultvalue");

3. 通过设定 JAVA_OPTS 或 JAVA_TOOL_OPTIONS 这两个操作系统的环境变量传参.

我们还可以通过设定 JAVA_OPTS OS 环境变量的方式, 新启动JVM将会自动读取这两个OS环境变量.

JAVA_OPTS="-Djava.library.path=/export/home/actuate7/bin -Xms256m -Xmx512m"

java -jar abc.jar

4. 使用应用程序自己的参数.

java -jar abc.jar --argument2=value2

java -jar abc.jar --server.port=9000

特别说明:

1. [推荐] 可以通过 --参数 方法, 设定SpringBoot的参数, 比如:

java -jar abc.jar --server.port=9000

java -jar abc.jar --spring.profiles.active=prod

2. 可以通过 -D参数或 JAVA_OPTS/JAVA_TOOL_OPTIONS 操作环境变量, 设定SpringBoot参数, 比如:

java -Dserver.port=9000 -jar abc.jar

--spring.profiles.active=prod

===========================

SpringBoot 参数文件相关的几个参数

===========================

-------------------

spring.config.name 参数

-------------------

spring.config.name 参数指定参数文件名, 不能加路径和文件扩展名.

spring.config.name 参数缺省取值是 application,

$ java -jar myproject.jar --spring.config.name=myproject

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

-------------------

spring.config.location 参数

-------------------

spring.config.location 参数既可传入目录, 也可以传入具体文件名, 甚至可以传入多个目录或文件(以逗号分割).

如果参数是目录的话, 目录应以 / 结尾, spring 将在指定的目录中查找 spring.config.name 对应的文件.

$ java -jar myproject.jar --spring.config.location=your/config/dir/

$ java -jar myproject.jar --spring.config.location=classpath:job1.properties,classpath:job2.properties

spring.config.location 参数如果缺省, SpringBoot将从下面四个路径搜索参数文件, 搜索的顺序是:

file:./config/ 索索jar程序所在目录的config 子目录

file:./ 搜索与 jar 程序的同目录下的配置文件

classpath:/config/ 搜索jar 包内部 classes/config 目录下的配置文件

classpath:/ 搜索jar 包内部 classes 目录下的配置文件

需要说明的是: 一旦指定了spring.config.location 参数, SpringBoot将不再搜索上面4个目录.

-------------------

spring.config.additional-location 参数

-------------------

上面已经提及, 一旦指定了spring.config.location 参数, SpringBoot将仅仅搜索参数设定的目录, 但如果指定的是spring.config.additional-location 参数, SpringBoot先搜索参数设定目录, 然后再搜索上面4个目录.

特别说明:

1. 一旦指定了spring.config.location 参数, SpringBoot将不再搜索上面4个目录.

2. 即使是在一个目录中找到了参数文件, SpringBoot仍会其他目录中搜索并加载参数文件. SpringBoot是按照参数项级做override, 而不是参数文件级的override.

3. 如果spring.config.location 参数指定的是文件, SpringBoot将不会加载profile-specific变体文件, 如果spring.config.location 参数指定的是目录, SpringBoot仍会搜索并加载profile-specific变体文件.

4. 开发的时候我们通常会将application.properties放到 /src/main/resources/ 下, 在打包成executable war/jar后, 该参数文件会被自动转移到classpath:/ 下, 所以该文件会搜索并加载的.

===========================

参数文件内的变量 placeholder

===========================

application.properties的变量placeholder

app.name=MyApp

app.description=${app.name} is a Spring Boot application

===========================

参数文件的 profile 参数

===========================

# 以下是 application.properties 文件内容.

# 其中 spring.profiles.active 参数或是写死, 或是通过命令行传入.

spring.profiles.active=dev

environments.dev.url=http://dev.example.com

environments.dev.name=Developer Setup

environments.prod.url=http://another.example.com

environments.prod.name=My Cool App

===========================

针对不同环境的 profile 参数文件

===========================

# 以下是 application.properties 文件内容.

# 其中 spring.profiles.active 参数或是写死, 或是通过命令行传入.

spring.profiles.active=dev

# 以下是 application-production.properties 文件内容

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/db

spring.datasource.username=root

spring.datasource.password=root

# 以下是 application-dev.properties 文件内容

spring.datasource.driver-class-name=org.h2.Driver

spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1

spring.datasource.username=sa

spring.datasource.password=sa

原文:https://www.cnblogs.com/harrychinese/p/java_opt_and_springboot_prop_file.html