SpringBoot系列---【yml配置文件中的值如何注入到java配置类中?】
1.准备工作一个application.yml文件
person:
name: zhangsan
age: 18
happy: false
birth: 2021/01/28
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: 笨笨
age: 2
2.第一种属性注入方式:@Value,注意这里的前提是,属性值写在application.yml中
@Component //注册bean public class Dog { @Value("${name}") //配置文件中配置name=张三
private String name;
@Value("3")
private Integer age;
//省略get,set
}
3.第二种属性注入方式:@ConfigurationProperties(prefix=" "),单独使用,不用配合@Value。
/* @ConfigurationProperties作用: 将配置文件中配置的每一个属性的值,映射到这个组件中; 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定 参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应 */ @Component //注册bean @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Boolean happy; private Date birth;
//@Setter,如果注入不进去可以放开试试 private Map<String,Object> maps; private List<Object> lists; private Dog dog; }
4.第三种属性注入方式:@PropertySource :加载指定的配置文件,通常配合@Value注解使用。
@ConfigurationProperties:默认从全局配置文件中获取值;
这里自己写一个person.yml,我这里省略了。
示例1:
@PropertySource(value = "classpath:person.yml") @Component //注册bean public class Person { @Value("${name}") private String name; ...... }
示例2:
这里自己写一个user.yml,我这里省略了。
@Component //注册bean @PropertySource(value = "classpath:user.yml") public class User { //直接使用@value @Value("${user.name}") //从配置文件中取值 private String name; @Value("#{9*2}") // #{SPEL} Spring表达式 private int age; @Value("男") // 字面量 private String sex; }
5.第四种属性注入方式-工具类静态方法获取yml配置文件中的值
工具类的方法一般是静态的,这时候使用前三种方式就无法获取yml中的值了
5.1.工具类要用@Component修饰
5.2.使用@Value注解将配置文件中的数据注入到普通变量中
5.3.通过@PostConstruct注解将普通变量赋值给静态变量
@Component //注册bean
public class User {
//直接使用@value
@Value("${user.name}") //从配置文件中取值
private String name;
private static String namebak;
@PostConstruct
public void getName(){
namebak = this.name;
}
public static void getProperties(){
system.out.print(namebak);
}
}
还可以使用Envirment获取
- 三种方式获取yml配置文件数据
1 在配置文件中写好连接数据库的信息 application.yml
2 通过注解来获取配置信息
/**
* 通过注解的方式获取application的配置值
*/
//创建成员变量以便方法获取
@Value("${name}")
private String name;
2 /**
* 通过注入Environment的方式获取application配置的值
* @return
*/
@Autowired
private Environment environment;
3 通过实体类配置
/**
* 通过创建实体类配置ConfigurationProperties的方式获取application配置的值
* @return
*/
@Autowired
private Config config;
4 启动项目 测试数据
@RequestMapping("/config")
@ResponseBody
public String config(){
System.out.println("近啦");
//第一种获取
System.out.println("name"+name);
//第二种获取
String property = environment.getProperty("name");
System.out.println("property"+property);
//第三种获取
String type = config.getName();
System.out.println("name"+name);
return name+property+type;
}
- 实体类
@Component
@ConfigurationProperties(prefix = "spring.datasource")
@Data
public class Config {
private String name;
}
愿你走出半生,归来仍是少年!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?