apollo java客户端_携程配置中心Apollo的Java客户端API的使用

一、SpringBoot集成

1.发布配置信息

设置本机为DEV环境:Linux在/opt/settings/server.properties增加配置env=DEV,windows在c:\opt\settings\server.properties

aae8900ce5ccbf8e3f611d4cf4f828e8.png 图1

在apollo portal上新建项目后,默认就有了application命名空间。在DEV环境下新建一个名为test_namespace的命名空间。

在application上发布:spring.applicaton.name=apollo_demo,server.port=9000。

在test_name上发布:name=name1, value=value2。

2.引入依赖

org.springframework.boot

spring-boot-stater

org.springframework.boot

spring-boot-starter-web

org.projectlombok

lombok

${lombok.version}

provided

com.ctrip.framework.apollo

apollo-client

${apollo.version}

3.项目配置

在项目的application.properties(applicaiton.yml)或者/META-INF/app.properties填入app.id=appId(在apollo-portal上新建项目时填写的appId,表示获取的是那个配置项目的配置信息)。

resources目录下新建apollo-env.properties,填写各个环境的meta server地址:

d08104e871384b16192ad9c45fc3612f.png 图2

3) 或者不在项目配置apollo-env.properties,而是直接在application.properties指定apollo.meta=ip:port的方式来执行需要读取配置的的服务

使用application命名空间的配置信息来启动SpringBoot应用 入口方法增加@EnableApolloConfig注解

@SpringBootApplication

@EnableApolloConfig

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

如果不使用@EnableApolloConfig注解,可以在application.properties里面配置apollo.bootstrap.enabled=true,效果一样。 使用apollo.bootstrap.namespaces = application,test_namespace可以指定命名空间。

启动项目:

dd483975f7c6544da71060225646c249.png 图3

可以看到应用在启动前从配置中心获取配置信息来启动应用。 `@EnableApolloConfig`默认是从application命名空间获取配置的,相当于`@EnableApolloConfig("application")`.。

4.获取配置

application命名空间配置信息 java bean:

@Component

@EnableApolloConfig

@Getter

@Setter

@ToString

public class AppNamespace {

@Value("${spring.application.name:}")

private String name;

@Value("${server.port:}")

private String value;

}

java bean:

@Component

@EnableApolloConfig("CASE.test_namespace")

@Getter

@Setter

@ToString

public class TestNamespace {

@Value("${name}")

private String name;

@Value("${value}")

private String value;

}

使用:

@RestController

public class DemoController {

@Autowired

private TestNamespace demo;

@Autowired

private AppNamespace application;

@ApolloConfig

private Config appConfig;

@ApolloConfig("CASE.test_namespace")

private Config testConfig1;

private Config testConfig2 = ConfigService.getConfig("CASE.test_namespace");

}

以上两种方式获取配置信息的值,会跟配置中心的更改同步(1秒内);还可以使用@ConfigurationProperties来获取配置信息,但这种方式不会同步更新,需要额外的编码配置才能实现,具体查看官方文档。

5.其他

@ApolloJsonValue注解,作用相当于@Value,将JSON字符串转成对象。

@ApolloConfigChangeListener注解::

@ApolloConfigChangeListener

private void someOnChange(ConfigChangeEvent changeEvent) {

//update injected value of batch if it is changed in Apollo

if (changeEvent.isChanged("key")) {

System.out.println(config.getIntProperty("key", ""));

}

}

@ApolloConfigChangeListener相当于@ApolloConfigChangeListener("application")

相当于:

Config config = ConfigService.getAppConfig();

config.addChangeListener(new ConfigChangeListener() {

@Override

public void onChange(ConfigChangeEvent changeEvent) {

System.out.println("Changes for namespace " + changeEvent.getNamespace());

for (String key : changeEvent.changedKeys()) {

ConfigChange change = changeEvent.getChange(key);

System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));

}

}

});

如果同时以两种方式绑定changeListener的方式,只有ConfigService实例的监听器会生效。

2.其他

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JNI----Native本地方法接口

Native本地方法接口 JNI:Java Native Interface 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C程序 native:凡是带native关键字的,说明java的作用范围达不到了,会去调用底层c语言的库&#xff01…

项目管理基础:系统分析相关概念介绍

1、系统分析的主要任务系统分析主要任务是对现行的系统进一步详细调查,将调查得到的资料集中,对组织内部整体管理状况和信息处理过程进行分析,为系统开发提供所需要的资料,并提交系统方案说明书。2、系统分析的主要阶段系统分析主…

线性代数及其应用_线性代数入门——行列式的简单应用选讲

系列简介:这个系列文章讲解线性代数的基础内容,注重学习方法的培养。线性代数课程的一个重要特点(也是难点)是概念众多,而且各概念间有着千丝万缕的联系,对于初学者不易理解的问题我们会不惜笔墨加以解释。在内容上,以…

系统开发基础:UML相关知识笔记

1、UML概念统一建模语言(Unified Modeling Language UML)是面向对象软件的标准建模语言。由于简单、统一,又能够表达软件设计中的动态和静态信息。目前UML已经成为可视化建模语言的工业标准。2、UML的组成UML三要素:构造块、规则、…

迭代器 java_面试必备(含答案):30 个 Java 高频面试问题

Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点。这里,我列出了一些关于Java集合的重要问题和答案。1.Java集合框架是什么?说出一些集合框架的优点?每种编程语言中都有集合,最初的Java版本包含几…

硬件基础:台式电脑上的常用的几个接口!

今天给大家详细讲解台式电脑上的常用的几个接口!1、I/O接口部分下图所有的接口,也是我们机箱后面的接口,统称为:I/O接口。2、键鼠PS/2PS/2接口是I/O接口中比较常见的一种接口,用来连接键盘和鼠标,二者可以用…

系统开发基础:UML中图的相关知识笔记(上)

1、图的概念图(Diagram) 是一组元素的图形表示,大多数情况下,把图画成顶点(代表事物)和弧(表示关系)的连通图。2、UML中图的分类UML2.0中的图主要有:类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、部…

系统开发基础:UML中图的相关知识笔记(下)

1、状态图状态图展现了一个状态机,它由状态、转换、事件、活动组成。状态图关注系统的动态视图,它对于接口、类、协作的行为建模尤为重要,它强调对象行为的事件顺序。组成:简单状态、组合状态、转换(事件和动作&#x…

系统设计基础:系统设计基本任务相关知识

1、系统设计的目的提前为系统指定蓝图,在各种技术和实施方法中进行权衡,精心设计,合理利用各种资源、最终确定新系统的详细设计方案。2、系统设计的内容系统设计的内容主要包括系统总体结构设计、代码设计、输出设计、输入设计、处理过程设计…

java7 3dm下载_3DM游戏运行库合集安装包v2.8

游戏运行库大全 游戏运行环境 所有游戏组件 32位 64位系统常用运行库合集 3DM游戏常用运行库安装包 下载 幸姨作品本安装包集成32位和64位运行库,是目前互联网上最新最全的常用运行库合集,能自动识别系统版本以提供适合您的组件,无人值守自动…

uci数据集_干货收藏!三大领域常用十大开源数据集

全文共1144字,预计学习时长2分钟机器学习的研究与实现离不开大数据。知晓通用的开源数据集,一方面可以验证自己算法,另一方面也可以与其他算法进行比较。本文介绍了计算机视觉、自然语言处理和语音识别三大领域的十个开源数据集以供你参考&am…

系统设计知识:系统设计的基本原理介绍

1、抽象抽象主要用来将复杂的现象简化到可以分析、实验或者可以理解的程度。抽象的最低层就是实现该软件的源程序代码。在进行模块化设计也可以有多个抽象层次,最高抽象层次的模块用概括的方式描述问题的解决方案。较低层次的模块是对更高抽象层次模块对问题描述的细…

java内存溢出怎样查找代码_JVM - 内存溢出,问题查找

当内存溢出会抛出 java.lang.OutOfMemoryError: Java heap space 的异常,那这个时候怎样去分析到底哪里导致内存溢出呢?我们可以通过在vm的参数, -XX:HeapDumpOnOutOfMemoryError 记住这个理是大写XX。当内存溢出后,显示java.lang…

系统设计知识:系统模块结构设计知识笔记

1、什么是模块?模块可以认为是组成系统的基本单位,它具有可组合、分解、更换的特点。系统中任何一个处理功能都能看成是一个模块。模块根据具体化的程度可划分为逻辑模块和物理模块。模块的要素:输入输出:模块的输入来源和去向都是…

安卓扫一扫自动跳转软件_ipad软件使用技巧

适用于三款ipadipad pro 1ipad pro2ipad 2018三个ipad软件分别是notability、goodnotes、和MarginNote,这三个软件各有特点。其中notability、goodnotes是笔记软件,同样都可以自己创立笔记本配合苹果笔像手写一样做笔记,也可以导入pdf作为阅读…