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:/ 下, 所以该文件会搜索并加载的.
5. application.properties 属性不能是中文, springBoot 是以 iso-8859编码来读取的, 如果属性值一定要有中文, 可以放到application.yml 文件中.
6. SpringBoot参数解析器非常智能, 不管参数名是按照驼峰写法, 还是按照下划线写法, 还是按照连接符写法, 都能自动和Bean中的属性关联起来. 即参数中 server.servlet.contextPath 和 server.servlet.context_path 和 server.servlet.context-path 写法其实都是等价的.
===========================
参数文件内的变量 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
spring.profiles.default=default
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 参数文件
===========================
不同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.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
SpringBoot系列: Java应用程序传参和SpringBoot参数文件的更多相关文章
- java复用和传参
java复用和传参的三种方法总结: (1) 直接在一个类中调用函数 : 1 package test1; 2 3 public class a 4 { 5 public static void get ...
- Java的对象传参问题
在c/c++中对于传参类型,无外乎就是传值.传引用.传指针这几种.但在java中,由于没有指针类型,其传参的方式也发生了相应的变化.之前有搜过相关的知识点一直理解的是:Java的传参方式中主要有两种: ...
- (二)shell中case语句、程序传参、while
2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...
- [Java]_函数传参的疑惑与思考
问题来源于leetcode上的两道题 Path Sum I && II,分别写了两个dfs. void dfs(TreeNode node , int sum , ArrayList& ...
- [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参
[转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...
- h5与小程序互相跳转,传参和获取参数
1.h5跳转到小程序 首先引入js文件 <script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js">< ...
- asp.net Get和Post传参和接收参数
asp.netGet和Post传参和接收参数 Get请求: 对于传参:test.aspx?name=%e5%bc%a0%e4%b8%89 接收参数的方法: Request.QueryString[&q ...
- 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)
详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类 Python中函数参数定义及调用函数时传参 ...
- 【C#基础概念】函数参数默认值和指定传参和方法参数
函数参数默认值和指定传参 最近在编写代码时发现介绍C#参数默认值不能像PL/SQL那样直接设置default,网上也没有太多详细的资料,自己琢磨并试验后整理成果如下: C#允许在函数声明部分定义默认值 ...
随机推荐
- 【hihocoder1167】高等理论计算机科学 (重链剖分 +树状数组)
Descroption 原题链接给你一棵\(~n~\)个点的树和\(~m~\)条链,求两两相交的链有多少对,两条链相交当且仅当有至少一个公共点.\(~1 \leq n, m \leq 10 ^ 5~\ ...
- [CF1132E]Knapsack【暴力搜索】
你有一个容量为\(w\)的背包,和\(8\)件物品,重量分别为\(1~8\)的整数,分别有\(cnt_1 ... cnt_8\),求最大容量. 解法 笨蛋chh一开始打了一个背包模板乱搞压缩容量\(j ...
- 用c#查询各快递物流信息
前面介绍过<用快递100接口查询各快递物流信息>,里面用的是API接口,但有些快递不支持这种方式,本文介绍的HtmlAPI支持所有快递公司. 支持包括EMS.邮政.顺丰和申通在内的所有公司 ...
- 录毛线脚本,直接抓包手写最简洁的LoadRunner性能测试脚本
通常情况下,我们测试性能先要做单场景测试,即某个功能,一般情况下,这个功能依赖的功能(可能是需要先登录)不会太多, 如果录制脚本的话,会录制到很多无关的请求,大大增加了脚本的复杂度以及调整脚本的工作量 ...
- luogu5024 [NOIp2018]保卫王国 (动态dp)
可以直接套动态dp,但因为它询问之间相互独立,所以可以直接倍增记x转移到fa[x]的矩阵 #include<bits/stdc++.h> #define CLR(a,x) memset(a ...
- centos7破解安装fisheye和Crucible
背景介绍: Atlassian的东西相信大家都不陌生,JIRA.Confluence……虽然说这些产品都要收费,也可以申请试用: FishEye 可以方便地查看代码,而Crucible 则是进行Cod ...
- 在MacOS上使用gdb(cgdb)调试Golang程序
如果你在MacOS上使用GDB工具载入Golang程序时无法载入,这篇文章可以解决.本文不具体介绍调试的方法,网上的文章太多了就不赘述了. cgdb使用的是gdb的内核,方法和原理试用本文. 问题分析 ...
- Fiddler安装证书
1.打开Fiddler,点击工具栏中的Tools——>Fiddler Options… 2.切换到 HTTPS 选项卡,勾选 Capture HTTPS CONNECTs,勾选 De ...
- 第二十八篇-Fragment静态用法
效果图: 首先,先大致布局成这个形状 看动画中,横看分为两个区域,所以整体是一个水平排列 设置外层LinearLayout的参数 android:orientation="horizonta ...
- 第十一节、Harris角点检测原理(附源码)
OpenCV可以检测图像的主要特征,然后提取这些特征.使其成为图像描述符,这类似于人的眼睛和大脑.这些图像特征可作为图像搜索的数据库.此外,人们可以利用这些关键点将图像拼接起来,组成一个更大的图像,比 ...