热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springboot2config_toolkit并且设置全局获取数据GlobalUtil

本文只贴相关代码段,完整代码请移步至本人"github",若是喜欢,可以star给予支持作者:cnJun博客专栏:https:www.cnblo

本文只贴相关代码段,完整代码请移步至本人github,若是喜欢,可以star给予支持

作者:cnJun
博客专栏:
https://www.cnblogs.com/cnJun/

本文实现目标

  • 重要的配置信息进行统一管理,例如数据库密码等。
  • 项目端口号、上下文等可以直接设置在配置中心
  • xml、properties、java、ftl文件可以轻松获取到配置中心的配置信息

前期工作

对于config_toolkit及zookeeper的安装及创建节点请自己查阅相关资料
config_toolkit初始配置可以参考https://github.com/dangdangdotcom/config-toolkit

具体实现

启动项设置

-Dconfig.zookeeper.cOnnectString=localhost:2181
-Dconfig.rootNode=/project/module
-Dconfig.version=1.0.0
-Dconfig.groupName=sb2

其中
connectString为zookeeper的连接地址加端口号
rootNode为在zookeeper创建的根节点
version为版本号
groupName是你自己创建的组管理名称

导入相关jar包


    com.dangdang
    config-toolkit
    3.3.2-RELEASE

applicationContext.xml

在applicationContext.xml中引入config_toolkit的相关配置




    Spring公共配置

    
        
        
        
    

    
        
            
                
                
                
                    
                        
                            
                            
                        
                    
                    
                    
                
            
        
    

    
        
        
        
    

  • 其中使用systemProperties获取的参数值为上面启动设置里面的值,这里可以根据自己的情况进行修改,可以直接赋值,也可以写在
  • application.properties里面获取
  • 配置中还引入了application.properties
  • 读取参数时是按照configGroups中的顺序来读取,所以会优先使用这里面前面组中所拥有的参数
  • 在xml中我们注入了configGroupSources的bean,我们后面主要从此bean中获取相关的数据

完成到这里,我们如果在配置中心配置了相关的server.portserver.contextPath,就已经可以修改启动时的端口号和上下文了

上下文工具文件 SpringContextUtil.java

此文件用于获取上面设置的configGroupSources

package com.chenyingjun.springboot2.utils;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;

/**
 * 静态获取Bean
 *
 * @author chenyingjun
 * @version 2018年08月24日
 * @since 1.0
 *
 */
@Configuration
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    /**
     * 重写上下文信息
     * @param applicationContext 上下文
     * @throws BeansException e
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        SpringContextUtil.applicatiOnContext= applicationContext;
    }

    /**
     * 获取上下文
     * @return 上下文
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 获取指定的bean
     * @param name bean名
     * @return bean对象
     * @throws BeansException e
     */
    public static Object getBean(String name) throws BeansException {
        try {
            return applicationContext.getBean(name);
        } catch (Exception e) {
            throw new RuntimeException("获取的Bean不存在!");
        }
    }

    public static  T getBean(String name, Class requiredType)
            throws BeansException {
        return applicationContext.getBean(name, requiredType);
    }

    public static boolean containsBean(String name) {
        return applicationContext.containsBean(name);
    }

    public static boolean isSingleton(String name)
            throws NoSuchBeanDefinitionException {
        return applicationContext.isSingleton(name);
    }

    public static Class getType(String name)
            throws NoSuchBeanDefinitionException {
        return applicationContext.getType(name);
    }

    public static String[] getAliases(String name)
            throws NoSuchBeanDefinitionException {
        return applicationContext.getAliases(name);
    }

}

配置参数获取文件PropertiesLoaderUtil.java

package com.chenyingjun.springboot2.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySource;

import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 * 配置参数信息
 * @author chenyingjun
 * @date 2018年8月24日
 */
public class PropertiesLoaderUtil {

    /**
     * 日志
     */
    private static Logger logger = LoggerFactory.getLogger(PropertiesLoaderUtil.class);

    /**
     * properties
     */
    private MutablePropertySources propertySources;

    /**
     * 加载配置信息
     */
    public PropertiesLoaderUtil() {
        try {
            this.propertySources = (MutablePropertySources) SpringContextUtil.getBean("configGroupSources");
        } catch (Exception var3) {
            logger.error("没有配置统一配置服务");
        }
    }

    /**
     * 根据key值获取配置信息
     * @param key key
     * @return 配置信息
     */
    private String getValue(String key) {
        String systemProperty = System.getProperty(key);
        if (systemProperty != null) {
            return systemProperty;
        } else {
            if (this.propertySources != null) {
                Iterator iter = this.propertySources.iterator();

                while(iter.hasNext()) {
                    PropertySource str = (PropertySource)iter.next();
                    if (str.containsProperty(key)) {
                        return str.getProperty(key).toString();
                    }
                }
            }
            return null;
        }
    }

    /**
     * 根据key值获取配置信息
     * @param key key
     * @return 配置信息
     */
    public String getProperty(String key) {
        String value = this.getValue(key);
        if (value == null) {
            throw new NoSuchElementException();
        } else {
            return value;
        }
    }

    /**
     * 根据key值获取配置信息
     * @param key key
     * @param defaultValue 默认值
     * @return 配置信息
     */
    public String getProperty(String key, String defaultValue) {
        String value = this.getValue(key);
        return value != null ? value : defaultValue;
    }
}

使用于获取数据后全局使用的工具类GlobalUtil.java

package com.chenyingjun.springboot2.utils;

/**
 * 配置信息获取
 * @author chenyingjun
 * @date 2018年8月13日
 */
public class GlobalUtil {

    /**
     * 配置参数信息
     */
    private static PropertiesLoaderUtil propertiesLoaderUtil;

    /**
     * 构建函数
     */
    public GlobalUtil() {
    }

    /**
     * 根据key值获取配置信息
     * @param key key
     * @return 配置信息
     */
    public static String getConfig(String key) {
        return getPropertiesLoaderUtil().getProperty(key);
    }

    /**
     * 根据key值获取配置信息
     * @param key key
     * @param defaultValue 默认值
     * @return 配置信息
     */
    public static String getConfig(String key, String defaultValue) {
        return getPropertiesLoaderUtil().getProperty(key, defaultValue);
    }

    public static int getIntConfig(String key) {
        return Integer.valueOf(getConfig(key)).intValue();
    }

    public static int getIntConfig(String key, int defaultValue) {
        return Integer.valueOf(getConfig(key, String.valueOf(defaultValue))).intValue();
    }

    public static boolean getBooleanConfig(String key) {
        return Boolean.valueOf(getConfig(key)).booleanValue();
    }

    public static boolean getBooleanConfig(String key, boolean defaultValue) {
        return Boolean.valueOf(getConfig(key, String.valueOf(defaultValue))).booleanValue();
    }

    public static long getLongConfig(String key) {
        return Long.valueOf(getConfig(key)).longValue();
    }

    public static long getLongConfig(String key, long defaultValue) {
        return Long.valueOf(getConfig(key, String.valueOf(defaultValue))).longValue();
    }


    /**
     * 加载配置文件
     * @return 配置信息
     */
    private static PropertiesLoaderUtil getPropertiesLoaderUtil() {
        if (null == propertiesLoaderUtil) {
            propertiesLoaderUtil =  new PropertiesLoaderUtil();
        }
        return propertiesLoaderUtil;
    }
}

config_toolkit数据使用范例

此时,我们可以***的对配置中心里面的数据进行获取了

java类内获取参数示例

@Value("${systemProfiles.title}")
private String testConfigValue;
String title = GlobalUtil.getConfig("systemProfiles.title", "无值");

properties文件获取参数示例

spring.redis.host=${redis.host}
spring.redis.port=${redis.port}

xml文件获取参数示例

freemarker获取参数

需在自行定义工具配置类MyFreeMarkerConfig.java

package com.chenyingjun.springboot2.config;

import com.chenyingjun.springboot2.utils.GlobalUtil;
import freemarker.template.Configuration;
import freemarker.template.TemplateModelException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * FreeMarker工具类配置
 * 
 * @author chenyingjun
 * @since 1.0
 * @version 2018年8月15日 chenyingjun
 */
@Component
public class MyFreeMarkerConfig {
    
    /** Logger */
    private final Logger logger = LoggerFactory.getLogger(MyFreeMarkerConfig.class);
    
    /** Configuration */
    @Autowired
    private Configuration freeMarkerConfiguration;
    
    /**
     * 配置工具类
     */
    @PostConstruct
    public void freemarkerConfig() {
        try {
            freeMarkerConfiguration.setSharedVariable("global", new GlobalUtil());
        } catch (TemplateModelException e) {
            logger.error(e.toString(), e);
        }
    }
    
}

这样,我们就能在ftl页面中获取我们需要的参数了

freemarker文件获取参数示例

${global.getConfig("systemProfiles.title")?html}

推荐阅读
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • springboot启动不了_Spring Boot + MyBatis 多模块搭建教程
    作者:枫本非凡来源:www.cnblogs.comorzlinp9717399.html一、前言1、创建父工程最近公司项目准备开始重构,框 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
author-avatar
雅丽猫儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有