springboot集成disconf实现配置文件实时刷新

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/charry_a/article/details/79242822

一、disconf介绍


         disconf是百度的一个分布式配置中心,由于我们项目配置文件较多,都是properties文件,虽然也支持实时生效,但是没有一个可视化的WEB端用来管理(每次修改配置文件需要提上线流程上线修改),目前采用disconf来实现


二、springboot集成disconf


       本篇只是一个入门因为还在调研阶段,本篇采用注解方式实现,因为注解实现的可以实时生效而xml的方式需要自己reload到bean里面。

   首先在disconf-web管理后端建一个app和对应的配置文件(这里以监听redis.properties为例)

       在新建的一个app叫做myApp下新建配置文件:

   建好后:

  

    来看应用:

        springboot的项目结构不是这样重点,主要注意包扫描就行,自己看配置文件,在springboot项目的resources目录下面咱们有2个配置文件,一个是disconf.xml一个是disconf.properties

      disconf.xml配置如下:

      

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
        http://www.springframework.org/schema/aop  
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
        
   <aop:aspectj-autoproxy proxy-target-class="true"/> 
   
   <!-- 以下是基于注解的实现方式 -->
   <bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean" destroy-method="destroy">
      <property name="scanPackage" value="com.spring.boot.disconf"></property>
   </bean> 
   
   <bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond"  
          init-method="init" destroy-method="destroy">  
    </bean>  
      
  </beans>

      disconf.properties配置如下:

     
disconf.enable.remote.conf=true
# 这个地址是你disconf-web端的入口地址
disconf.conf_server_host=192.168.80.136:8081/disconf-web/
disconf.version=1_0_0_0
#和刚才web端的配置一样
disconf.app=myApp
disconf.env=local
disconf.debug=true
disconf.conf_server_url_retry_times=1
disconf.conf_server_url_retry_sleep_seconds=1
disconf.user_define_download_dir=./config


     配置文件配置好之后,再来看代码,首先新建一个jedisConfig的类

     

package com.spring.boot.disconf.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;

import com.baidu.disconf.client.common.annotations.DisconfFile;
import com.baidu.disconf.client.common.annotations.DisconfFileItem;
import com.baidu.disconf.client.common.update.IDisconfUpdate;

@Configuration
@DisconfFile(filename="redis.properties",targetDirPath="/config")
public class JedisConfig implements IDisconfUpdate{
	
        protected static final Logger LOGGER = LoggerFactory  
	            .getLogger(JedisConfig.class);  
	private String host;
	private int port;
	@DisconfFileItem(name="redis.host",associateField="host")
	public String getHost() {
		return host;
	}
	public void setHost(String host) {
		this.host = host;
	}
	@DisconfFileItem(name="redis.port",associateField="port")
	public int getPort() {
		return port;
	}
	public void setPort(int port) {
		this.port = port;
	}
	@Override
	public void reload() throws Exception {
		LOGGER.info("监听的redis数据;IP=" + getHost() + ";端口=" + getPort());
	}
}


     新建一个controller用来浏览器访问,这里主要用来查看redis的详细配置信息

   

package com.spring.boot.disconf.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.spring.boot.disconf.config.JedisConfig;

@RestController
@RequestMapping("/disconf/redis")
public class DisconfRedisController {
	
	@Autowired
	private JedisConfig jedisConfig;
	
	@RequestMapping("/getNewData")
	public String getNewDdata() {
		String host = jedisConfig.getHost();
		int prot = jedisConfig.getPort();
		return host+";"+prot;
	}
}


     springboot项目启动类:

   

package com.spring.boot.disconf;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource({"classpath:disconf.xml"})
public class DisconfSpringBootApplication {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SpringApplication.run(DisconfSpringBootApplication.class, args);
	}
	
}

    启动springboot项目后,在控制台会打印很多信息,比如zk连接,redis信息等,现在我们来访问controller

    第一次访问:

   

    在disconf-web管理端修改配置信息

   

    点击上传后,查看disconf的数据库Config表

   

 

    发现redis的port已经被我改成了6380,现在我们再来访问一次

  

    发现配置文件更新后应用已经监听到并实时刷新了。

展开阅读全文

没有更多推荐了,返回首页