springboot(3)——配置文件和自动配置原理详细讲…
2019-11-06 09:40:55来源:博客园 阅读 ()
springboot(3)——配置文件和自动配置原理详细讲解
原文地址
目录
概述
1. 配置文件作用
2.配置文件位置
3.配置文件的定义
3.1如果是定义普通变量(数字 字符串 布尔)
3.2如果是定义对象、Map
3.3如果是定义数组
4.配置文件的使用
4.1定义一个部门类和一个person类
4.2书写配置文件
4.3将配置文件属性的值绑定到指定类的属性上
4.4加载指定位置的配置文件
5.配置文件中使用占位符
6.Profile多环境配置
7.配置文件的位置
8.Springboot自动配置的原理
概述
Springboot开发中很重要的一句话就是约定大于配置,有很多配置都有默认值,我们使用即可。但是如果要根据自己的需求替换默认配置的话,可以通过配置文件修改。
1. 配置文件作用
主要用来修改Boot中相关默认的配置,有application.properties或者application.yml(application.yaml)两种配置方式进行配置。
2.配置文件位置
SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件
3.配置文件的定义
对于application.properties配置文件,我们只需通过如下类似的键值对进行配置相关参数即可,这里主要看下yml方式要注意的地方
server.port=8080
在yml中如何定义配置,格式如下
server:
port: 8080
k:(空格)v表示一对键值对(空格必须有);以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的,
3.1如果是定义普通变量(数字 字符串 布尔)
直接使用k: v:书写即可,比如 age: 14
如果是字符串,双引号中的特殊字符会表达本身想表示的意思,单引号中的特殊字符将作为普通字符输出
name: "zhangsan \n lisi" 则输出 zhangsan 换行lisi
name: 'zhangsan \n lisi' 则输出 zhangsan \n lisi
3.2如果是定义对象、Map
Person:
name: 李四
age: 14
行内写法
Person: {name: 李四,age: 14}
3.3如果是定义数组
用-值表示数组中的一个元素
pets:
-cat
-dog
行内写法
pets: {cat,dog}
4.配置文件的使用
4.1定义一个部门类和一个person类
4.2书写配置文件
person:
id: 1
name: lisi
age: 12
flag: true
maps: {k1: v1,k2: v2}
lists:
- cat
- dog
department:
id: 1
name: 开发部门
4.3将配置文件属性的值绑定到指定类的属性上
要能绑定配置文件中的属性,只有使用注解@Configuration或者@Component标注让一个类成为容器中的组件才可以绑定属性,不管是yml还是properies配置文件,读取里面的值绑定到属性的方式有两种。
第一种:使用@ConfigurationProperties(prefix = "person")注解,其中的prefix表示这个前缀下面的所有属性
第二种:使用@value()注解,括号中可以是字面量、${配置文件中的值}、#{SpEL表达式},
测试
注意:
1. 使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法
2.绑定的时候导入下面依赖代码自动提示
3.两种方式比较
4.将上面yml文件的person配置换成properties配置,同样绑定成功
person.id=1
person.name=zhangsan
person.age=13
person. maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.department.id=2
person.department.name=开发部门
4.4加载指定位置的配置文件
上面两种方式读取的配置文件默认都是全局的即application配置文件,但是所有的配置都写在全局配置文件中就显得很乱,可以单独自己的配置文件,使用@PropertySource注解
5.配置文件中使用占位符
#可以使用随机数
person.id=1${random.uuid}
#可以使用前面配置过的属性
person.name=zhangsan${server.port}
#可以使用自己配置过的属性
person.age=13${person.id}
常用的随机数
6.Profile多环境配置
当我们的应用需要部署到不同的运行环境时,一些配置细节通常会有所不同,最简单的比如日志,生产环境下会将日志级别设置为warn或者更高级别的,并将日志写入日志文件,但是开发环境下需要将日志级别设置为DUBUG,日志输出到控制台即可,如果按照以前的做法,每次发布的时候替换掉配置文件,这样太麻烦了Springboot的Profile就解决了这一问题,命令带参数就搞定
如下图我们可以针对不同环境定义对应的配置文件
在主配置文件中通过spring.profiles.active=dev或者spring.profiles.active=pro选择即可
除了上面这种选择性引入对应的配置文件,常见的其他几种方式如下
1.运行的时候Edit配置文件
2.打包项目的时候
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
7.配置文件的位置
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默
认加载的这些配置文件共同起作用形成互补配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties
这种写法会形成互补配置,特别是在运维的时候,可以运行的时候使用外部一些配置。
比如我在服务器发布了项目wxcrawler
要使用外置配置文件就很简单了,在jar所在目录新建config文件夹,然后放入配置文件,或者直接放配置文件在jar目录
8.Springboot自动配置的原理
我们回顾目录4的知识,可以看到我们在配置文件中配置了Person相关属性的值,要想使用这些值必需定义一个Person的组件,但是我们直接可以使用类似server.port=8080相关的配置,而不用定义相关的组件类,因为boot已经帮我们定义了常见的组件配置类,我们只需定义这配置类的属性值,会自动绑定。那我们到底可以配置哪些类似server.port=8080参数呢,可以查看官网说明
https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference/htmlsingle/#common-application-properties
公众号 java一号 更多java实战项目资料、技术干活。更重要的是小猿愿成为你编程路上的一个朋友!
用心写好每一篇文章,真心对待每一个读者
文章首发地址: www.javayihao.top
首发公众号: java一号
原文链接:https://www.cnblogs.com/javayihao/p/11806697.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
- nacos~配置中心功能~springboot的支持 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash