springboot如何获取yml里面的属性值
目录
- 如何获取yml里面的属性值
- 开发环境
- 项目结构
- pom依赖
- springboot启动类
- person.yml
- person.java
- Dog.java
- SpringbootDemoApplicationTests
- 控制台输出
- 获取.yml中自定义参数
- 通过@Value获取
- 通过@ConfigurationProperties(prefix = "weixinAndAli")注解
如何获取yml里面的属性值
开发环境
- idea
- jdk1.8
项目结构
文章图片
pom依赖
4.0.0 org.springframework.boot spring-boot-starter-parent2.1.8.RELEASE com.springboot springboot_demo0.0.1-SNAPSHOT springboot_demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-weborg.projectlombok lomboktrue org.springframework.boot spring-boot-configuration-processortrue org.springframework.boot spring-boot-starter-testtestorg.springframework.boot spring-boot-maven-plugin
springboot启动类
package com.springboot.springboot_demo; import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.io.ClassPathResource; @SpringBootApplicationpublic class SpringbootDemoApplication { public static void main(String[] args) {SpringApplication.run(SpringbootDemoApplication.class, args); }/*** 设置自定义yml位置** @return*/@Beanpublic static PropertySourcesPlaceholderConfigurer properties() {PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer(); YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean(); yaml.setResources(new ClassPathResource[] {/** 请求url地址 */new ClassPathResource("config/person.yml")}); pspc.setProperties(yaml.getObject()); return pspc; }}
person.yml
person:lastName: zhangsanage: 18boss: falsebirth: 2017/12/12maps: {k1: v1,k2: v2}lists:- lisi- zhaoliudog:name: 小狗age: 2
person.java
package com.springboot.springboot_demo.pojo; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; /** * 将配置文件中配置的每一个属性的值映射到person * @ConfigurationProperties 告诉springboot 将本类中的值与配置文件中的值绑定 * prefix = "person" 配置文件下的那个属性下的 * 只有这个组件是容器中的组件才能使用@Component */@Data@Component@ConfigurationProperties(prefix = "person")public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map maps; private List
Dog.java
package com.springboot.springboot_demo.pojo; import lombok.Data; @Datapublic class Dog {private String name; private String age; }
SpringbootDemoApplicationTests
package com.springboot.springboot_demo; import com.springboot.springboot_demo.pojo.Person; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; /** * springboot单元测试 */@RunWith(SpringRunner.class)@SpringBootTestpublic class SpringbootDemoApplicationTests { @Autowiredprivate Person person; @Value("${person.lastName}")private String username; @Testpublic void contextLoads() {System.out.println(person); }@Testpublic void personCopy() {System.out.println(username); } }
控制台输出
Person(lastName=zhangsan, age=18, boss=false, birth=Tue Dec 12 00:00:00 CST 2017, maps={k1=v1, k2=v2}, lists=[lisi, zhaoliu], dog=Dog(name=小狗, age=2))
zhangsan
获取.yml中自定义参数 需求:根据不同环境获取到不同的参数,放在.yml中方便修改!
文章图片
在开发环境中,回调的url地址
文章图片
在测试环境中,回调的url地址
文章图片
在生产环境中,回调的url地址
文章图片
我是通过2种方式来实现的
通过@Value获取
代码如下
package com.heque.service.pay; import org.springframework.beans.factory.annotation.Value; public abstract class ObtainNotifyUrl {@Value("${weixinAndAli.wechatNotifyUrl}")private String wechatNotifyUrl; @Value("${weixinAndAli.aliNotifyUrl}")private String aliNotifyUrl; public String getWechatNotifyUrl() {return wechatNotifyUrl; }public void setWechatNotifyUrl(String wechatNotifyUrl) {this.wechatNotifyUrl = wechatNotifyUrl; }public String getAliNotifyUrl() {return aliNotifyUrl; }public void setAliNotifyUrl(String aliNotifyUrl) {this.aliNotifyUrl = aliNotifyUrl; }}
package com.heque.service.pay; import org.springframework.stereotype.Component; import lombok.Data; import lombok.EqualsAndHashCode; @Data@EqualsAndHashCode(callSuper = false)@Componentpublic class Test extends ObtainNotifyUrl{}
通过springframework自动包可以完成此功能,需要注意Test继承对象需要加入@component,把对象交给springContainer去管理,我们需要的时候只需注入资源就好了。
@Autowired private Test test; test.getAliNotifyUrl(); /test.getWechatNotifyUrl();
通过@ConfigurationProperties(prefix = "weixinAndAli")注解
代码如下
package com.heque.service.pay; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @author: TimBrian * @date: Sep 10, 2018 9:13:40 AM */@Component@ConfigurationProperties(prefix = "weixinAndAli")public class ConfigUtils {private String wechatNotifyUrl; private String aliNotifyUrl; public String getWechatNotifyUrl() {return this.wechatNotifyUrl; }public void setWechatNotifyUrl(String wechatNotifyUrl) {this.wechatNotifyUrl = wechatNotifyUrl; }public String getAliNotifyUrl() {return aliNotifyUrl; }public void setAliNotifyUrl(String aliNotifyUrl) {this.aliNotifyUrl = aliNotifyUrl; }}
调用和方法一一样的
【springboot如何获取yml里面的属性值】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 一篇文章带你了解Java|一篇文章带你了解Java SpringBoot Nacos
- 基于Java+SpringBoot+vue+element实现扶贫助农政策平台系统
- 一次SQL如何查重及去重的实战记录
- 使用Mybatis如何实现删除多个数据
- 如何进行数据挖掘()
- 二本毕业,我是如何逆袭成为BAT年薪40W的Java工程师的()
- 当el-input 失去焦点时触发blur 事件用法, 可以获取input 的其他属性值
- pandas|pandas 如何筛选某一行包含字符串_Pandas过滤dataframe中包含特定字符串的数据方法...
- linux|linux db2日志查看,DB2_获取诊断日志
- java|ios 按时间排序_如何按应用而不是时间对iOS通知进行排序