JAVA开发(通过Apollo注入配置信息的几种方式)

这篇具有很好参考价值的文章主要介绍了JAVA开发(通过Apollo注入配置信息的几种方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在springCloud中有一个重要的组件就是配置中心,config:server,用于配置springboot中需要注入的各种配置项。但是现在发现越来越多的企业使用Apollo进行集成。博主在开发中也是使用Apollo进行配置。本文总结Apollo的的使用,集成到springboot,和注入方式等。

JAVA开发(通过Apollo注入配置信息的几种方式)

 

一、Apollo简介

Apollo是携程框架部门研发的开源配置管理中心,能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时的推送到应用端,并且有关于权限管理、流程治理等功能。

(一)Apollo支持四个维度管理key-value格式的配置

  • application(应用级别的,针对于当前应用)
  • environment(环境级别的,在不同环境下可以有不同的配置。比如dev、prod环境)
  • cluster(集群。可以根据集群分为不同的配置)
  • namespace(命名空间。不同的配置文件,比如db的配置,rpc的配置等等) 

(二)Apollo的特性

  • 可以统一去管理不同环境、不同集群的配置。
    (1)同一份代码部署在不同的集群,可以有不同的配置。
    (2)可以通过配置namespace去让不同的应用共享同一份配置(public公共配置),也可以通过关联公共的namespace,并且根据自己的需求对公共配置进行覆盖。(相当于子类可以继承父类,对于父类中的成员,不满足需要的可以自己进行覆盖。)
  • 支持热发布。在管理界面修改完配置后,客户端可以实时的接收到。(据它的描述,时间为1s)
  • 每一次改动配置进行发布,都会有对应的版本的概念,方便后续进行回滚。
  • 灰度发布。(是指改动配置点击发布,只针对部分实例生效。待观察之后,没有问题,再推送到所有实例。)
  • 权限管理(可以针对不同的操作,分配以不同的权限。并且在配置的改动发布上,分为编辑和发布两个独立的操作。)
  • 支持Java和.Net客户端。
  • 提供开放平台API。
  • 部署简单方便(目前唯一的外部依赖是MySQL,因此安装好JDK和MySQL就可以运行。)

二、Apollo的架构与工作原理

(一)Apollo的核心概念

  • application(应用):实际使用配置的应用。
  • environment(环境):配置所对应的环境。比如dev、prd等环境,在不同的环境中可以有不同的配置。默认是读取机器上的配置(server.properties中的env属性)
  • cluster(集群):一个应用下不同实例的分组。比如将北京机房的应用实例分为一个集群,燕郊机房的应用实例分为另一个集群。同一个配置在不同的集群下可以有不同的值。默认是读取机器上(server.properties中的idc属性)
  • namespace(命名空间):一个应用下不同配置的分组,可以理解为配置文件。比如数据库配置文件,rpc配置文件,以及应用自身的配置文件。

(二)Apollo客户端的实现原理

  • 客户端和服务端通过http long polling保持了一个长连接,从而能第一时间获取配置更新的推送。
  • 客户端会定时从Apollo配置中心服务端拉取应用的最新配置
  • 客户端获取到最新的配置后,会保存在内存中。
  • 客户端会将获取到的配置缓存一份在本地(为了保证服务不可用时,从本地恢复)
  • 应用程序可以通过客户端取获取最新的配置。
  • 注:想深入了解的可以去研究下源码,在github上同时也给出了Apollo的源码分析链接)

JAVA开发(通过Apollo注入配置信息的几种方式)

 三、Apollo的安装(这里介绍通过docker进行安装)

1、 准备工作

Apllo的部署需要Mysql数据库,需要5.6.5以上版本。

2、 创建数据库

Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。

执行两个sql文件(通过携程Apollo社区下载)

sql/apolloportaldb.sql

sql/apolloconfigdb.sql

会创建两个数据库

sql文件可在官网:Quick Start · apolloconfig/apollo Wiki · GitHub 下载

 3、服务器上创建shell脚本文件

在/home/docker/script路径下创建“apollo”文件夹

 在/home/docker/script/apollo路径下创建“apollo-portal.sh”脚本文件,内容为:

docker run -d \
--name apollo-portal \
--net=host \
-v /tmp/logs:/opt/logs \
-e SPRING_DATASOURCE_URL=
"jdbc:mysql://数据库地址/apollo_portal?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=数据库账号\
-e SPRING_DATASOURCE_PASSWORD=数据库密码\
-e APOLLO_PORTAL_ENVS=test \
-e TEST_META=http://服务器ip地址:8080 \
apolloconfig/apollo-portal

在/home/docker/script/apollo路径下创建“apollo-config.sh”脚本文件,内容为:

docker run -d \
--name apollo-configservice \
--net=host \
-v /tmp/logs:/opt/logs \
-e SPRING_DATASOURCE_URL=
"jdbc:mysql://数据库地址/apollo_config?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=数据库账号\
-e SPRING_DATASOURCE_PASSWORD=数据库密码\
apolloconfig/apollo-configservice

在/home/docker/script/apollo路径下创建“apollo-admin.sh”脚本文件,内容为:

docker run -d \
--name apollo-adminservice \
--net=host \
-v /tmp/logs:/opt/logs \
-e SPRING_DATASOURCE_URL=
"jdbc:mysql://数据库地址/apollo_config?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=数据库账号\
-e SPRING_DATASOURCE_PASSWORD=数据库密码\
apolloconfig/apollo-adminservice

4、通过docker拉取Apollo镜像

docker pull apolloconfig/apollo-configservice:latest
docker pull apolloconfig/apollo-adminservice:latest
docker pull apolloconfig/apollo-portal:latest

5、运行Apollo

1. ./apollo-portal.sh
2. ./apollo-config.sh
3. ./apollo-admin.sh

6.访问Apollo

JAVA开发(通过Apollo注入配置信息的几种方式)

 

访问服务器IP:8070可以进行访问,默认的用户名是apollo,密码是admin。

四、Apollo集成到springboot

1、引入maven

		<!-- apollo -->
		<dependency>
			<groupId>com.ctrip.framework.apollo</groupId>
			<artifactId>apollo-client</artifactId>
			<version>${apollo.version}</version>
		</dependency>

		<dependency>
			<groupId>com.ctrip.framework.apollo</groupId>
			<artifactId>apollo-core</artifactId>
			<version>${apollo.version}</version>
		</dependency>

2.启动类注解@EnableApolloConfig

在Apollo系统配置完成配置后

注入方式一:

例子:

	/**
	 * 微信主体appId
	 */
	@Value("${weixin.appid:-1}")
	private String appid;

注入方式二:

使用注解@ConfigurationProperties 使用实体的方式,个人觉得这种方式更好。

例子:

Apollo中配置的格式和yml的格式一致

oss:
  tencent:
    domain:
    region: mhyr-api
    bucketName: mhyr-13015545476
    secretId:  
    secretKey: 
    styleRule:
    thumbnailStyleRule: "!Photo_Compression"
    fileTypes: ## 允许上传的文件类型
        - png
        - jpg
        - jpeg
        - gif
        - bmp
        - svg

代码通过实体类类进行映射 文章来源地址https://www.toymoban.com/news/detail-485488.html

@ConfigurationProperties(prefix = "oss.tencent")
public class TencentProperties {
	
    /**域名*/
    private String domain;
    /**地域节点*/
    private String region;
    /**存储桶名称*/
    private String bucketName;
    /**secretId*/
    private String secretId;
    /**secretKey*/
    private String secretKey;
    /**图片策略*/
    private String styleRule;
    /**缩略图策略*/
    private String thumbnailStyleRule;
    /**文件类型*/
    private List<String> fileTypes;
}

到了这里,关于JAVA开发(通过Apollo注入配置信息的几种方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java干货】Eclipse配置JDK和设置编译版本的几种方法

    【Java干货】Eclipse配置JDK和设置编译版本的几种方法 大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群~欢迎点击链接直达 今天做外包的时候给客户配置e

    2024年02月09日
    浏览(31)
  • 一文道破将bean注入到Spring中的几种方式

    前言: 前两天有学妹问我如何将bean注入到Spring中,虽问题较简单,但还是写此文以告之。 在Java的Spring框架中,将bean注入到容器中是核心概念之一,这是实现依赖注入的基础。Spring提供了多种方式来将bean注入到容器中。 写此文,同时也希望这篇文章能帮助到各位路过的大佬

    2024年04月15日
    浏览(30)
  • 已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

    今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况: 可以看到 userMapper 下有个红色的波浪警告,虽然代码没有任何问题,能正常运行,但是这个红色警告在这里杵着确实让人很窝心。 于是我在网上找了找,最终明白了原因所在: 因为 IDEA 可以智能的理解上下文,然而 UserM

    2024年02月20日
    浏览(39)
  • Python通过函数名调用函数的几种场景

    除了执行系统命令外,我们有时还需要动态地执行一些python代码,有经验的朋友就会知道可以使用内置函数eval实现这一需求,如 eval(\\\"print(__file__)\\\") ,这还是比较简单的。 但如果要动态执行一个函数,讲的资料就会少一点,这次就要看这个需求该如何实现。 1 通过eval调用同一

    2024年04月13日
    浏览(25)
  • MCU输出日志和调试信息的几种方法

    基于MCU的嵌入式软件开发,可能在某些情况下没有多余存储空间,从而没有在本地有效保存调试和日志信息。 这时,通过某种方式把调试(Debug)和日志(Log)信息输出就显得有意义了。 下面就来讲讲关于嵌入式开发中输出调试和日志信息的几点内容。 标准库 printf 直接输出

    2024年03月15日
    浏览(46)
  • SpringBoot通过ip获取归属地,你应该知道的几种方式。

    Hi,大家好,我是抢老婆酸奶的小肥仔。 在日常我们逛网站的时候会发现我们登录后会出现归属地信息,例如:我在广州登录会显示广东广州,有些更加精确的会显示到区县。 那么我们来看看有哪些方式来获取归属地信息?今天我们来聊一聊。 公共方法: 获取用户ip地址:

    2024年04月09日
    浏览(42)
  • Labview实现用户界面切换的几种方式---通过VI间相互调用

    在做用户界面时我们的程序往往面对的 对象是程序使用者 ,复杂程序如果放在同一个页面中,往往会导致程序冗长卡顿,此时通过多个VI之间的切换就可以实现多个界面之间的转换,也会显得程序更加的高大上。 本文所有程序均可下载,下载地址在文章结尾列举~ 本文同样以

    2024年01月19日
    浏览(28)
  • SpringBoot读取配置的几种方式

    1.第一种@Value 注意:static和final修饰的变量不生效 2.通过@ConfigurationProperties(prefix=“”)   适用于对对象多个变量统一绑定,比@Value高效 3.通过Environment Spring底层提供的API动态获取变量值    4.通过@PropertySources获取外部文件路径,再通过@Value获取值  只能读取properties文件

    2024年02月15日
    浏览(28)
  • APP开发——目前APP开发的几种形式

    关于APP开发目前已经过了火热的阶段,现在学习APP开发的人越来越多,但在实际的业务场景中,APP开发还是有一部分的市场需求。 所以,这里简单记录一下APP开发的几种思路和方案。 首先,目前APP开发主要有两大平台,一个是安卓,一个是IOS,其他的比如微软的移动系统都

    2024年02月02日
    浏览(37)
  • Jenkins的几种安装方式以及邮件配置

    目录 Jenkins介绍 Jenkins下载、安装 一、通过war包安装 二、通过docker安装 jenkins 容器中添加 git, maven 等组件 jenkins 容器中的公钥私钥 在 jenkins 容器中调用 docker 简单的方式启动 Docker server REST API 一个 jenkins 示例 三、通过Homebrew安装 访问Jenkins、Jenkins配置 Jenkins配置邮件发送 Jen

    2024年02月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包