SpringBoot系列:Java应⽤程序传参和SpringBoot参数⽂件
===========================
向java 程序传参的⼏种形式:
===========================
1. 使⽤ OS 环境变量.
这个不推荐.
2. 使⽤JVM变量, 最常⽤的是 -D 参数. -XX 和-X 参数是⽤来设定内存和GC参数, 不同JVM的参数设置可能不同.
-D 和 -X 参数紧跟在 java 后⾯.
java -ding=UTF-8 -jar abc.jar
java -Dkey=value1 -jar abc.jar
在java 程序中, 可以通过下⾯的⽅式获取-D的参数:
String value = Property("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 参数⽂件相关的⼏个参数
===========================
-------------------
-------------------
$ java -jar myproject.jar --fig.name=myproject
$ java -jar myproject.jar --fig.location=classpath:/default.properties,classpath:/override.properties
-------------------
-------------------
如果参数是⽬录的话, ⽬录应以 / 结尾, spring 将在指定的⽬录中查 fig.name 对应的⽂件.
$ java -jar myproject.jar --fig.location=your/config/dir/
$ java -jar myproject.jar --fig.location=classpath:job1.properties,classpath:job2.properties
file:./config/ 索索jar程序所在⽬录的config ⼦⽬录
file:./ 搜索与 jar 程序的同⽬录下的配置⽂件
classpath:/config/ 搜索jar 包内部 classes/config ⽬录下的配置⽂件
classpath:/ 搜索jar 包内部 classes ⽬录下的配置⽂件
需要说明的是: ⼀旦指定了fig.location 参数, SpringBoot将不再搜索上⾯4个⽬录.
-------------------
-------------------
上⾯已经提及, ⼀旦指定了fig.location 参数, SpringBoot将仅仅搜索参数设定的⽬录, 但如果指定的是
特别说明:
1. ⼀旦指定了fig.location 参数, SpringBoot将不再搜索上⾯4个⽬录.
2. 即使是在⼀个⽬录中到了参数⽂件, SpringBoot仍会其他⽬录中搜索并加载参数⽂件. SpringBoot是按照参数项级做override, ⽽不是参数⽂件级的override.
3. 如果fig.location 参数指定的是⽂件, SpringBoot将不会加载profile-specific变体⽂件, 如果fig.location 参数指定的是⽬录, SpringBoot仍会搜索并加载profile-specific变体⽂件.
4. 开发的时候我们通常会将application.properties放到 /src/main/resources/ 下, 在打包成executable war/jar后, 该参数⽂件会被⾃动转移到classpath:/ 下, 所以该⽂件会搜索并加载的.
5. application.properties 属性不能是中⽂, springBoot 是以 iso-8859编码来读取的, 如果属性值⼀定要有中⽂, 可以放到
6. SpringBoot参数解析器⾮常智能, 不管参数名是按照驼峰写法, 还是按照下划线写法, 还是按照连接符写法, 都能⾃动和Bean中的属性关联起来. 即参数中 tPath 和 t_path 和 t-path 写法其实都是等价的.
===========================
参数⽂件内的变量 placeholder
===========================
springboot中文application.properties的变量placeholder
app.name=MyApp
app.description=${app.name} is a Spring Boot application
===========================
针对不同环境的 profile 参数⽂件
===========================
不同profile的参数⽂件命名规范是 application-{profile}.properties.
不管指定了什么样的环境profile, SpringBoot 总是先加载 application.properties, 然后再加载指定的profile参数⽂件, 如果没有到指定的profile参数⽂件, 还可以加载⼀个default参数⽂件.
# 以下是 application.properties ⽂件内容.
# 其中 spring.profiles.active 参数或是写死, 或是通过命令⾏传⼊.
spring.profiles.active=dev
spring.profiles.default=default
# 以下是 application-prod.properties ⽂件内容
spring.datasource.sql.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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论