欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot配置与配置文件属性值注入

程序员文章站 2022-06-25 23:11:40
...

Spring Boot核心配置与配置文件属性值注入

目标

  1. 熟悉Spring Boot全局配置文件的使用以及自定义配置
  2. 掌握Spring Boot配置文件属性值注入
  3. 掌握Profile多环境配置
  4. 了解随机值设置以及参数间引用

全局文件配置

  1. application.yml(yaml)
  2. application.properties
    Spring Boot配置与配置文件属性值注入

查看spring-boot-starter-parent依赖的源码可知,Spring Boot默认以application为文件名,ymlyamlproperties为后缀名的文件作为配置文件,默认加载顺序如图所示(配置会以顺序的先后加载被覆盖)。

application.properties与application.yml文件配置

  1. application.properties的配置

    server.address=80
    server.port=8848
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    #自定义属性的配置
    person.age=22
    person.remarks=每天进步一点点
    person.hobby=[play,read,sleep]   
    
  2. application.yml的配置

    1. YAML文件格式是Spring Boot支持的一种JSON超集文件格式。
    2. 相较于传统的Properties配置文件,YAML文件以数据为核心,是一种更为直观且容易被电脑识别的数据序列化格式。
    3. application.yaml的工作原理和application.properties一样。

    配置实例:

    server:
      port:8848
      path:/hello
      
      #  自定义属性的配置
     person:
       age:22
       hobby:
         -play
         -read
         -sleep
         #  hobby:[play,read,sleep]
       remarks:
         每天进步一点点
     #值为Map集合或对象
       map:
         k1:v1
         k2:v2
     #  map:{k1:v1,k2:v2}
    

使用@ConfigurationProperties注入属性

相关注解:

@Component
@ConfigurationProperties(prefix = "xxx")
@Value
prefix为配置属性的前缀

Spring Boot配置与配置文件属性值注入

@Component
@Data
@ConfigurationProperties(prefix = "person")
public class Person {
    Long id;
    int age;
    String name;

    @Value("${person.remarks}")
    String remarks;
}
person:
  age: 100
  remarks: 我是从yml文件中读取的
  name: 张小明
  id: 1000000

使用@PropertySource加载自定义配置文件

@PropertySource:指定自定义配置文件的位置和名称

@Data
@Component
@PropertySource("classpath:student.properties")
@ConfigurationProperties(prefix = "student")
public class Student {
    Long id;
    String school;
}
student.id=8848
student.school=电子科技大学

目录结构如下:
Spring Boot配置与配置文件属性值注入

使用@ImportResource加载XML配置文件

Spring Boot配置与配置文件属性值注入

<?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="student" class="com.zsc.core_config.domain.Student">
        <property name="id" value="10086"/>
        <property name="school" value="北京大学"/>
    </bean>

</beans>
@SpringBootApplication
@ImportResource("classpath:student.xml")
public class CoreConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(CoreConfigApplication.class, args);
    }

}

此时需要关闭实体类的部分注解

@Data
//@Component
//@PropertySource("classpath:student.properties")
//@ConfigurationProperties(prefix = "student")
public class Student {
    Long id;
    String school;
}

使用@Configuration编写自定义配置类

@Configuration
public class MyConfig {

    @Bean
    public Student student2() {
        Student student = new Student();
        student.setId(10086L);
        student.setSchool("华中科技大学");
        return student;
    }
}

生成的Bean对象id为方法名,此代码生成的Bean对象id为student2

Profile多环境配置

Spring Boot配置与配置文件属性值注入
@Profile:作用于类,通过value属性指定环境配置

等同于Profile文件名称中profile的值。

随机值的配置

语法格式${random.xx}

my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.ranges=${random.int[10,100]}

配置文件参数间引用

语法格式${xx}

app.name=MyApp
app.description=${app.name} is a Spring Boot application