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

本贴最后更新于 1929 天前,其中的信息可能已经事过境迁

开头说两句

Java 基础 Demo 站: https://www.javastudy.cloud
Java 中高级开发博客: https://www.lixiang.red
Java 学习公众号: java 技术大本营
java_subscribe

项目背景

随着项目不断的迭代,不断的有新的组件加入进来,比如现在项目中就集成了 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' }

项目结构如下图所示
image.png
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"); } }

运行效果如下:
image.png

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

编写检查代码

如上所述有环境变量,文件等简单的校验,本文以 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; } }

运行效果如下图所示:

image.png

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

最后说两句

感谢阅读小小刀的博客,有什么问题欢迎大家留言,或者加小刀微信: best396975802 一起讨论交流

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3198 引用 • 8215 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖 • 1 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...