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的配置;

 

 

posted @ 2019-10-16 10:30  我想和这个世界谈谈,  阅读(210)  评论(0编辑  收藏  举报