SpringBoot配置文件(1)
配置文件
1、配置文件
SpringBoot使用一个全局的配置文件
- application.properties
- application.yml
配置文件名是固定的;
他的作用是修改SpringBoot自动配置的默认值。
YAML a markup language:是一种标记语言
YAML isn’t markup language:不是一种标记语言
YAML以数据为中心,比json,xml更适合做配置文件;
server:
port:8081
xml
<server>
<port>8081</port>
</server>
2、YAML基本语法
1. 基本语法
k:(空格)v: 表示一对键值对(空格必须有)
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一级的
server:
port:8081
path:/hello
属性和值也是大小写敏感
2、值的写法
字面量:就是普通的值(字符串,数字,布尔)
k: v: 字面直接来写
字符串默认不用加上单引号或双引号;
“”:双引号:不会转义特殊字符;也就是说特殊字符会表示成想要的模样
name: “zhangsan \n lisi”: 输出:zhangsan换行lisi
‘’: 单引号:回转仪特殊字符,特殊字符最终只是一普通的字符串
name: ‘zhangsan \n lisi’
输出:zhangsan \n lisi
对象、map(属性和值)(键值对):
k:v 在k的下一行写对象的属性和值,注意缩进
对象还是k:v的方式
friends:
lastName:zhangsan
age:20
行内写法
friends: {lastName: zhangsan,age:18}
数组(List,Set)
pets:
- cat
- dog
- pig
行内写法
pets:[cat,dog,pig]
3、配置文件的值注入
配置文件application.yml 属性
# 配置person
person:
name: zhangsan
boss: false
list:
- lisi
- tom
- jerry
map: {k1: v1,k2: v2}
dog:
name: wangwang
age: 2
age: 16
birthday: 2020/1/26
相关的javaBean 类
/**
* ConfigurationProperties注解的作用是将配置文件中的相关配置与
* 配置这个注解的组件的属性进行一一映射
*
* prefix = "person" 从application.yml中找前缀是person的属性
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private Date birthday;
private String name;
private Integer age;
private List<String> list;
private Map<String,Object> map;
private Dog dog;
private boolean boss;
public class Dog {
private String name;
private Integer age;
pom.xml中需要导入的configuration依赖,可以帮助减少属性注入时出错,他会在写配置时提示对应组件的相关属性
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
SpringBoot测试
@SpringBootTest
class QuickstartApplicationTests {
@Autowired
Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
测试结果:
Person
{birthday=Sun Jan 26 00:00:00 CST 2020, name=‘zhangsan’,
age=22,
list=[lisi, tom, jerry],
map={k1=v1, k2=v2}, dog=Dog{name=‘wangwang’, age=2}, boss=false}
在properties文件中设置对象属性
person.age=19
person.birthday=2020/2/16
person.boss=false
person.dog.age=2
person.dog.name=dog
person.name=张三
person.list=d1,d2,d3
person.map.k1=v1
person.map.k2=v2
需要注意的是:*.properties文件默认编码是GBK,但是idea默认编码是UTF-8编译,所以要将配置文件的编码格式改为UTF-8,并且当有中文时转为GBK编码
输出结果:
Person{birthday=Sun Feb 16 00:00:00 CST 2020, name='张三', age=19, list=[d1, d2, d3], map={k1=v1, k2=v2}, dog=Dog{name='dog', age=2}, boss=false}
2、@Value获取值和@ConfigurationProperties获取值比较
| @ConfigurationProperties | @Value | |
|---|---|---|
| 功能 | 批量注入配置文件中的属性 | 需要一个个指定 |
| 松散绑定 | 支持 | 不支持 |
| Spel | 不支持 | 支持 |
| JSR303数据校验 | 支持 | 不支持 |
| 复杂类型封装 | 支持 | 不支持 |
总结:无论是yml配置文件还是properties文件都可以获取到值,如果我们需要在业务逻辑中获取文件的某个值,那就用@Value,一般情况下用@ConfigurationProperties配置文件注入值。
4、@PropertySource&@ImportResource
@PropertySource可以加载指定的配置文件。
这次我们不在默认的application.properties文件中设置person的属性值,我们在resources目录下再创建一个person.properties文件。那怎样把这个配置文件中所设置的属性注入到组件中呢?
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private Date birthday;
private String name;
private Integer age;
private List<String> list;
private Map<String,Object> map;
private Dog dog;
private boolean boss;
@PropertySource(value = {“classpath:person.properties”})
person.age=19
person.birthday=2020/2/16
person.boss=false
person.dog.age=2
person.dog.name=dog
person.name=李四
person.list=d1,d2,d3
person.map.k1=v1
person.map.k2=v2
我们注释掉原来在application.properties的属性
运行输入结果:
Person{birthday=Sun Feb 16 00:00:00 CST 2020,
name=‘李四’,
age=19, list=[d1, d2, d3], map={k2=v2, k1=v1}, dog=Dog{name=‘dog’, age=2}, boss=false}
也就是说配置没有问题。
@ImportResource:导入Spring的配置文件,让配置文件中的内容生效;
SpringBoot里面没有Spring的配置文件,我们自己创建的Spring xml不能被识别。
例如,我现在创建一个beans.xml,里面放一个bean,现在什么都不做,测试一下IOC容器中有没有这个javaBean。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="helloService" class="cn.edu.nyist.quickstart.service.HelloService"></bean>
</beans>
@Autowired
ApplicationContext ioc;
@Test
void testHelloService() {
boolean b = ioc.containsBean("helloService");
System.out.println(b); //false
}
想让Spring的配置文件生效,只需在配置类上标注@ImportResource注解
@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class QuickstartApplication {
public static void main(String[] args) {
SpringApplication.run(QuickstartApplication.class, args);
}
}
然后再测试输出
true,也就是在beans.xml 中的组件已经成功的交给IOC容器了。
SpringBoot推荐给容器中添加组件的方式是使用全注解的方式。
@Configuration: 指明当前类是一个配置类,就是替代原来的Spring配置文件
@Bean注解
@Configuration
public class MyConfig {
@Bean
public HelloService helloService(){ // 默认生成的bean的id就是方法名
System.out.println("@Bean给IOC配置 HelloService");
return new HelloService();
}
}
/默认生成的bean的id就是方法名
控制台输出
@Bean给IOC配置 HelloService
true
4、配置文件占位符
可以使用随机数
${random.value}, ${random.int}、${random.long}, ${random.int(10)}, ${random.int(1024,65535)}
2、占位符获取之前配置的值
person.age=${random.int}
person.birthday=2020/2/16
person.boss=false
person.dog.age=2
person.dog.name=${person.name:hello}_dog
person.name=张三_${random.uuid}
person.list=d1,d2,d3
person.map.k1=v1
person.map.k2=v2
输出
Person
{birthday=Sun Feb 16 00:00:00 CST 2020, name='张三_87ee8799-7bf3-4282-9334-1916d0f31643',
age=-899833181,
list=[d1, d2, d3],
map={k1=v1, k2=v2},
dog=Dog{name='张三_ae5ea0bf-0242-4376-9276-5ebbfb969866_dog',
age=2},
boss=false}
5、Profile
1.多Profile文件
我们在主配置文件中编写的时候,文件名可以是 application-{profile}.properties/yml

默认使用application.properties配置文件中的设置。
2、yml支持多文档方式
# 第一个文档快
spring:
profiles:
active: prod #激活prod环境的端口号
server:
port: 8080
---
# 第二个文档快
server:
port: 8082
spring:
profiles: dev
---
# 第3个文档快
server:
port: 8083
spring:
profiles: prod
---
# 第4个文档快
3、激活指定的profile
需要指定其他profile中的端口号时,
spring.profiles.active=prod
# prod指的是生产环境,dev,是开发环境的简写
application-prod.properties中指定的端口号是
server.port=8090
第二种方式
在idea 运行/调试配置中
找到program args:输入
--spring.profiles.active=dev

然后保存,运行,这时的环境配置就是dev环境下的内容,当然端口号也变成了8082
第三种方式
在idea中还是运行/调试配置,
点击编辑配置就进来了
还是上面的那个界面
这次设置虚拟机参数

输入-Dspring.profiles.active=dev
这时也能切换到指定环境。
刚开始学,有不足之处,还请大佬们指出
待续…
SpringBoot配置文件(1)的更多相关文章
- 解决spring-boot配置文件使用加密方式保存敏感数据启动报错No decryption for FailsafeTextEncryptor. Did you configure the keystore correctly
spring-boot配置文件使用加密方式保存敏感数据 application.yml spring: datasource: username: dbuser password: '{cipher} ...
- springboot配置文件中使用当前配置的变量
在开发中,有时我们的application.properties某些值需要重复使用,比如配置redis和数据库或者mongodb连接地址,日志,文件上传地址等,且这些地址如果都是相同或者父路径是相同的 ...
- SpringBoot 配置文件存放位置及读取顺序
SpringBoot配置文件可以使用yml格式和properties格式 分别的默认命名为:application.yml.application.properties 存放目录 SpringBoot ...
- [SpringBoot] - 配置文件的多种形式及JSR303数据校验
Springboot配置文件: application.yml application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...
- 将springboot配置文件中的值注入到静态变量
SpringBoot配置文件分为.properties和.yml两种格式,根据启动环境的不同获取不同环境的的值. spring中不支持直接注入静态变量值,利用spring的set注入方法注入静态变量 ...
- SpringBoot配置文件 application.properties详解
SpringBoot配置文件 application.properties详解 本文转载:https://www.cnblogs.com/louby/p/8565027.html 阅读过程中若发现 ...
- Spring-Boot配置文件数据源配置项
Spring-Boot配置文件数据源配置项(常用配置项为红色) 参数 介绍 spring.datasource.continue-on-error = false 初始化数据库时发生错误时,请勿停止 ...
- 【日常错误】spring-boot配置文件读取不到
最近在用spring-boot做项目时,遇到自定义的配置文件无法读取到的问题,通过在appcation.java类上定义@PropertySource(value = {"classpath ...
- SpringBoot——配置文件加载位置及外部配置加载顺序
声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...
- 【SpringBoot】SpringBoot配置文件及YAML简介(三)
SpringBoot配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改Spr ...
随机推荐
- 【WC2014】紫荆花之恋(替罪羊重构点分树 & 平衡树)
Description 若带点权.边权的树上一对 \((u, v)\) 为 friend,那么需要满足 \(\text{dist}(u, v) \le r_u + r_v\),其中 \(r_x\) 为 ...
- AcWing 294. 计算重复
暴力 其实这题的暴力就是个模拟.暴力扫一遍 \(conn(s_1, n_1)\),若出现了 \(res\) 个 \(s_2\). 答案就是 \(\lfloor res / n1 \rfloor\). ...
- Android全面解析之Window机制
前言 你好! 我是一只修仙的猿,欢迎阅读我的文章. Window,读者可能更多的认识是windows系统的窗口.在windows系统上,我们可以多个窗口同时运行,每个窗口代表着一个应用程序.但在安卓上 ...
- 图的遍历DFS
图的遍历DFS 与树的深度优先遍历之间的联系 树的深度优先遍历分为:先根,后根 //树的先根遍历 void PreOrder(TreeNode *R){ if(R!=NULL){ visit(R); ...
- Jmeter之分布式执行测试 (2)
一. 安装Java 1.1下载JDK 1) Windows安装jdk,下载完成后,双击安装 2) Linux解压:tar -zxvf jdk-8u74-linux-x64.gz 1.2 Java环境变 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-构想(14.3.1)
@ 目录 1.需求 2.怎么做 关于作者 1.需求 个人便捷工具 2.怎么做 针对个人未认证订阅号拥有以下权限 以及微信网页的一些权限,但是由于开发微信网页有限制 可定制功能只有被动回复,以及这个素材 ...
- Golang--函数签名相同
Golang--函数签名相同 条件 必须函数的函数名,参数和返回值(类型,个数,顺序)都相同. 验证 例子: 定义函数类型,让相同签名的函数自动实现某个接口. Negtive: package int ...
- 使用Ubuntu手动安装NextCloud
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1) } span.s1 { font-variant-ligatures: no-c ...
- (七)、touch--创建文件或者更新时间戳
一.命令说明与格式 创建文件并更新时间戳,若要创建的文件名已经存在,则仅仅更新时间戳,而不改变其他任何信息 格式:touch [选项] 目录名/文件名 选项: -a ...
- Nginx timeout配置
缘由:客户测试反馈Request failed with status code 504,后续排查应该是nginx未配置超时设置 Step 1.打开nginx.conf查看 缺少keepalive_t ...