专栏首页java技术大本营java小工具-使用springboot-starter启动检查配置是否满足要求

java小工具-使用springboot-starter启动检查配置是否满足要求

项目背景

随着项目不断的迭代,不断的有新的组件加入进来,比如现在项目中就集成了cat,apollo,prometheus,docker,k8s等等 , 随之而来的有一大堆host要配置,如redis , mysql , zookeeper等等. 还要切分环境,如DEV, UAT, PROD等等, 开发人员拉到代码的时候,往往还要弄个大半天才能投入开发,因此写了这个小工具,可以在启动时检查一些配置,环境之类的,并提供修复建议

检查配置

主要有以下几个检测项: 1. 环境变量的检查 2. java运行变量的检查 3. 指定位置文件的检查 4. host检查

运行启动

要想一启动程序就运行,我们自然而然就想到了springboot 的 starter 项目,对,我们把这个也封装成一个starter, 这样一启动springboot应用,就可以检查各种条件了.

制作starter

引入依赖:

dependencies {
  implementation platform('org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE')
  compile group: 'org.springframework.boot', name: 'spring-boot-autoconfigure'
  
}

项目结构如下图所示

spring.factories:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.platform.tools.starter.spring.boot.ToolAutoConfiguration
org.springframework.context.ApplicationContextInitializer=\
com.platform.tools.starter.spring.boot.ToolApplicationContextInitializer

ToolAutoConfiguration.java

@Configuration
public class ToolAutoConfiguration {
}

ToolApplicationContextInitializer.java

public class ToolApplicationContextInitializer implements ApplicationContextInitializer {

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        System.out.println("write check code here");
    }
}

运行效果如下:

这样我们就做到了在项目一启动的时候就运行检测代码的效果

编写检查代码

如上所述有环境变量,文件等简单的校验,本文以apollo的检测为例写几个典型的获取配置的代码,下面的代码中包含判断文件是否存在,判断环境变量,判断系统变量

public class InitCheck  {

    /** 操作系统类别: 1是win, 2是其他 */
    private Integer osType;

    /** 环境变量的map */
    private Map<String ,String> envMap = System.getenv();

    public InitCheck() {
        //获取操作系统类型
        String osName = System.getProperty("os.name");
        this.osType = osName.contains("windows")?1:2;
    }

    /**
     * 对外提供的调用方法,在 new 完InitCheck之后,就调用这个方法
     *
     * @return
     */
    public boolean checkAll(){
        
        return checkApollo();
    }

    /**
     * 检查apollo的配置是否正确
     * @return
     */
    private boolean checkApollo(){
        //apollo主要是检查ENV有没有设置,而且只检查环境变量和文件
        String env = envMap.get("ENV");
        boolean envFlag = env != null && !env.isEmpty();
        String filePath = osType==1?"C:/opt/settings/server.properties":"/opt/settings/server.properties";
        boolean fileFlag = Files.exists(Paths.get(filePath));
        boolean result  = envFlag || fileFlag;
        if(!result){
            System.out.printf("请正确配置apollo ,  设置环境变量 ENV=dev 或者在文件 %s 中写入 ENV=dev \n",filePath);
        }
        return result;
    }

}

运行效果如下图所示:

其他检查代码因不好脱敏,就先不发出来了,但思路都是一致的,大家也可以写一写尝试下

本文分享自微信公众号 - java技术大本营(java-ideashare),作者:微笑的小小刀

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java练习本(2019-07-05)

    a = a++时,因为是先运算后++,所以a先赋值给a,之后才自增,因此a = a++结果还是为a,但是a = ++a时,因为是先自增后赋值,因此是a = a+...

    微笑的小小刀
  • java练习本(2019-07-08)

    String str = new String("xiaodao");这个语句一共会创建几个String object?

    微笑的小小刀
  • java练习本(2019-07-06)

    String类型会指向堆内存中的存储空间,因此当通过==对String类型进行比较时,比较的是相应变量的地址。只要指向的是同一地址则两个String类型==比较...

    微笑的小小刀
  • 受用一生的高效 PyCharm 使用技巧(五)

    PyCharm 里代码块的折叠功能,相当的显眼,在代码编辑框的左侧,你可以发现有 + 也有 -,很容易理解 + 代表代码块被折叠了可以点此展开,而 - 代表这个...

    小小詹同学
  • 受用一生的高效 PyCharm 使用技巧(五)

    PyCharm 里代码块的折叠功能,相当的显眼,在代码编辑框的左侧,你可以发现有 +也有 -,很容易理解 + 代表代码块被折叠了可以点此展开,而 - 代表这个代...

    1480
  • Entity Framework Core 2.0 使用代码进行自动迁移

    晓晨
  • [卷积神经网络]课程:Deep convolutional models习题解析

    同样,经典的卷积神经网络通常是几个卷积层后面带一个池化层,接近输出的地方再加上全连接层,所以选择选项1和3

    云水木石
  • Dubbo和Zookeeper

    当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

    宋先生
  • Webpack + vue 之抽离 CSS 的正确姿势

    大部分使用过webpack的朋友都知道,抽离css需要使用到webpack的插件extract-text-webpack-plugin,vue也不例外。

    easonxie

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动