(2)Spring Boot配置
文章目录
配置文件
Spring Boot
默认自动加载 类路径 下面的名字为 application.yml
| application.properties
的配置文件,它们为 全局配置文件 ;
配置文件用于修改,Spring Boot
自动配置的默认值;
当 properties
和 yml
文件都存在的时候,两个配置文件的内容都会得到加载,但是 properties
的优先级更高,也就是它的内容会覆盖掉 yml
文件的同名内容 ;
YAML 语法
基本语法
- 使用 缩进表示层级关系
- 缩进时不允许使用
tab
,只允许使用空格
- 缩进的空格数目无所谓,只要相同层级的元素,左侧对齐即可
- 大小写敏感
支持的三种数据结构
对象:键值对的集合
键值对之间需要有个空格,
K:(空格)V
多行写法:
person:
name: yiaz
age: 23
单行写法:
person: {name: yiaz,age: 23}
数组:一组按次序排列的值
多行写法:
pets:
- cat
- dog
单行写法:
pets: [dog,cat]
字面量:字面值
字符串默认不需要加上单引号、双引号;双引号不会转义特殊字符,单引号会转义,将特殊字符,转义为普通的字符了,比如 ‘\n’ 就输出 ‘\n’ ,而不是换行了;
可以嵌套使用三种类型;
单元测试
在 Spring Boot
里面,单元测试不再使用 Junit
,而是在测试类上标注下面两个注解:
可以使用属性注入功能:
@RunWith(SpringRunner.class)
@SpringBootTest
public class YiazSpringbootDemoApplicationTests {
@Autowired
private Person person;
@Test
public void contextLoads() {
System.out.println(person);
}
}
配置文件值自动注入
首先我们在 pom
里面配置一个依赖,配置文件处理器,这样在全局配置文件里面写属性,就会有提示:
<!--配置文件处理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
然后,写出对应的 bean
类,我们将配置文件的属性,封装到这个bean
里面,
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
...
使用 @ConfigurationProperties(prefix = "person")
注解,prefix = "person"
是告诉容器,这里注入 前缀是 person 的属性;
其中 @ConfigurationProperties
将bean
中的所有属性与配置文件中的属性一一对应,注入到 bean
里面,也就是如果配置文件里有的属性,但是 bean
里面没有对应的属性,则该属性被忽略;
因为 @ConfigurationProperties
注解,只能为容器中的组件,提供注入功能,因此还需要 @Component
标识下 bean
;
在获取 properties
文件里面的属性值的时候,可能会有乱码,设置下:
支持松散绑定。比如bean
的属性名为 lastName
,则配置文件中对应的属性名可以是 lastName
或 last-name
;
不支持 SPEL
;
支持 JSR303
数据校验,在 bean
上使用注解 @Validated
,然后在需要检验的字段上,使用 注解进行检验,跟学 SpringMvc
的时候一样 ;
支持复杂类型封装;
@Value 获取配置文件属性的值
注解的值,可以是字面值、EL表达式、SPEL
;
不支持松散绑定、 JSR303
数据校验;
不支持复杂类型封装;
因此,如果只是在代码中,需要获取一下配置文件中的某个属性值,则可以使用 @Value
,如果是需要将配置文件的值,封装到 bean
里面,则使用 @ConfigurationProperties
;
加载指定配置文件
@ConfigurationProperties
默认加载全局配置文件;
如果我们自己有配置文件,则可以通过 @PropertySource
来指定下文件的位置,然后让 @ConfigurationProperties
去加载 ;
优先级问题
自定义配置文件低于全局配置文件,yml
低于 properties
文件 ;
全局配置文件,Spring Boot
默认加载,然后如果我们加载我们自己的配置文件,然后两个文件中有相同的属性名,则属性值取优先级高的那个;
可以想成所有的配置文件,最后由于属性值覆盖问题,到内存里面都可以看成一张拼接的配置文件了;
加载Spring 的配置文件
使用 @ImportResource
加载 Spring
的配置文件:
@ImportResource(locations = {"classpath:xxx"})
将这个注解写在一个配置类上,可以就写在启动类上;
为容器中添加组件
定义一个配置类,在配置里面进行组件的添加;
使用 @Bean
注解,其可以标注在方法上,或者当源注解使用,这里仅仅关注标注在方法上;
标注在方法上的作用是:将方法的返回值添加到容器中,在容器中的默认id
就是方法名;
@Configuration
public class Myconfig {
@Bean
public Pet pet(){
return new Pet();
}
}
随机数 & 占位符
Profile
在开发的时候,可以写多个配置文件,分别给 生产、开发 环境使用,方便切换,不需要更改配置;
Spring Boot
默认使用 application.properties
,我们可以在里面激活其他配置文件;
但是激活的配置文件,名字不是随便取的,必须是 application-{profile}.properties/yml
;
激活的配置文件,优先级高于 默认的全局配置文件 ;
在全局配置文件中使用 spring.profiles.active=xxx
激活其他配置文件,其中 xxx
是 {profile}
的值 ;
也可以使用 yml
的多文档方式;
在 yml
中通过 ---
划分文档块:
server:
port: 8081
spring:
profiles:
active: dev
---
spring:
profiles: prod
server:
port: 8082
---
spring:
profiles: dev
server:
port: 8089
这样激活的就是 dev
,端口号就使用 8089
;
还可以通过 命令行 指定,这样配置文件中的激活,就不会奏效;
通过在 java -jar xxxx.jar
后面添加 --spring.profiles.active=xx
来指定激活的配置文件 ;
还可以通过 虚拟机参数 这样配置文件中的激活,同样不会奏效:
通过传入 -Dspring.profiles.active=xxx
激活配置文件 ;
配置文件的位置
我们前面一直说,Spring Boot
会默认加载 类路径下面的 application.properties/yml
文件作为默认的全局配置文件;
其实 Spring Boot
在运行的时候,会依次从下面的四个地方,寻找 application.properties/yml
,当作默认配置文件 ;
- file: ./config/
- file: ./
- classpath: ./config/
- classpath: ./
他们的优先级,从上到下,优先级从高到低 ;
只要在特定位置上特定名字的配置文件都会被加载,也就是将四个属性,分开写成四份配置文件,分别放在四个地方,最后也会得到全部加载(互补配置);
如果属性名一样,会产生覆盖现象,高优先级的覆盖低优先级的 ;
我们也可以通过 spring.config.location
来改变默认位置 ;这个改变有点不一样,不是我们想象的改变;
它只在 命令行 有效,并且它指定的配置文件具有最高优先级;以前的四个地方的配置文件,还是会得到加载;
一般是用于运维的时候,项目已经打包好了,后期需要改变一些配置,我们只需要写个配置文件,里面写需要修改的配置,然后命令行启动项目,指定下配置文件的路径,即可覆盖掉想修改的属性;
外部配置文件加载顺序
@Coditional 扩展注解
当我们写配置类的时候,有时候需要判断下,在一定条件下使用,才希望配置生效,就可以使用 @Coditional
注解,它是 Spring
的原生注解;
Spring Boot
对 @Coditional
进行了扩展:
注解可以用在方法或者类上;
同时这也是自动配置类的常用的注解,那么多的自动配置,都被加载,但是不是所以的自动配置都奏效,只有在一定条件下成立的才奏效;
可以在配置里面设置 debug=true
这样启动项目,控制台就出打印出哪些配置项被启用,哪些没有被启用;
(2)Spring Boot配置的更多相关文章
- Spring Boot -- 配置切换指南
一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...
- Spring Boot 配置优先级顺序
一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一 ...
- spring boot 配置注入
spring boot配置注入有变量方式和类方式(参见:<spring boot 自定义配置属性的各种方式>),变量中又要注意静态变量的注入(参见:spring boot 给静态变量注入值 ...
- Spring boot配置多个Redis数据源操作实例
原文:https://www.jianshu.com/p/c79b65b253fa Spring boot配置多个Redis数据源操作实例 在SpringBoot是项目中整合了两个Redis的操作实例 ...
- spring boot配置springMVC拦截器
spring boot通过配置springMVC拦截器 配置拦截器比较简单, spring boot配置拦截器, 重写preHandle方法. 1.配置拦截器: 2重写方法 这样就实现了拦截器. 其中 ...
- spring boot配置mybatis和事务管理
spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...
- [转] Spring Boot配置多个DataSource
[From] https://www.liaoxuefeng.com/article/001484212576147b1f07dc0ab9147a1a97662a0bd270c20000 Sprin ...
- Spring boot 配置异步处理执行器
示例如下: 1. 新建Maven 项目 async-executor 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...
- Spring boot配置404、500页面
Spring boot 配置404页面很简单,如果你访问的url没有找到就会出现spring boot 提示的页面,很明显Spring boot不用配置就可以显示404页面了. 在template下创 ...
- Spring Boot 配置元数据指南
1. 概览 在编写 Spring Boot 应用程序时,将配置属性映射到 Java bean 上是非常有用的.但是,记录这些属性的最好方法是什么呢? 在本教程中,我们将探讨 Spring Boot C ...
随机推荐
- 中山纪中集训Day2又是测试(划水)
A组T1 bzoj 2674 Attack Description chnlich 非常喜欢玩三国志这款游戏,并喜欢用一些策略出奇制胜.现在,他要开始征服世界的旅途了.他的敌人有N 座城市和N 个太守 ...
- 三层交换+DHCP实验详解
- 升级springboot导致的业务异步回调积压问题定位
1. 起因 A与B云侧模块特性联调的过程中,端侧发现云侧返回有延迟的情况. 7月19日与A模块一起抓包初步判断,B业务有积压的情况. 7月18日已经转侧B业务现网版本,由于使用一套逻辑.故可能存在请求 ...
- scala_基础
笔记前言:本笔记为scala的入门基础和scala基础使用.主要参考为书籍和推荐较高的博客.主要目的为供个人总结学习. 所有来自网络参考内容不一一列出. 一.面向过程 1.变量体 val 标识符:声 ...
- [面试]快来测测你的C++水平
在32位编译环境下进行测试. 以下代码运行结果是什么? #include <iostream> using namespace std; class D { public: static ...
- T-MAX--冲刺合集
目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 照片 各组员对于最终项目成果的贡献度 这个作业属于哪个课程 2019秋福大软件工程实践Z班 (福州大学) ...
- 机器不学习:CNN入门讲解-为什么要有最后一层全连接
哈哈哈,又到了讲段子的时间 准备好了吗? 今天要说的是CNN最后一层了,CNN入门就要讲完啦..... 先来一段官方的语言介绍全连接层(Fully Connected Layer) 全连接层常简称为 ...
- 范仁义web前端介绍课程---5、webstorm的下载安装
范仁义web前端介绍课程---5.webstorm的下载安装 一.总结 一句话总结: webstorm破解版搜索:webstorm破解 site:52pojie.cn 编辑器随便选用,功能都差不多,哪 ...
- linux清除git账号密码
执行vi ~/.git-credentials,可以看到被保存的账号密码,删掉或者修改都可以了! eg:http://账号:密码@git仓库http地址
- Debian9安装QT5.12.3
打开虚拟机,打开火狐浏览器,输入网址下载QT5.12(linux版本,约13.G) download.qt.io/archive/qt/5.12/5.12.0/ 文件默认下载在Downloads文件夹 ...