SpringBoot学习笔记(2)配置文件
1.配置文件
SpringBoot 使用一个全局的配置文件,配置文件名是固定的
- application.properties
- application.yml
配置文件的作用: 可以覆盖SpringBoot配置的默认值
2.YAML配置文件
YAML(YAML Ain’t Markup Language)
YAML A Markup Language:是一个标记语言
YAML isn’t Markup Language:不是一个标记语言
标记语言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以数据为中心,比json、xml等更适合做配置文件;
YAML
#普通配置文件.properties的语法 #server.port=80 #xml的写法 #<server> # <port>80</port> #</server> #yml 以数据为中心的语法 server: port: 8080
YAML语法
k:(空格) v: 表示一对键值对(空格必须有)
以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一层级的。
属性和值大小写敏感
server: port: 8080 path: /hello
key: value(数字,字符,布尔)
字符串默认不加单引或双引;
双引号:会转义字符串里面的特殊字符;特殊字符会作为本身想表达的意思
nam: “meng \n yang” :输出 meng 换行 yang
单引号:不会转义特殊字符
name: ‘meng \n yang’ :输出 meng\n yang
对象、Map(属性和值)
k: v :在下一行来写对象的属性和值的关系,注意缩进
person: name: mengY age: 24
行内写法
person: {name: meng,age: 24}
数组(list,set)
用- 值表示数组中的一个元素
pets: - cat - dog - pig
行内写法
pets: [cat, dog, pig]
配置文件值注入
配置文件
#yml 以数据为中心的语法 server: port: 8080 path: /hello person: name: meng age: 24 boss: false birth: 1995/03/13 maps: {k1: v1,k2: v2} lists: - index1 - index2 dog: name: 小狗 age: 5
javaBean:
/** * 将配置文件中的值,映射到这个组件中 * @ConfigurationProperties :告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定 * prefix = "person" * @Component 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能 */ @Component @ConfigurationProperties(prefix = "person") public class PersonPO { private String name; private int age; private Boolean boss; private Date birth; private Map<String,Object> maps; private List<String> list; private DogPO dog;
我们可以导入配置文件处理器,以后编写配置就有提示了
<!-- 导入配置文件处理器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
3.properties配置文件
#配置javaBean person.name=张三 person.age=24 person.birth=1995/03/13 person.boss=false person.maps.k1=v1 person.maps.k2=v2 person.maps.k3=v3 person.list=a,b,c person.dog.name=dog person.dog.age=5
4.配置值的两种方式
@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
@Value:对单个值进行数据绑定
@Value("${person.name}") private String name; @Value("#{person.age * 2}") private int age; @Value("true") private Boolean boss;
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value; 如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
@PropertySource&@ImportResource&@Bean
@PropertySource:加载指定的配置文件;
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效; Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别; 想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
@ImportResource(locations = {"classpath:beans.xml"}) 导入Spring的配置文件让其生效
Spring配置文件
<?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="com.atguigu.springboot.service.HelloService"></bean> </beans>
SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式 1、配置类**@Configuration**------>Spring配置文件 2、使用**@Bean**给容器中添加组件
/** * @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件 * 在配置文件中用<bean><bean/>标签添加组件 */ @Configuration public class MyAppConfig { //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名 @Bean public HelloService helloService02(){ System.out.println("配置类@Bean给容器中添加组件了..."); return new HelloService(); } }
5.随机数占位符
随机数
${random.value}、${random.int}、${random.long} ${random.int(10)}、${random.int[1024,65536]}
**占位符获取之前配置的值,如果没有可以是用:指定默认值 **
person.last‐name=张三${random.uuid} person.age=${random.int} person.birth=2017/12/15 person.boss=false person.maps.k1=v1 person.maps.k2=14 person.lists=a,b,c person.dog.name=${person.hello:hello}_dog person.dog.age=15
6.多Profile文件
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;