Java中EnvironmentAware 接口的作用
作者:沙漠中的曼陀罗 发布时间:2023-04-15 16:11:12
研究背景
我們在搞新的配置中心Nacos的時候,为了获取新的配置中心的配置文件中配置的 dataId,以及配置 serverAddr、nacosGroup 等信息,所以才研究 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 进行配置信息获取
来源:https://juejin.cn/post/7108641851120287775


猜你喜欢
- 前言今天给大家带来一个新的控件–轮播图,网上已经有很多这类的博客来讲解如何实现的,那么我的这个有哪些特点呢?或是说有哪些不同呢?满足了轮播图
- 对于Android中的手势识别可以从以下三个Listener入手——OnTouchListener、OnGestureListener、On
- Android镂空字体的实现效果图,感兴趣的朋友可以参考实现代码。效果图:记录一下...自定义TextViewpublic class Ho
- 本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下构建:Clock继承 JFrame 为运行页面ClockTe
- 代码如下:// 时间线装饰器public class TimeLineDecoration extends RecyclerView.Ite
- Android Studio 打包 jar 及 aar 包创建工程 New -> Module -> Library在gradl
- Android小白第一次写博客,心情无比激动。下面给大家展示一下卫星菜单的实现。1.简单介绍卫星菜单在应用程序中,有很多展示菜单的方式,但其
- 本文实例为大家分享了Android快速实现断点续传的具体代码,供大家参考,具体内容如下1.导入依赖compile 'com.loop
- 开发环境为android4.1.Handler使用例1这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.
- 上一篇:瑞吉外卖项目:新增员工一. 员工信息分页查询1. 需求分析当系统中的用户越来越多页面展示不完整,我们需要通过实现分页的方式去展示员工
- 1.实现方式说明本文在---- 手写redis @ Cacheable注解支持过期时间设置 的基础之上进行扩展。1.1问题说明
- 希尔排序是插入排序的一种,又称"缩小增量排序”,是插入排序算法的一种更高效的改进版本。希尔排序原理1.选定一个增长量h,按照增长量
- 双向循环链表定义相比于单链表,有两个指针,next指针指向下一个结点,prior指针指向上一个结点,最后一个结点的next指针指向头结点,头
- 1. 概述官方JavaDocsApi: javax.swing.JLabelJLabel,标签。标签主要用于展示 文本 或 图片,也可以 同
- 委托(delegate)是一种可以把引用存储为函数的类型,这类似于c++中的函数指针。回调函数c++中的回调函数,就是用函数指针来实现的。类
- IDEA安装阿里巴巴编码规范插件的两种方式:在线安装和离线安装。1.在线安装:打开file-settings-Plugins.如图:搜索到点
- 为什么写?今天去上班的公交上,有朋友在张队(张善友)的微信群里,发了一个介绍C# 6.0新特性的视频,视频7分钟,加上本人英语实在太low,
- protected bool IsChineseLetter(string input,int index){int code = 0;in
- 一、基本概念:线程、进程1.1、进程与线程的具体介绍线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。若一个进程同
- 这篇文章主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习