Springboot的配置文件及属性注入

Springboot的配置文件及属性注入

全局配置文件

Spring boot使用一个application.properties或者application.yml的文件作为全局配置文件

它可以放在 classpath:/,classpath:/config/,file:./,file:./config/

对应项目的位置及优先级(按照优先级由高到低的顺序):

-file:./config/        项目根目录config文件夹下
-file:./               项目根目录下
-classpath:/config/    resources下的config文件夹下
-classpath:/           resources下

Spring boot会加载四个位置的全部配置文件,多个配置文件配置可以互补,如果同一个配置在多个文件中配置,默认使用优先级高的配置。

如果配置文件名称不叫application.properties或application.yml,可以公国启动参数来指定配置文件名,例如:使用myproject作用配置文件名

$ java -jar myproject.jar --spring.config.name=myproject

或者可以使用 --spring.config.location=配置文件位置指定使用指定位置的配置文件。

.properties和.yml的优先级

Spring boot在2.4版本之前: .properties > .yml

Springboot 在2.4版本之后:.yml > .properties

属性注入

常用属性注入注解

@Configuration : 声明一类为配置类

@Bean:声明在方法上,将返回值加入到bean容器中

@Value:属性注入

@ConfigurationProperties(prefix="jdbc"): 批量属性注入

@PropertySource("classpath:/jdbc.properties"): 指定外部属性文件,添加在类上

批量注入

自定义注解类

使用@ConfigurationProperties可以实现自定义属性的批量注入,它需要与@EnableConfigurationProperties配合使用。@EnableConfigurationProperties用于启用对@ConfigurationProperties的支持。如下例:

@EnableConfigurationProperties(JdbcProperties.class)
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
    // 。。。省略setter、getter
}
jdbc.driver-class-name=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springboot
jdbc.username=root
jdbc.password=root
编写配置文件时有提示

添加依赖spring-boot-configuration-processor

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

编译后,即可在编写配置文件时出现提示

第三方配置

@ConfigurationPropertis还可以在公共的@Bean方法上使用,实现属性与第三方组件绑定

例如:

public class CustomComponent {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "CustomComponent{" +
                "name='" + name + '\'' +
                '}';
    }
}
@Configuration
public class CustomConfig {


    @Bean
    @ConfigurationProperties(prefix = "custom")
    public CustomComponent customComponent() {
        return new CustomComponent();
    }
}

application.properties文件配置

custom.name=zhangsan

测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class CustomConfigTest {

    @Autowired
    private CustomComponent customComponent;

    @Test
    public void test1() {
        System.out.println(customComponent);
    }

}

结果

CustomComponent{name='zhangsan'}

松散绑定

Spring boot使用一些宽松的规则将环境属性绑定到@ConfigurationProperties bean上,使环境属性名和bean属性名之间不需要完全匹配。

支持模式有:羊肉串模式case(推荐使用),标准驼峰模式,下划线模式,大写下划线模式(系统环境变量推荐使用)。

@ConfigurationProperties vs @Value

特征@ConfigurationProperties@Value
宽松的绑定YLimited
元数据支持YN
Spel表达式NY
应用场景批量属性绑定单个属性绑定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超人@不会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值