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…

python的flag是什么意思_网上老说的flag是什么意思

近些年,国内的网络发展速度还是很快的,大家可以通过网络了解很多的东西,因此网络上也有很多热词开始流行起来,其中flag算是十分流行的一个词汇,网上老说的flag是什么意思?立个flag是什么梗?可能还有一些朋友并不是很…

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

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

java线程池和线程实例化_浅谈Java 线程池原理及使用方式

一、简介什么是线程池?池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用。java中有线程池、连接池等等。线程池就是在系统启动或者实例化池时创建一些空闲的线程,等待工作调度,执…

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

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

RocketMQ 使用及常见问题

前言 本文档是针对RocketMQ使用及常见问题的说明。 一.获取项目、安装包及文档 1. alibaba/RocketMQ https://github.com/alibaba/RocketMQ 2. Download the latest release package https://github.com/alibaba/RocketMQ/releases 3.…

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

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

java中什么是运行异常_在java中最常用的运行时异常是什么?

我从不会抛出NullPointerException。对我来说,它是一个出现在代码中当出现问题时,需要开发人员看看会发生什么。然后(s)他固定的原因,它不会再次发生。我使用IllegalStateException表示对象配置不正确或调用的顺序不正确。但是,我…

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

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

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

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

CSS-DOM介绍

三位一体的网页: 我们在浏览器里看到的网页其实是由以下三层信息构成的一个共同体: 1、结构层: 结构层是由HTML和XHTML之类的标记语言所构成的。所就是哪些出现在html标签里面的单词,对网页内容的语义含义作出了如下描述&#xff0c;例如&#xff0c;<p>This is a paragr…

java 开发注意项_JAVA开发注意事项集锦

本篇博客用于持续记录开发过程中的常用的需要注意的事项&#xff0c;都是严重的生产问题大家总结出来的、记得持续更新喔。一&#xff0c;不要以时间戳作为唯一健时间戳精确到ms级别&#xff0c;并不能作为唯一入口参数&#xff0c;数据库更新唯一查询参数&#xff0c;唯一健需…

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

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

python循环顶帖_设计Python数据库连接池1-对象的循环引用问题

在Python中如果对象定义了__del__方法的话&#xff0c;在对象的引用记数为0时会自动调用__del__方法(很象c中的析构函数)&#xff0c;但如果A对象引用B对象&#xff0c;B对象又引用A对象&#xff0c;就形成循环引用&#xff0c;此时A&#xff0c;B对象引用次数都为1。python就无…

编译时类型 和运行时类型的 区别(1)

class T{ void f(int x){ System.out.println("int in T:" x); } void f(double x){ System.out.println("double in T:"x); } void f(Object x){ System.out.println("Object in T:" x); }} class S extends T{ void f(int x){  //子类覆盖基…

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

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

java京东左侧固定层_京东首页右侧固定层

需求说明制作京东首页右侧的固定层&#xff0c;6个图标&#xff1a;京东会员、购物车、我的关注、我的足迹、我的消息和咨询JIMI默认状态下仅显示图标&#xff0c;背景颜色为深灰色&#xff1b;当鼠标移至图标上时&#xff0c;背景颜色为深红色&#xff0c;并且显示文本css*{ma…