文章目录

  • Spring Boot核心配置与配置文件属性值注入
  • 目标
  • 全局文件配置
  • application.properties与application.yml文件配置
  • 使用@ConfigurationProperties注入属性
  • 使用@PropertySource加载自定义配置文件
  • 使用@ImportResource加载XML配置文件
  • 使用@Configuration编写自定义配置类
  • Profile多环境配置
  • 随机值的配置
  • 配置文件参数间引用


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

目标

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

全局文件配置

  1. application.yml(yaml)
  2. application.properties

查看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]
  1. application.yml的配置
  1. YAML文件格式是Spring Boot支持的一种JSON超集文件格式。
  2. 相较于传统的Properties配置文件,YAML文件以数据为核心,是一种更为直观且容易被电脑识别的数据序列化格式。
  3. application.yaml的工作原理和application.properties一样。
  1. 配置实例:
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")@Valueprefix为配置属性的前缀

springboot项目配置文件无法注入 springboot配置文件注入属性_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=电子科技大学

目录结构如下:

springboot项目配置文件无法注入 springboot配置文件注入属性_自定义_02

使用@ImportResource加载XML配置文件

springboot项目配置文件无法注入 springboot配置文件注入属性_java_03

<?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多环境配置

springboot项目配置文件无法注入 springboot配置文件注入属性_spring_04


@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