SpringBoot 配置文件给实体注入值

    科技2022-07-11  117

    SpringBoot 默认的全局配置文件有两个 application.properties 和application.yml

    properties用法

    # 例如修改端口号 直接赋值 server.port=8888

    yaml用法

    # 例如修改端口号 server: port: 8888 YML中赋值是以键值对的形式,且利用缩进表示层级关系,同一级缩进必须一致大小写敏感,支持松散写法,且冒号后面必须有一个空格

    通过配置文件给实体类注入属性

    // 实体类 @Component // 把实体类放入到spring容器中 @ConfigurationProperties(prefix = "student") // 识别配置文件 public class Student { private String name; private int age; private boolean sex; private Date birthday; private Map<String, Object> location; private String[] hobbies; private List<String> skills; private Pet pet; // .... set/get/toString } # yml 配置文件 student: name: zs age: 23 sex: true birthday: 2020/10/1 location: {province: 湖北,city: 武汉, zone: 洪山} hobbies: [足球, 篮球] skills: [编程, 金融] pet: nickName: wc strain: hsq

    在这里注意不同数据类型的写法,简单的数据直接赋值

    # map类型和对象类型 的两种写法 # 1.行内写法 location: {province: 湖北,city: 武汉, zone: 洪山} pet: {nickName: wc, strain: hsq} # 2.分行写 location: province: 湖北 city: 武汉 zone: 洪山 pet: nickName: wc strain: hsq # 数组、list、set # 1、行内写法, 其中中括号还可以省略 hobbies: [足球, 篮球] skills: [编程, 金融] # 2、分行写 hobbies: - 足球 - 篮球 skills: - 编程 - 金融

    到 SpringBoot 测试文件中测试输出

    @Autowired Student student; @Test void contextLoads() { System.out.println(student); }

    结果

    Student{name='zs', age=23, sex=true, birthday=Thu Oct 01 00:00:00 CST 2020, location={province=湖北, city=武汉, zone=洪山}, hobbies=[足球,篮球], skills=[编程, 金融], pet=Pet{nickName='wc', strain='hsq'}}

    上面yml中注意

    # 如果对字符串加单引号,双引号会有什么区别 location: {province: "湖北",city: '武汉', zone: 洪山} # 如果引号中只是字符串时没什么区别 location: {province: "湖\n北",city: '武\n汉', zone: 洪\n山} # 此时双引号中的转义字符会被识别,会换行,单引号和不加引号会原样输出

    也可以使用properties注入

    student.name=ls student.age=24 ...

    其中properties文件和yml文件中的值可以互相引用。两个配置文件可以互补,properties文件优先级高于yml

    另外如果要注入的值不在这两个默认配置文件中,这是需要使用@PropertySource注解,遗憾的是该注解只支持properties文件,不支持yml文件

    @PropertySource(value = {"classpath:conf.properties"}) public class Student { ...
    Processed: 0.008, SQL: 8