当前位置: 代码网 > it编程>编程语言>Java > springboot如何获取yaml/yml(或properties)配置文件信息

springboot如何获取yaml/yml(或properties)配置文件信息

2024年11月04日 Java 我要评论
springboot项目获取配置文件信息前言在分布式项目开发中,通常会使用配置中心(例如:apollo 配置中心)将配置文件和项目解耦。为了更具灵活性,有时候需要把一些数据放在配置文件中获取,能够减少

springboot项目获取配置文件信息

前言

在分布式项目开发中,通常会使用配置中心(例如:apollo 配置中心)将配置文件和项目解耦。

为了更具灵活性,有时候需要把一些数据放在配置文件中获取,能够减少很多麻烦,这个时候就需要读取配置文件信息。

本文结合实际开发介绍几种使用过的读取配置文件的方法。

首先在配置文件中配置一条数据:

spring.application.name = user-service

1、@autowired 注入 environment类

和项目中注入 service 或者 mapper 一样,声明一个 environment 类变量,加上 @autowire 注解。

如下:

    @autowired
    private environment environment;

该类所属包:

import org.springframework.core.env.environment;

代码获取配置:

string applicationname = environment.getproperty("spring.application.name");

注意:key一定要写完整,有几层就写几层,每层的名字用点分隔。

但是,使用该方法具有一定的局限性。

局限性1:使用在静态方法中

如果要在静态方法中读取配置信息,不能简单的将 environment 定义成 static 就完了,由于注入机制,注入一个静态的 bean 只会得到一个空的 bean,即变量的值为 null,一旦使用该 bean 对象就会报空指针异常。

错误使用方法:

    @autowired
    private static environment environment;//只定义成静态变量,environment 只会是null
	public static void m1(){
		// 一旦使用environment变量就会报空指针异常
		string applicationname = environment.getproperty("spring.application.name");	
	}

正确使用方法:

  1. 将 environment 定义成 static 静态变量
  2. 加上 environment 的 getter/setter 方法
  3. 将@autowire注解加到set方法上

需要注意的是,只需要 get 方法是静态的即可,set 方法不要静态,否则得到的 environment 还是null。

正确代码如下:

	private static environment environment;

    @autowired
    public void setenvironment(environment environment) {
        this.environment = environment;
    }

    public static environment getenvironment() {
        return environment;
    }

局限性2:无法直接读取自定义的yml配置文件

environment 无法直接读取自定义的配置文件,需要通过增加一个配置类,将自定义的配置文件暴露到spring environment 中。

解决方法:

定义一个配置类,将自定义的配置文件内容加载到 environment 中,代码如下:

import org.springframework.beans.factory.config.yamlpropertiesfactorybean;
import org.springframework.context.annotation.bean;
import org.springframework.context.support.propertysourcesplaceholderconfigurer;
import org.springframework.core.io.classpathresource;
import org.springframework.stereotype.component;

/**
 * 配置类
 * @description 读取自定义yml格式配置文件
 */
@component
public class jdbcconfig {
    @bean
    public propertysourcesplaceholderconfigurer getsqlconfigurer() {
        propertysourcesplaceholderconfigurer configurer = new propertysourcesplaceholderconfigurer();
        yamlpropertiesfactorybean sqlconfigbean = new yamlpropertiesfactorybean();
        sqlconfigbean.setresources(new classpathresource("jdbc-properties.yml"));
        configurer.setproperties(sqlconfigbean.getobject());
        return configurer;
    }
}

写好配置类,就可以通过注解 @autowired 注入 environment 类来读取自定义配置信息了。

2、基础用法,使用@value注解直接注入配置信息

使用方式:

@value(“${xxx.xxx.xxx}”)

代码如下:

    @value("${spring.application.name}")
    private string applicationname;

注意:该方法也具有上述局限性。

3、进阶方法(推荐使用)

定义一个工具类,使用 @component 注解使其成为配置类,继承applicationrunner 重写run()方法,再注入 environment 获取配置,这样当项目启动好之后,配置的信息就已经加载完毕,可以做到在任何地方随时随地获取配置信息。

代码如下:

配置类:

import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.applicationarguments;
import org.springframework.boot.applicationrunner;
import org.springframework.core.env.environment;
import org.springframework.stereotype.component;

@component
public class baseconfig implements applicationrunner {

    @autowired
    private environment  environment;

    public static string applicationname;

    @override
    public void run(applicationarguments args) throws exception {
        applicationname = environment.getproperty("spring.application.name");

    }
}

使用:直接用调用工具类的静态属性即可获取配置信息。

    @postmapping(value = "/test/config")
    public list<string> testconfig() {
        list<string> list = new arraylist<string>();
        list.add(baseconfig.applicationname);
        return list;
    }

postman 测试结果:

拓展:springboot 集成配置中心 - 以 apollo 为例

微服务中会使用配置中心管理配置文件信息,springboot 通常会和这些配置中心集成提供一些方法获取配置信息,本文以 apollo 配置中心为例展示如何获取配置信息。

  • (1)添加依赖
<dependency>
    <groupid>com.ctrip.framework.apollo</groupid>
    <artifactid>red-apollo-client</artifactid>
</dependency>
  • (2)代码使用
config config = configservice.getappconfig();// 连接到 configservice 的 dev/sit/uat/prod 等环境
string applicationname = config.getproperty("spring.application.name", ""); // 获取配置信息

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com