SpringBoot--注入指定的配置文件
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot--注入指定的配置文件相关的知识,希望对你有一定的参考价值。
1. SpringBoot--注入指定的配置文件
- @PropertySource :加载指定的配置文件;
- @configurationProperties:默认从全局配置文件中获取值;
1.1 resources目录下新建一个user.properties文件
user.properties
name=天骄
1.2 指定加载user.properties文件
package com.tian.springboot02config.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component //注册bean
@PropertySource(value = "classpath:user.properties")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
//直接使用@value
@Value("${name}") //从配置文件中取值 EL表达式
private String name;
@Value("#{9*2}") // #{SPEL} Spring表达式
private int age;
@Value("男") // 字面量
private String sex;
}
1.3 测试
package com.tian.springboot02config;
import com.tian.springboot02config.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot02ConfigApplicationTests {
@Autowired
User user;
@Test
void contextLoads() {
System.out.println(user);
}
}
出现乱码
properties配置文件在写中文的时候,会有乱码 , 我们需要去IDEA中设置编码格式为UTF-8;
重新测试
1.4 小结
@Value这个使用起来并不友好!我们需要为每个属性单独注解赋值,比较麻烦;我们来看个功能对比图
- @ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
- 松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下
- JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
- 复杂类型封装,yml中可以封装对象 , 使用value就不支持
结论:
- 配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
- 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
- 如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!
以上是关于SpringBoot--注入指定的配置文件的主要内容,如果未能解决你的问题,请参考以下文章
springboot加载指定的属性文件(properties和yml文件)
3.springboot:springboot配置文件(配置文件YAML属性文件值注入<@Value@ConfigurationProperties@PropertySource,@Im(代码片
3springboot:springboot配置文件(配置文件YAML属性文件值注入<@Value@ConfigurationProperties@PropertySource,@Imp(代码片