SpringFramework应用接入Apollo配置中心过程解析

环境:

SpringFramework:4.3.5.RELEASE

apollo-client:1.5.1

1.在项目的 resources/META-INF/ 目录下添加 app.properties 文件:

#Apollo配置id
app.id = phpdragon-demo
apollo.bootstrap.enabled = true
apollo.eagerLoad.enabled = true
apollo.cacheDir = /data/app_data/apollo_cache/

2. 新建 ApolloConfigurer 类,负责处理合并本地properties配置:

import com.alibaba.dubbo.common.utils.ConfigUtils;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

import java.util.Properties;
import java.util.Set;

/**
 * 处理apollo配置
 */
public class ApolloConfigurer extends PropertyPlaceholderConfigurer {

  static final String[] NAMESPACES = {"PUBLIC", "REDIS", "ZOOKEEPER", "application"};

  @Override
  protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {
    try {
      this.reloadProperties(props);
    } catch (Exception e) {
      e.printStackTrace();
      logger.info("获取apollo配置失败");
    }

    //设置到dubbo的上下里
    ConfigUtils.addProperties(props);

    super.processProperties(beanFactoryToProcess, props);
  }

  private void reloadProperties(Properties props) {
    for (String namespace : NAMESPACES) {
      Config config = ConfigService.getConfig(namespace);
      Set<String> fieldNames = config.getPropertyNames();
      for (String attributeName : fieldNames) {
        props.put(attributeName, config.getProperty(attributeName, ""));
        //设置到系统变量里
        System.setProperty(attributeName, config.getProperty(attributeName, ""));
      }
    }
  }
  @Override
  protected String resolvePlaceholder(String placeholder, Properties props) {
    this.reloadProperties(props);
    return props.getProperty(placeholder);
  }
}

3.在 Spring 的配置xml文件中声明配置:

<bean class="com.phpdragon.config.ApolloConfigurer">
  <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
  <property name="ignoreResourceNotFound" value="true"/>
  <property name="trimValues" value="true"/>
  <property name="locations">
    <list>
      <value>classpath*:*.properties</value>
      <value>classpath*:properties/*.properties</value>
    </list>
  </property>
  <property name="fileEncoding" value="UTF-8"/>
</bean>

4.编写配置类接收远程配置变量:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;

import lombok.Data;

/**
 *
 */
@Data
@Configuration
//@EnableApolloConfig不能使用该注解,否则会导致无效,该注解由 ApolloConfigurer 接管类似功能
public class RedisConfig {

  @Value("${sys.redis.host}")
  private String hostName;

  @Value("${sys.redis.port}")
  private int port;

  @Value("${redis.password}")
  private String password;

  @Value("${redis.timeout}")
  private int timeout;

  @Value("${redis.pool.maxTotal}")
  private int maxTotal;

  @Value("${redis.pool.minIdle}")
  private int minIdle;

  @Value("${redis.pool.maxIdle}")
  private int maxIdle;

  @Value("${redis.pool.maxWaitMillis}")
  private long maxWaitMillis;

  @Value("${redis.pool.testOnBorrow}")
  private boolean testOnBorrow;

  @Value("${redis.pool.testOnReturn}")
  private boolean testOnReturn;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 简单了解Spring Framework5.0新特性

    SpringFramework5.0是自2013年12月版本4发布之后SpringFramework的第一个主发行版.SpringFramework项目的领导人JuergenHoeller于2016年7月28日宣布了第一个SpringFramework5.0里程碑版本(5.0M1). 现在,将近一年的时间过去以后,我们期盼已久的RC3版本将于2017年7月18日发行.这是路线图规划中SpringFramework5.0首个GA发行版的最后一次发行. 从高层来看,SpringFramework5.

  • 使用Spring Framework 时常犯的十大错误(小结)

    1. 错误一:太过关注底层 我们正在解决这个常见错误,是因为 "非我所创" 综合症在软件开发领域很是常见.症状包括经常重写一些常见的代码,很多开发人员都有这种症状. 虽然理解特定库的内部结构及其实现,在很大程度上是好的并且很有必要的(也可以是一个很好的学习过程),但作为软件工程师,不断地处理相同的底层实现细节对个人的开发生涯是有害的.像 Spring 这种抽象框架的存在是有原因的,它将你从重复地手工劳作中解放出来,并允许你专注于更高层次的细节 -- 领域对象和业务逻辑. 因此,接受抽象

  • SpringBoot配置Apollo代码实例

    这篇文章主要介绍了SpringBoot配置Apollo代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Windows环境安装下载,参考:https://github.com/ctripcorp/apollo 项目引用 <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</art

  • spring framework体系结构及模块jar依赖关系详解

    本文对于Spring的JAR包使用和配置,结合网友材料以spring 4.3.6.RELEASE版本为例,介绍spring框架结构和各模块对应JAR包以及模块间JAR依赖关系. 注:不同版本JAR包依赖会有所区别 spring官网给出了一张spring4的结构图 图中可以简单认为将spring分为5个部分:core.aop.data access.web.test,图中每个圆角矩形都对应相应jar包,如果在maven中配置,所有这些jar的"groupId"都是"org.sp

  • SPRING FRAMEWORK BEAN作用域和生命周期原理解析

    这篇文章主要介绍了SPRING FRAMEWORK BEAN作用域和生命周期原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring beand的作用域 设置为singleton时,相当于一个类只能有一个实例,当再次申请时,返回的是同一个实例 可以看到两个bean实例的hashcode值是一样的,说明在此申请到的是同一个实例 将bean的作用域设置为prototype时,再次运行,可以看到,申请到的是两个不同bean实例 目前只学习

  • Spring Framework 5.0 入门教程

    1. 为什么学习Spring? 随着对Java EE的不断接触和理解,你会发现Spring 在各个企业和项目中发挥着越来越重要的作用.掌握Spring 已成为我们IT行业生存必学的本领之一. Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本. 该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-76

  • spring cloud 阿波罗 apollo 本地开发环境搭建过程

    开源配置中心 - Apollo Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性.服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器. 检出代码 apollo github 可以fork下然后本地使用idea打开 数据库脚本 执行以下脚本创建ApolloConifgDB.ApolloPortalDB apoll

  • Springboot项目如何使用apollo配置中心

    这篇文章主要介绍了Springboot项目如何使用apollo配置中心,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 引入 apollo 配置依赖 <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.1.0<

  • SpringFramework应用接入Apollo配置中心过程解析

    环境: SpringFramework:4.3.5.RELEASE apollo-client:1.5.1 1.在项目的 resources/META-INF/ 目录下添加 app.properties 文件: #Apollo配置id app.id = phpdragon-demo apollo.bootstrap.enabled = true apollo.eagerLoad.enabled = true apollo.cacheDir = /data/app_data/apollo_cach

  • springboot logback如何从apollo配置中心读取变量

    目录 springboot logback 从apollo配置中心读取变量 1.在apollo配置中心添加 2.项目的application.yml配置文件配置如下 3.在logback.xml配置springProperty标签 SpringBoot Logback无法获取配置中心属性 如何解决 解决方案 springboot logback 从apollo配置中心读取变量 1.在apollo配置中心添加 logback-config.properties配置文件 2.项目的applicati

  • Spring Boot Logback配置日志过程解析

    这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 出于性能等原因,Logback 目前是springboot应用日志的标配: 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式. 配置时考虑点 支持日志路径,日志level等配置 日志控制配置通过application.yml下发 按天生成日志,当天的日志>50MB回滚 最多保存10天日志 生成的日志中Pattern自

  • 使用Springboot整合Apollo配置中心

    Apollo简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景. 官方网站 https://github.com/ctripcorp/apollo Apollo 环境搭建 详细步骤参见: https://github.com/ctripcorp/apollo/wiki/Quick-Start 官网已经很详细的说明了操作步骤.但是有很多前置条件才能完

  • SpringBoot整合Apollo配置中心快速使用详解

    目录 一.简介 二.使用 1. 测试项目搭建 2. Apollo配置中心的配置 3. 项目启动与测试 4.常见整合问题 附录 一.简介 1.Apollo 是什么?Apollo(阿波罗)是携程框架部门研发的分布式配置中心.服务端基于Spring Boot和Spring Cloud开发. 2.为什么要使用Apollo? 安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏 时效性:普通方式配置,修改配置,需要重启服务才能生效 局限性:无法支持动态调整:例如日志开关.功能开关 二.使用 1. 测试项

  • spring boot微服务场景下apollo加载过程解析

    目录 集成使用 1.添加gradle依赖 2.配置application.properties 必须配置 可选配置 加载过程解析 postProcessEnvironment方法逻辑解析 initialize方法逻辑解析 结语 集成使用 1.添加 gradle 依赖 implementation "com.ctrip.framework.apollo:apollo-client:1.6.0" 2.配置 application.properties apollo 自身的配置共包含 9 项

  • CentOS7使用docker部署Apollo配置中心的实现

    Apollo开源地址: https://github.com/ctripcorp/apollo 第一步 将项目clone到本地,然后在github的releases页面中下载三个zip文件 本文中重点讲解截止2019年1月最新的1.2.0版本的部署方法 第二步 打开clone到本地的项目,目录结构如下 第三步 在此目录下创建docker-compose.yml文件,写入内容: version: "3" services: apollo-configservice: ##容器服务名 co

  • Quarkus集成apollo配置中心

    目录 前言 Quarkus的config构成 microProfileconfig设计 集成apollo 前言 Quarkus默认的配置文件和spring boot 一样,默认读取application.properties文件. apollo是一个配置集中管理的开源项目,已被广泛应用. 下面我们就分析下Quarkus的配置加载结构,将apollo集成进来. Eclipse MicroProfile Config:https://github.com/eclipse/microprofile-c

  • 如何通过XML方式配置AOP过程解析

    第一步:把通知类用 bean 标签配置起来 <bean id="txManager" class="com.atguigu.account.utils.TransactionManager"> <!-- 注入ConnectionUtils --> <property name="connectionUtils" ref="connectionUtils" /> </bean> 第

随机推荐