Spring Boot配置文件简介

本文介绍了Spring Boot配置文件的使用,包括@ConfigurationProperties注解批量获取配置值,@Value单个获取,两者区别,JSR303数据校验,@PropertySource加载指定配置,@ImportSource导入Spring配置,配置文件占位符,Profile的多文件、文档块模式和激活方式,配置文件加载位置及优先级,以及外部配置加载顺序。还简述了自动配置原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot配置文件简介(一)

配置类

# properties配置类中添加person的属性值

# 用于设置person类的值
person.name=张三
person.birth=2022-02-10
person.gender=女
1.使用@ConfigurationProperties注解可批量获取配置文件中的值
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String name;
    private int age;
    private String gender;
    private Boolean boss;
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> list;

使用@ConfigurationProperties时需要添加依赖

<!--@ConfigurationProperties 的依赖,配置文件中可自动识别对应参数-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
2.使用@Value可直接单个获取配置文件中的值
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {

    @Value("${person.name}")
    private String name;
    @Value("#{2*3}")
    private int age;
    @Value("${person.gender}")
    private String gender;
}
3. @Value和@ConfigurationProperties的区别
@ConfigurationProperties@Value
功能批量注入配置文件中的属性单个获取
松散绑定支持不支持
SqEL不支持支持
JSR303数据校验支持不支持
复杂类型对接支持不支持

注:松散绑定:lastName = Last-name,即大写可以用 “-小写” 来表示

当某个业务逻辑中需要获取某个配置文件中的数值时,使用@Value
当专门写了一个JavaBean和配置文件映射时,使用@ConfigurationProperties

4. JSR303数据校验的基本使用
//通过使用注解的方式给予对象属性限制,例如不为空、手机号、邮箱、长度等

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

    @Value("${张三}")
    private String name;
    @Value("#{2*3}")
    private int age;
	
    //email必须是邮箱格式才行
    @Email
    private String email;

	 @NotNull              //不能为空
    @IsMobile             //@IsMobile是自定义校验规则,必须符合电话号码规范。见IsMobile类和IsMobileValidator类
    private String mobile;

    @NotNull              //密码不能为空
    @Length(max=32)       //长度不能超过32
    private String password;
}
5. 使用@PropertySource加载指定的配置文件

//指定配置文件路径为:类路径下的person.properties文件
@PropertySource(value = {"classpath:person.properties"})
@Component
//@ConfigurationProperties(prefix = "person")
@Data
public class Person {


    //@Value("${person.name}")
    private String name;
    @Value("#{2*3}")
    private int age;

    //email必须是邮箱格式才行
    //@Email
    private String gender;
    private Boolean boss;
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> list;
}
6.使用@ImportSource导入spring的配置文件

spring中加载配置文件的方法

#在主配置类中添加配置文件的路径,以让其生效,一般为xml格式文件
@ImportResource(value = {"classpath:beans.xml"})

@SpringBootApplication
public class PropertiesApplication {

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

    }

}

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.spring.service.HelloService"></bean>
</beans>

springboot中推荐给容器中添加组件的方式:推荐全注解的方式
使用@Bean注解自动获取配置类中的信息。

/**
 * @Configuration指明当前类是一个配置类,替代spring中的配置文件
 *
 * 配置文件中使用<bean>标签来添加组件
 */

@Configuration
public class MyAppConfig {

    //将方法中的返回值添加到容器中,容器中的默认ID为方法名
    @Bean
    public HelloService helloService(){
        System.out.println("@Bean注解生效,容器中添加组件成功!!!");
        return new HelloService();
    }
}
7. 配置文件占位符
# 用于设置person类的值
person.name=张三
person.birth=2022/02/10
gender-0=女
gender-1=男

#直接获取配置文件中其他属性值 $ ${person.name}
person.gender=${person.gender-0}

#也可使用${random.value}来添加随机值
person.age=${random.int}

8. Profile
1.多profile文件

主配置文件编写时,文件名命名格式为 application-{profileName}.properties
但默认使用appllication.properties的配置

2.yml的文档块模式
server:
  port: 8081
spring:
  profiles:
    active: dev
---
server:
  port: 8082

spring:
  profiles: dev

---
server:
  port: 8084

spring:
  profiles: prod

3.激活指定profile
  • 在配置文件中指定 spring.prodile.active={profileName} ,例如:=dev
  • 命令行:
    将项目打包后,执行命令 java -jar spring-boot-project-name.jar --spring.profiles.active=dev
  • 虚拟机参数:
    -Dspring.profiles.active=dev
9.配置文件加载位置

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

加载顺序和优先级从高到低为:

 -file:./config/

-file:./

-classpath:./config/

-classpath:./
  • SpringBoot会从这四个位置全部加载主配置文件,支持“互补配置”:高优先级的配置会覆盖低优先级的配置,但同时会加载全部的配置。

  • 还可以使用spring.config.location 来改变默认的配置文件位置,但应使用命令行的形式来实现。

10. 外部配置加载顺序

在这里插入图片描述

  • 使用命令行参数,例如: java -jar projectName.jar --server.port=8082 --server.context-path=/springboot
  • 优先加载配置文件中带profile的
  • 加载和优先级顺序都从jar包外到jar包内
  • 具体参考官方文档
11. 自动配置原理

自动配置类需要在一定条件下才能生效
可以通过启用 debug=true 属性,在控制台可以打印出启用、未启用的自动配置类。

注:本文是一课程总结,如有侵权,请联系删除。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值