Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
通过对比,可以看出,生成环境中 Apollo 相比 Spring Cloud Config 更具有优势一些。
参照 https://github.com/ctripcorp/apollo/wiki/Quick-Start 搭建 Apollo 配置中心,文档写的很清楚,这里就赘述了。
搭建完成并启动后,访问 http://localhost:8070 ,界面如下。
输入用户名 apollo,密码 admin 后登录后,点击SampleApp进入配置界面。
创建一个springboot项目,主要代码如下。
添加 Apollo 客户端的依赖,为了编码方便引入commons-lang3。
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.3.0</version>
</dependency>
<!-- 为了编码方便,并非apollo 必须的依赖 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
server:
port: 8761
app:
id: springboot-apollo
apollo:
meta: http://127.0.0.1:8080
bootstrap:
enabled: true
eagerLoad:
enabled: true
logging:
level:
com:
gf:
controller: debug
配置说明:
@RestController
public class HelloController {
private static Logger logger = LoggerFactory.getLogger( HelloController.class );
@Value( "${server.port}" )
String port;
@GetMapping("hi")
public String hi(String name) {
logger.debug( "debug log..." );
logger.info( "info log..." );
logger.warn( "warn log..." );
return "hi " + name + " ,i am from port:" + port;
}
}
@SpringBootApplication
@EnableApolloConfig
public class SpringbootApolloApplication {
public static void main(String[] args) {
SpringApplication.run( SpringbootApolloApplication.class, args );
}
}
启动项目。现在需要去配置中心做些关于这个springboot客户端的一些配置。
第一步:访问http://localhost:8070 登录后,选择创建项目。
第二步:填写配置信息。
配置说明:
提交配置后会出现如下项目配置的管理页面。
第一步:点击 “新增配置”,配置需要管理的 application.properties 中的属性。
点击提交,之后按照同样的方法,新增需要动态管理的 application.properties 中的属性。
提交后,跳转到配置的管理界面:
配置只有在发布后才会真的被应用使用到,所以在编辑完配置后,需要发布配置。点击“发布按钮”。
填写发布相关信息,点击发布 。
在配置中心,修改 server.port 的值为 8762 并发布。
Postman 访问之前写个测试接口 http://127.0.0.1:8761/hi?name=zhangsan ,返回如下。
说明 客户端 获取到了 配置中心修改后的 server.port 的值 。
注意:
日志模块是每个项目中必须的,用来记录程序运行中的相关信息。一般在开发环境下使用DEBUG级别的日志输出,为了方便查看问题,而在线上一般都使用INFO或者ERROR级别的日志,主要记录业务操作或者错误的日志。那么问题来了,当线上环境出现问题希望输出DEBUG日志信息辅助排查的时候怎么办呢?修改配置文件,重新打包然后上传重启线上环境,以前确实是这么做的。
虽然上面我们已经把日志的配置部署到Apollo配置中心,但在配置中心修改日志等级,依然需要重启应用才生效,下面我们就通过监听配置的变化,来达到热更新的效果。
@Configuration
public class LoggerConfig {
private static final Logger logger = LoggerFactory.getLogger(LoggerConfig.class);
private static final String LOGGER_TAG = "logging.level.";
@Autowired
private LoggingSystem loggingSystem;
@ApolloConfig
private Config config;
@ApolloConfigChangeListener
private void configChangeListter(ConfigChangeEvent changeEvent) {
refreshLoggingLevels();
}
@PostConstruct
private void refreshLoggingLevels() {
Set<String> keyNames = config.getPropertyNames();
for (String key : keyNames) {
if (StringUtils.containsIgnoreCase(key, LOGGER_TAG)) {
String strLevel = config.getProperty(key, "info");
LogLevel level = LogLevel.valueOf(strLevel.toUpperCase());
loggingSystem.setLogLevel(key.replace(LOGGER_TAG, ""), level);
logger.info("{}:{}", key, strLevel);
}
}
}
}
关键点讲解:
application.yml 中配置的日志级别是 debug ,访问http://127.0.0.1:8761/hi?name=zhangsan ,控制台打印如下。
2019-03-05 18:29:22.673 DEBUG 4264 --- [nio-8762-exec-1] com.gf.controller.HelloController : debug log...
2019-03-05 18:29:22.673 INFO 4264 --- [nio-8762-exec-1] com.gf.controller.HelloController : info log...
2019-03-05 18:29:22.673 WARN 4264 --- [nio-8762-exec-1] com.gf.controller.HelloController : warn log...
现在在配置中心修改日志级别为 warn。
再次访问http://127.0.0.1:8761/hi?name=zhangsan ,控制台打印如下。
2019-03-05 19:07:19.469 WARN 4264 --- [nio-8762-exec-3] com.gf.controller.HelloController : warn log...
说明日志级别的配置,已经支持热更新了。关于apollo 的更多应用 ,可以参照github的文档。
源码下载 : https://github.com/gf-huanchupk/SpringBootLearning/tree/master/springboot-apollo
欢迎扫码或微信搜索公众号《程序员果果》关注我,关注有惊喜~
Original url: Access
Created at: 2020-04-18 16:55:42
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论