第01章 Spring-Boot 应用文件application配置
第01章 Spring-Boot 应用文件application配置
文章目录
- 第01章 Spring-Boot 应用文件application配置
- 前言
- 目标
- 环境
- 随机值配置
- 属性占位符
- 应用配置文件加载顺序
- 应用配置文件键值对覆盖
- 常用配置
- 应用端口配置
- 时间格式化配置
- 时区设置
- 多环境配置
- 多环境配置的好处
- Properties 多环境配置
- YAML多环境配置
- 两种配置方式的比较
- 如何使用
- 配置高级篇
- 一、配置方式
- 二、如何实现多环境配置
- 三、配置信息的加载顺序
- 四、自定义参数
- 五、参数引用
- 六、使用随机数
- 七、命令行参数
- 七、命令行参数
前言
为什么要使用 Spring-Boot?
可参考官方文档。
什么是 Spring-Boot?
可参考官方文档说明。
官方地址
https://spring.io/projects/spring-boot
目标
- 完成 Jenkins 在 Docker 中的安装与配置。
- 安装在 Docker 中的 Jenkins 能正常对外提供服务。
- 在外部开发环境中能正常访问和使用 Jenkins 持续集成服务。
环境
**VMware:**VMware Workstation 14 Pro
**Linux:**CentOS7.4
**Docker:**18.06.0-ce, build 0ffa825
**Jenkins:**Jenkins2.121.1
**JDK:**jdk1.8.0_172
**Spring-Boot:**2.0.4
**Eclipse:**Eclipse Neon.3 (4.6.3)
spring-tool-suite:
Version: 3.8.4.RELEASE
Build Id: 201703310825
Platform: Eclipse Neon.3 (4.6.3)**Maven:**3.5.0
随机值配置
xxx.secret=${random.value}
xxx.number=${random.int}
xxx.bignumber=${random.long}
xxx.number.less.than.ten=${random.int(10)}
xxx.number.in.range=${random.int[1024,65536]}
在应用代码中可以使用注解读取:@Value(value = "${xxx.secret}")
注:出现黄点提示,是要提示配置元数据,可以不配置
属性占位符
当application.properties里的值被使用时,它们会被存在的Environment过滤,所以你能够引用先前定义的值(比如,系统属性)。
xxx.name=www.google.com
xxx.desc=${xxx.name} is a domain name
应用配置文件加载顺序
Application配置文件,加载按优先级排序,位置高的将覆盖位置低的
当前目录下的一个/config子目录
当前目录
一个classpath下的/config包
classpath根路径(root)
这个列表是按优先级排序的(列表中位置高的将覆盖位置低的)
应用配置文件键值对覆盖
应用配置文件的加载顺序,相同的键值对会对值进行覆盖,后面的会覆盖前面的。
- @TestPropertySource 注解
- 命令行参数
- Java系统属性(System.getProperties())
- 操作系统环境变量
- 只有在random.*里包含的属性会产生一个RandomValuePropertySource
- 在打包的jar外的应用程序配置文件(application.properties,包含YAML和profile变量)
- 在打包的jar内的应用程序配置文件(application.properties,包含YAML和profile变量)
- 在@Configuration类上的@PropertySource注解
- 默认属性(使用SpringApplication.setDefaultProperties指定)
常用配置
应用端口配置
server.port=8090
时间格式化配置
spring: jackson.time-zone: Asia/Shanghaijackson.date-format: yyyy-MM-dd HH:mm:ss
时区设置
spring: jackson.time-zone: Asia/Shanghai
注意:使用
YAML
代替Properties
写法,冒号后面加个空格
多环境配置
多环境配置的好处
1.不同环境配置可以配置不同的参数
2.便于部署,提高效率,减少出错
Properties 多环境配置
1.配置激活选项
spring.profiles.active=dev
2.添加其他配置文件
application-dev.properties
application-test.properties
application-prod.properties
application.properties
YAML多环境配置
1.配置激活选项
spring:profiles:active: dev
2.在配置文件添加三个英文状态下的短横线即可区分
---
spring:profiles: dev
两种配置方式的比较
Properties配置多环境,需要添加多个配置文件,
YAML
只需要一个配件文件2.书写格式的差异,
yaml
相对比较简洁,优雅YAML
的缺点:不能通过@PropertySource
注解加载。如果需要使用@PropertySource
注解的方式加载值,那就要使用properties文件。
如何使用
java -jar myapp.jar --spring.profiles.active=dev
配置高级篇
一、配置方式
1、Spring Boot 应用的配置内容都可以统一集中在src/main/resource/application.properties文件中进行配置。
根据我们引入的不同Starter模块,可以在这里定义容器端口号、数据库连接ixnxi、日志级别等各种配置信息。
2、支持现在被广泛推荐使用的YAML文件。
YAML(英语发音类似camel)是一个可读性高,用来表达资料序列的格式。
全称是:YAML Ain’t a Markup Language,不是一种标记语言。
YAML的意思其实是:Yet Another Markup Language(仍是一种标记语言),但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而用反向缩略语重新命名。
YMAL设计参考了多种语言,包括C语言、python、perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。
YMAL特点:
YMAL的语法和其他高阶语言类似,并且可以简单地表达清单、散列表、标量等形态。
使用空白符号缩排和大量依赖外观的特色,特别适合来表达或编辑数据结构、各种设定文档、文件大纲。
比较适合表达阶层式的数据结构,也可以用精致的语法表示关联性(relational model)的资料。
YMAL使用空白符号和分行来分割资料,使得它特别适合用 grep/python/perl/ruby 操作。
巧妙避开各种封闭符号,如引号、各种括号等,这些符号在巢状结构时会变得复杂而难以辨认。
——维基百科
YAML 采用的配置格式不像properties的配置那样以单纯的键值对形式来表示,而是以类似大纲的缩进形式来表示。
YMAL还可以在一个单个文件中通过使用 spring.profies 属性来定义多个不同的环境变量。比如默认、指定等形式。
server:
port: 8881
—
spring:
profiles: testserver:port: 8882\---spring:profiles: prodserver:port: 8883
注意:YMAL目前还有一些不足,它无法通过@PropertySource注解来加载配置。但是,YAML将属性加载到内存中保存的时候是有序的,所以当配置文件中的信息需要具备顺序含义的时候,YAML的配置方式比起properties配置文件更有优势。
二、如何实现多环境配置
在Spring Boot中,多环境配置的文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
至于具体哪个配置文件会被加载,需要在application.properties 文件中通过 spring.profiles.active 属性来设置。
可在启动时动态修改这个配置属性值:
java -jar xxx.jar --spring.profiles.active=prod
总结多环境的配置思路:
1、在application.properties 中配置通用内容,并设置 spring.profiles.active=dev,以开发环境为默认配置
2、在application-{profile}.properties 中配置各个环境布偶她能更多内容。
3、通过命令行方式去激活不同环境的配置。
三、配置信息的加载顺序
为了能够更加合理的重写各属性的值,Spring Boot 使用了下面这种较为特别的属性加载顺序:
1、在命令行中传入的参数。
2、SPRING_APPLICATION_JSON 中的属性。SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中的内容。
3、java:com/env 中的 JNDI 属性。
4、Java的系统属性,可以通过 System.getProperties() 获得的内容。
5、操作系统的环境变量。
6、通过 random.* 配置的随机属性。
7、位于当前应用 jar包之外,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YMAL定义的配置文件。
8、位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YMAL定义的配置文件。
9、位于当前应用 jar包之外的application.properties和YMAL配置内容。
10、位于当前应用 jar包之内的application.properties和YMAL配置内容。
11、在@Configuration注解修改的类中,通过@PropertySource注解定义的属性。
12、应用默认属性,使用SpringApplication.setDefaultProperties定义的内容。
优先级按上面的顺序由高到低,数字越小优先级越高。
可以看到,其中第7和第9项都是从应用jar包之外读取配置文件,所以,实现外部化配置的原理就是从此切入,为其制定外部配置文件的加载位置来取代jar包之内的配置内容。
这样,我们的工程在配置中就变得非常干净,只需要在本地放置开发需要的配置即可,而不用关系其它环境的配置,由其对应环境的负责人去维护即可。
四、自定义参数
除了可以在 Spring Boot 的配置文件中设置各个 Starter 模块中预定义的配置属性,也可以在配置文件中定义一些我们需要的自定义属性,在 application.properties中定义:
you.name=kony
you.age=18
在应用中可以通过@Value注解来加载这些自定义的参数。
@Service
public class person{
@Value("${you.name}")private String name;@Value("${you.age}")private int age;getter...setter...
}
@Value注解加载属性值支持两种表达式来进行配置:
1、一种是PlaceHolder方式,格式为${…}。
2、另一种是使用 SpEL 表达式(Spring Expression Language),格式为 #{…}。
五、参数引用
在application.properties 中的各个参数之间可以直接通过使用 PlaceHolder 的方式来进行引用。
you.name=kony
you.age=18
person.desc=my name is ${you.name} and age ${you.age}
六、使用随机数
在一些特殊情况下,希望有些参数每次被加载的时候不是一个固定的值,比如密码、服务端口等。在Spring Boot的属性文件中,可以通过使用¥{random}配置来阐释随机的int、long、string值。而不需要在程序中通过编码来实现这些逻辑。
配置方式有以下几种:
#随机字符串
you.name=${random.value}
#随机 int
you.age=${random.int}
#随机long
you.long=${random.long}
#10以内的随机数
you.random.scope1=${random.int(10)}
#10-20的随机数
you.random.scope2=${random.int(10,20)}
该配置可以设置应用端口场景,避免端口冲突。
七、命令行参数
如何启动Spring Boot 应用?
使用命令:java -jar,该命令除了启动应用之外,还可以在命令行中指定应用的参数,比如 java -jar xxx.jar --server.port=8080,直接以命令行的方式来设置server.port属性。
连续两个减号–就是对application.properties 中的属性值进行赋值的标识,相当于在文件中添加属性server.port=8080。
you.age=${random.int}
#随机long
you.long=${random.long}
#10以内的随机数
you.random.scope1=${random.int(10)}
#10-20的随机数
you.random.scope2=${random.int(10,20)}
该配置可以设置应用端口场景,避免端口冲突。
七、命令行参数
如何启动Spring Boot 应用?
使用命令:java -jar,该命令除了启动应用之外,还可以在命令行中指定应用的参数,比如 java -jar xxx.jar --server.port=8080,直接以命令行的方式来设置server.port属性。
连续两个减号–就是对application.properties 中的属性值进行赋值的标识,相当于在文件中添加属性server.port=8080。
通过命令行来修改属性值是 Spring Boot 非常重要的一个特性。
第01章 Spring-Boot 应用文件application配置相关推荐
- 《深入理解 Spring Cloud 与微服务构建》第十六章 Spring Boot Security 详解
<深入理解 Spring Cloud 与微服务构建>第十六章 Spring Boot Security 详解 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...
- 第五章 Spring Boot的数据库编程
若有错,请指出 第二章 搭建Springboot环境,配置视图解析器jsp页面 第三章 全注解下的Spring Ioc 第四章 约定编程-Spring AOP 第五章 Spring Boot的数据库编 ...
- Spring Boot 2.0 配置图文教程第 2 章 Spring Boot 配置## 书信息 demo.book.name=[Spring Boot 2.x Core Action] demo.b
本章内容 1.自定义属性快速入门 2.外化配置 3.自动配置 4.自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 第 2 章 Spring B ...
- SpringBoot学习笔记-2:第二章 Spring Boot 配置
第二章 Spring Boot 配置 1.YAML 配置 SpringBoot 全局配置文件 application.properties application.yml YAML 以数据为中心,比 ...
- 《Spring Boot极简教程》第8章 Spring Boot集成Groovy,Grails开发
第8章 Spring Boot集成Groovy,Grails开发 本章介绍Spring Boot集成Groovy,Grails开发.我们将开发一个极简版的pms(项目管理系统). Groovy和Gra ...
- 是时候搞清楚 Spring Boot 的配置文件 application.properties 了!
在 Spring Boot 中,配置文件有两种不同的格式,一个是 properties ,另一个是 yaml . 虽然 properties 文件比较常见,但是相对于 properties 而言,ya ...
- 19年8月 字母哥 第一章 spring boot 2.x基础及概念入门 这里全部看完了 热部署没出来 第二章在前面2页 用热点公司网不行
http://springboot.zimug.com/1233100 文档 http://www.zimug.com/page/5 字母哥个人博客 11111 第一章 spring bo ...
- Spring boot yml文件的书写格式
Spring boot yml文件的书写格式 使用ide 创建好spring boot文件格式后https://blog.csdn.net/weixin_42292697/article/detail ...
- springboot系列课程笔记-第一章-Spring Boot入门
一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...
最新文章
- linux查看指定程序的资源占用
- spring mvc项目中利用freemarker生成自定义标签
- linux c 实现函数 trim 除去字符串首尾空格
- 关于运行中输入ping后,跳出“打开方式”选择对话框的问题
- 基于visual Studio2013解决C语言竞赛题之1081shell排序
- 随堂小测app冲刺(三)
- 基于python和opencv的人脸识别
- 差分隐私 机器学习_微软发布多个建置可信AI的问责机器学习工具
- Android ListView更改item背景颜色
- Affinity Publisher for Mac排版设计工具
- Undefined index: submit in的错误处理
- PS给证件照换背景颜色
- 触摸屏一体机的类型有哪些
- Index Notation
- 使用sql服务器发送贺卡_发送免费电子贺卡的最佳网站
- javashop源码,javashop电商系统源码授权
- 2020张宇1000题【好题收集】【第四章:多元函数微分学】【第五章:二重积分】
- 04 : mysql 基础命令操作,字符集
- 小程序云开发(九):WeUI
- Wind安装程序出现x80070652错误问题