二、配置文件

1、配置文件

Spring Boot使用一个全局的配置文件,它的名称是固定的。

  • application.properties
  • application.yml

作用:修改Spring Boot自动给我们配置的默认值。

2、YAML标记语言

以数据为中心,比xml,json等更适合做配置文件。

例如:

server:
  port: 8080

1_基本语法

k:(空格)v:表示一对键值对,空格必须要有。以空格的缩进来表示层级关系,只要是左对齐的一列数据,都是一个层级的。

server:
  port: 8081
  context-path: /test

2_值的写法

字面量:普通的值(数字,字符串,布尔)

k: v:字面值直接来写;
字符串默认不用加上单引号或者双引号。

  • "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name:   "zhangsan \n lisi":输出;zhangsan 换行  lisi
  • '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name:   'zhangsan \n lisi':输出;zhangsan \n  lisi

对象、Map

k: v:在下一行来写对象的属性和值的关系;注意缩进。对象还是k: v的方式

maps:
    k1: v1
    k2: v2

行内写法:

maps: {k1: v1,k2: v2}
Dog:
    name: ppg
    age: 3

数组(List、Set)

lists:
    - l1
    - l2

行内写法

lists: [l1,l2]

3_配置文件值注入

配置文件

server:
  port: 8081
  context-path: /test

person:
  lastName: xupeng
  age: 23
  boss: false
  maps: {k1: v1,k2: v2}
  lists: [l1,l2]
  Dog:
    name: ppg
    age: 3

JavaBean

/**
 * @ConfigurationProperties 注解用于将本类中所有的属性与配置文件进行绑定
 *      prefix : 指定与配置文件中的哪一个下面的属性进行一一对应。
 * @Component 将本类做为组件添加到ioc容器当中。
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    //getter and setter

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }
}

测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootHelloworldQuickApplicationTests {

    @Autowired
    private Person person;

    @Test
    public void contextLoads() {
        System.out.println(person);
    }

}

我们可以导入配置文件处理器,以后编写配置就有提示了

<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

4_配置文件注入值数据校验

/**
 * @author BEAN_BAG
 * @ConfigurationProperties 注解用于将本类中所有的属性与配置文件进行绑定
 *      prefix : 指定与配置文件中的哪一个下面的属性进行一一对应。
 * @Validated : 从配置文件注入进来值的时候进行校验
 *
 */
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    //表示注入email这个值的时候,必须要求配置文件中的值是邮箱格式。
    @Email
    private String email;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    //getter and setter

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", email='" + email + '\'' +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }
}

5_相关注解说明

  • @PropertySource 加载指定的配置文件
@PropertySource(value = {"classpath:person.properties"})
  • @ImportResource 

导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上;

@ImportResource(locations = {"classpath:beans.xml"})
  • @Bean

通过注解的方式给spring的容器中添加组件

配置类

@Configuration
public class MyAppConfig {
    @Bean
    public HelloService helloService(){
        System.out.println("通过@Bean的方式向spring容器中添加组件");
        return new HelloService();
    }
}

测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootHelloworldQuickApplicationTests {

    @Autowired
    private Person person;

    @Autowired
    ApplicationContext ioc;

    @Test
    public void contextLoads() {
        System.out.println(person);
    }

    @Autowired
    private HelloService helloService;

    @Test
    public void testHelloService() {
        boolean b = ioc.containsBean("helloService");
        System.out.println(b);
    }
}

6_配置文件占位符

  • 随机数
  • 占位符获取之前配置的值,如果没有可以使用:指定默认值
person:
  lastName: xupeng${random.uuid}
  age: ${random.int[0,100]}
  boss: false
  email: zhuang@163.com
  maps: {k1: v1,k2: v2}
  lists: [l1,l2]
  Dog:
    name: ${person.hello:hello}
    age: 3

7_Profile

多Profile文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties或application.yml的配置;

application.yml
application-dev.yml
application-prod.yml

yml支持多文档块方式

server:
  port: 8081
spring:
  profiles:
    active: prod

---
server:
  port: 8082
spring:
  profiles: dev


---

server:
  port: 8083
spring:
  profiles: prod  #指定属于哪个环境

激活指定Profile

  • 1、在配置文件中指定
spring.profiles.active=dev
  • 2、命令行:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;

可以直接在测试的时候,配置传入命令行参数

  • 3、虚拟机参数;
-Dspring.profiles.active=dev

8_配置文件的加载顺序

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

–file:./config/
–file:./
–classpath:/config/
–classpath:/

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置;

我们还可以通过spring.config.location来改变默认的配置文件位置

项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

java -jar spring-boot-helloworld-quick-0.0.1-SNAPSHOT.jar --spring.config.location=E:/application.yml

猜你喜欢

转载自www.cnblogs.com/beanbag/p/9661808.html
今日推荐