SpringBoot(5)—配置文件

SpringBoot版本为:2.1.1.RELEASE

SpringBoot默认使用全局的一个配置文件,文件名称固定,格式有两种:

  • application.properties
  • application.yml

官方推荐使用yml类型的配置文件。YAML这种语言是以数据为中心,比xml、json更加适用于做配置文件。下面详细说明YAML语法。

一、YAML语法

A.基本语法
K:(空格)V:表示一对键值对,空格是必须的。以空格的缩进来表示层级关系,只要是左对齐的一列数据,都是同一层级的

例如:

server:
  port: 8080
  address: 127.0.0.1
B.不同值写法
1.普通值(数字,字符串,布尔)

普通的值就是 K:V 的结构,并且字符串默认不用加单引号或者双引号,但是可以加。
如果加 “” 号:不会转义字符串里的特殊字符:特殊字符会作为它本身的意思

name: "zhangsan \n lisi"
输出会转化成 :
张三
李四

如果加 ‘’ 号:会转义里面的特殊字符:特殊字符最终只是会作为一个普通的字符串输出

name: 'zhangsan \n lisi'
输出会转化为:
zhangsan \n lisi
2.数组(List,Set)

- 值 :表示数组中的一个元素

friends:
  - zhangsan
  - lisi
  - wangwu
3.Map,JavaBean

Map和对象有两种写法

# 普通写法
dog:
    name: yangyang
    age: 1
# 行内写法
dog: {name: yangyang, age: 1}

二、配置文件值注入

A.主配置文件

SpringBoot中主配置文件值的注入常用的有两种方法:
第一种:通过 @Value 注解注入属性值
第二种:通过 @ConfigurationProperties 注解注入属性值

其中 @Value 注解一般用于单个属性值的的获取,不能用于复杂类型和对象的或者,而 @ConfigurationProperties 常用于批量注入配置文件中的属性值,而且**@ConfigurationProperties** 注解常和 @Component 注解联合使用于对象的绑定。下面举例说明:

person:
  name: Junge
  age: 23
  friends:
  - zhangsan
  - lisi
  - wangwu
  dog:
    name: yangyang
    age: 1
  map: {k1: v1,k2: v2}
/**
 * description:
 *
 * @author van.shu
 * @date 2019/7/17 22:24
 */
@Component
@ConfigurationProperties(prefix = "person")
@ToString
@Data
public class Person {
    private String name;
    private int age;
    private List<String> friends;
    private Dog dog;
    private Map<String, Object> map;
}


@ConfigurationProperties(prefix = "person.dog")
@Component
@ToString
@Data
public class Dog {

    private String name;
    private String age;
}

我们可以通过 @ConfigurationProperties(prefix = xxx")@Component 注解来使当前对象绑定配置文件中的属性值,与此同时,我们也可以通过 @Value(" p e r s o n . n a m e &quot; ) ∗ ∗ 来 获 取 配 置 文 件 中 ∗ p e r s o n . n a m e ∗ 的 值 , 或 者 通 过 ∗ ∗ @ V a l u e ( &quot; {person.name}&quot;)** 来获取配置文件中 *person.name* 的值,或者通过 **@Value(&quot; person.name")person.name@Value("{person.dog.age}") 来获取配置文件中 person.dog.age 的属性值。

@RestController
@RequestMapping("test")
public class TestController {

    @Autowired
    private Person person;

    @Value("${person.name}")
    private String name;

    @Value("${person.dog.age}")
    private String dogAge;

    @GetMapping("person")
    public Person t1() {
        System.out.println(person);
        System.out.println(name);
        System.out.println(dogAge);
        return person;
    }

}

打印结果如下:
输出结果

B.其它

SpringBoot中,除了主配置文件applicaiton.yaml 之外,还可能有用户添加的配置文件,那这些自定义的配置文件我们怎么去读取呢?
这里一般就要用到这两个注解: @PropertySource@ImportResource

@PropertySource: 该注解用于加载指定的配置文件(properties文件);
例如我们可以自定义一个 person.properties文件,然后通过java的Person类来获取值

person.name=scj
person.age=18
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
@Data
@ToString
public class Person {
    
    private String name;
    private int age;

}

测试效果入下:

@RestController
@RequestMapping("test")
public class TestController {

    @Autowired
    private Person person;
    
    @GetMapping("user")
    public Person t1() {
        System.out.println(person);
       //输出: Person(name=Junge, age=23)
        return person;
    }

}

@ImportResource: 该注解用于导入Spring的配置文件,让配置文件里面的内容生效。

1.beans.xml

beans.xml

<?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.van.springboot.service.HelloService"></bean>
</beans>

2.JavaBean

public class HelloService {
}

3.启动类

@SpringBootApplication
public class SpringbootStudyApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(SpringbootStudyApplication.class, args);
        boolean helloService = applicationContext.containsBean("helloService");
        System.out.println(helloService);
    }

}

4.测试结果:false

5.修改启动类

@SpringBootApplication
@ImportResource(locations = {"classpath:beans.xml"})
public class SpringbootStudyApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(SpringbootStudyApplication.class, args);
        boolean helloService = applicationContext.containsBean("helloService");
        System.out.println(helloService);
    }

}

6.测试结果:true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值