您好,欢迎来到智榕旅游。
搜索
您的当前位置:首页springboot如何获取yml里面的属性值

springboot如何获取yml里面的属性值

来源:智榕旅游
springboot如何获取yml⾥⾯的属性值

⽬录

如何获取yml⾥⾯的属性值

开发环境项⽬结构pom依赖springboot启动类person.ymlperson.javaDog.javaSpringbootDemoApplicationTests控制台输出

获取.yml中⾃定义参数

通过@Value获取

通过@ConfigurationProperties(prefix = \"weixinAndAli\")注解

如何获取yml⾥⾯的属性值

开发环境

ideajdk1.8

项⽬结构

pom依赖

4.0.0

org.springframework.boot spring-boot-starter-parent 2.1.8.RELEASE

com.springboot

springboot_demo 0.0.1-SNAPSHOT springboot_demo

Demo project for Spring Boot

1.8

org.springframework.boot spring-boot-starter-web

org.projectlombok lombok true

org.springframework.boot

spring-boot-configuration-processor true

org.springframework.boot spring-boot-starter-test test

org.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;

@SpringBootApplication

public class SpringbootDemoApplication {

public static void main(String[] args) {

SpringApplication.run(SpringbootDemoApplication.class, args); } /**

* 设置⾃定义yml位置 *

* @return */

@Bean

public 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: zhangsan age: 18 boss: false

birth: 2017/12/12

maps: {k1: v1,k2: v2} lists: - lisi - zhaoliu

dog:

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 lists; private Dog dog; }

Dog.java

package com.springboot.springboot_demo.pojo; import lombok.Data; @Data

public 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)@SpringBootTest

public class SpringbootDemoApplicationTests { @Autowired

private Person person;

@Value(\"${person.lastName}\") private String username; @Test

public void contextLoads() { System.out.println(person); }

@Test

public 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)@Component

public 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; }}

调⽤和⽅法⼀⼀样的

以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- zrrp.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务