Java中EnvironmentAware 接口的作用

 更新时间:2022年06月21日 10:23:23   作者:沙漠中的曼陀罗  
本文主要介绍了Java中EnvironmentAware 接口的作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

研究背景

    我們在搞新的配置中心Nacos的時候,为了获取新的配置中心的配置文件中配置的 dataId,以及配置 serverAddrnacosGroup 等信息,所以才研究 EnvironmentAware 接口的如果写死话那岂不是太不像话了,那就太多的魔法值了,所以我们可以通过 environmentAware 这个接口进行从配置文件中【application.properties】获取配置的配置中心的信息详情

nacos.config.server-addr=IP地址
nacos.config.data-id=api.properties
nacos.config.group=DEFAULT_GROUP
nacos.config.namespace=public
nacos.config.username=nacos
nacos.config.password=nacos
nacos.config.auto-refresh=true
nacos.config.type=properties
nacos.config.bootstrap.enable=true
nacos.config.bootstrap.log-enable=true

    之前没有注意过这个接口【但是在之前看多租户的工具源码的时候看到过这个接口】,所以通过本次项目中的需求来好好研究一下这个接口的问题

源码介绍以及使用方法

    其实说白了就是哪个接口需要获取配置,那么那个接口就需要进行实现该接口 EnvironmentAware并实现里面的 setEnvironment方法

/**
   其实说白了就是哪个接口需要获取配置,那么那个接口就需要进行实现该接口并实现里面的set方法
*/
public interface EnvironmentAware extends Aware {

	void setEnvironment(Environment environment);

}

作用

    所有注册到 Spring容器内的 bean,只要该bean 实现了 EnvironmentAware接口,并且进行重写了setEnvironment方法的情况下,那么在工程启动时就可以获取得 application.properties 的配置文件配置的属性值,这样就不用我们将魔法值写到代码里面了

使用方式代码示例

    通过 NacosController 实现了 EnvironmentAware 这个接口,并且实现了 setEnvironment 方法,之后通过 environment 这个对象进行配置信息获取

@RestController
@RequestMapping("/nacos")
public class NacosController implements EnvironmentAware {

    private final static String NACOS_DATA_ID = "nacos.config.data-id";
    private final static String NACOS_GROUP = "nacos.config.group";

    private static String dataId = "";
    private static String group = "";

    @NacosInjected
    private ConfigService configService;

    @Autowired
    private Environment environment;

    @Override
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }
    // 通过 environment 获取配置信息
    @PostConstruct
    private void init() {
        dataId = environment.getProperty(NACOS_DATA_ID);
        group = environment.getProperty(NACOS_GROUP);
    }

    /**
     * 发布配置
     * @return
     */
    @RequestMapping(value = "/publishConfig",method = RequestMethod.GET)
    public boolean publishConfig() {
        boolean res = false;
        try {
            res = configService.publishConfig(dataId, group, "发布配置");
        } catch (NacosException e) {
            e.printStackTrace();
        }
        System.out.println(res);
        return res;
    }
}

成功获取到了配置信息,我们在配置文件中设置的 nacos.config.data-id=api.properties,所以这里获取的值是正确

总结

  • 哪个类需要获取配置信息那么该类就需要进行该接口 environmentAware 的实现
  • 实现 environmentAware 这个接口所提供的方法 setEnvironment()
  • 通过 environment 进行配置信息获取

到此这篇关于Java中EnvironmentAware 接口的作用的文章就介绍到这了,更多相关Java EnvironmentAware 接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Spring-Retry解决Spring Boot应用程序中的重试问题

    使用Spring-Retry解决Spring Boot应用程序中的重试问题

    重试的使用场景比较多,比如调用远程服务时,由于网络或者服务端响应慢导致调用超时,此时可以多重试几次。用定时任务也可以实现重试的效果,但比较麻烦,用Spring Retry的话一个注解搞定所有,感兴趣的可以了解一下
    2023-04-04
  • 为什么Java单例模式一定要加 volatile

    为什么Java单例模式一定要加 volatile

    这篇文章主要介绍了为什么Java单例一定要加volatile,指的是为什么懒汉模式中的私有变量要加volatile?带着疑问一起学习下面文章内容吧
    2022-05-05
  • Java常用工具类—集合排序

    Java常用工具类—集合排序

    这篇文章主要介绍了Java集合排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • java动态代理(jdk与cglib)详细解析

    java动态代理(jdk与cglib)详细解析

    静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了
    2013-09-09
  • Mybatis 中如何判断集合的size

    Mybatis 中如何判断集合的size

    这篇文章主要介绍了在Mybatis中判断集合的size操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java代码精简之道(推荐)

    Java代码精简之道(推荐)

    这篇文章主要给大家介绍了Java代码精简之道,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • SpringMVC找不到Controller路径的解决方案

    SpringMVC找不到Controller路径的解决方案

    这篇文章主要介绍了SpringMVC找不到Controller路径的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 解读JAVA中的位运算操作

    解读JAVA中的位运算操作

    这篇文章主要介绍了JAVA中的位运算操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Java Spring Boot实战练习之单元测试篇

    Java Spring Boot实战练习之单元测试篇

    单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等
    2021-10-10
  • springboot 集成支付宝支付的示例代码

    springboot 集成支付宝支付的示例代码

    这篇文章主要介绍了springboot 集成支付宝支付的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论