配置文件

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:8081path:/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:zhangsanage:20

行内写法

friends: {lastName: zhangsan,age:18}

数组(List,Set)

pets:- cat- dog- pig

行内写法

pets:[cat,dog,pig]

3、配置文件的值注入

配置文件application.yml 属性

# 配置person
person:name: zhangsanboss: falselist:- lisi- tom- jerrymap: {k1: v1,k2: v2}dog:name: wangwangage: 2age: 16birthday: 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 {@AutowiredPerson person;@Testvoid 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>
 @AutowiredApplicationContext ioc;@Testvoid 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: 8083spring: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)相关推荐

  1. SpringBoot配置文件YAML配置注入(详解)

    目录 一.SpringBoot配置文件 1. SpringBoot默认配置文件 2. 配置文件的作用 3. 配置文件的位置 4. 多环境切换 方式一:多配置文件 方式二:一个配置文件(yaml的多文档 ...

  2. 如何保护 SpringBoot 配置文件中的敏感信息

    今日推荐 Java 8 一行代码解决了空指针问题,太厉害了...List中remove()方法的陷阱,被坑惨了!25000 字详解 23 种设计模式,原来可以这么简单!最牛逼的 Java 日志框架,性 ...

  3. springboot配置文件加载顺序

    1.同一目录下,properties配置优先级 > YAML配置优先级. 2.SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同.可放置目录(优先级从高到低) fi ...

  4. redismanager 获取不到yml中的密码_SpringBoot敏感信息加密,springboot配置文件密码加密jasypt...

    使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...

  5. apache 配置文件内使用 8080 端口_【SpringBoot 框架】- SpringBoot 配置文件

    一.SpringBoot配置文件类型 SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话 ,就可以自己编写配置文件进行相应配置,起步依赖spring-bo ...

  6. SpringBoot 配置文件bootstrap和application的区别

    目录 一.SpringBoot配置文件 二.bootstrap和application区别 三.bootstrap和application的应用场景 一.SpringBoot配置文件 bootstra ...

  7. SpringBoot配置文件敏感信息加密,springboot配置文件数据库密码加密jasypt

    使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...

  8. SpringBoot - 配置文件加载位置与优先级

    SpringBoot - 配置文件加载位置与优先级 [1]项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者application.yml文 ...

  9. springboot 配置文件的所有属性

    springboot 配置文件的所有属性 # ---------------------------------------- # 核心属性 # --------------------------- ...

  10. SpringBoot配置文件中spring.profiles.active配置详解

    SpringBoot配置文件中spring.profiles.active配置详解 1.多环境配置 我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发.测 ...

最新文章

  1. Homebrew学习(六)之替换及重置homebrew、Homebred Core、Homebrew cask默认源
  2. NYOJ 630 Problem of IP
  3. 【Android】Home键
  4. 【Java文件操作】txt文件的创建
  5. 2059. 转化数字的最小运算数
  6. 前端学习(3143):react-hello-react之总结生命周期
  7. python切片原理_分析python切片原理和方法
  8. python换算消费品价格,做折实
  9. es 根据_id查询_京东把 Elasticsearch 用得真牛逼!日均5亿订单查询完美解决
  10. Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)
  11. 设置iis网页服务器cpu占比,asp.net-如何防止由于iis中的工作进程而导致CPU使用率100%...
  12. 向数据源DataTable 中添加新的一列,并向其赋值
  13. mysql 存储过程 长字符串_MySQL存储过程--长字符串扯分
  14. opencv 二值化处理
  15. 2021必收藏!Java编程技巧之单元测试用例编写流程
  16. 外贸公司申请一个企业邮箱,国外邮箱大全对比
  17. Linux终端默认配色方案
  18. 兴业数金java开发笔试+一面
  19. 通过Navicat创建MySQL数据库并倒入表数据的两种方式
  20. java与模式(一)

热门文章

  1. Android屏幕适配全攻略3-和产品经理聊聊
  2. java后台 apiV3 对接微信app支付
  3. 输入一个字符,小写字母转大写,大写字母转小写,数字则输出为自身
  4. 2016【淘宝运营】,如何营销宝贝详情页,提高宝贝的转化率
  5. 微人事(vhr)开源项目部署
  6. Chrome浏览器怎么调试网页标题字体大小和颜色?
  7. opencv矩形轮廓顶点的具体位置确定
  8. snidel 2014春夏新品 画册款切换材质连衣裙
  9. 有一种蓝叫 APEC 蓝
  10. 想成为我的同事,不会点Linux怎么行!