【分享】如何在自己的项目启动时,输出一些环境和依赖信息?

如题,最近几个JBolt内部成员在问我,JBolt平台启动的时候,输出的环境信息很哇塞,想修改成自己公司的信息,增加点别的信息,如何搞?

效果看下图:

image.png


这个图里展示了好几个输出类型:

1、LOGO 品牌标识 域名信息 jbolt.cn

2、平台名称和版本  JBolt Platform Pro 4.1.2

3、JFinal JBolt_core Undertow等依赖版本信息 JVM版本信息等

4、启动服务的访问地址端口

5、日志信息

一、logo 品牌标识等输出

推荐一个文字转字符在线工具 (jfinal.com)

请看这个文章描述。

二、定制Undertow Server

package cn.jbolt.core.server;

import com.jfinal.config.JFinalConfig;
import com.jfinal.core.Const;
import com.jfinal.server.undertow.UndertowConfig;
import com.jfinal.server.undertow.UndertowServer;

import cn.jbolt.core.consts.JBoltConst;
import cn.jbolt.core.util.JBoltConsoleUtil;
import io.undertow.Version;

/**
 * JBolt Undertow服务器封装
 * 
 * @ClassName: JBoltServer
 * @author: JFinal学院-小木 QQ:909854136
 * @date: 2021年8月7日
 * 
 */
public abstract class JBoltServer extends UndertowServer {
   protected JBoltServer(UndertowConfig undertowConfig) {
      super(undertowConfig);
   }
   /**
    * 获取平台名称
    * @return
    */
   public abstract String getProjectName();

   /**
    * 获取版本
    * @return
    */
   public abstract String getProjectVersion();

   @Override
   public synchronized void start() {

      if (configConsumer != null) {
         configConsumer.accept(config);
         configConsumer = null; // 配置在整个生命周期只能调用一次
      }

      loadCommandLineParameter();

      try {
         JBoltConsoleUtil.printJboltcn();
         String projectName = getProjectName();
         String projectVersion = getProjectVersion();
         System.out.println("-----------------------------------");
         System.out.println("Starting " + projectName + " " + projectVersion + "...");
         System.out.println("JVM             : " + System.getProperty("java.version"));
         System.out.println("JFinal          : " + Const.JFINAL_VERSION);
         System.out.println("JBolt Core      : " + JBoltConst.JBOLT_VERSION);
         System.out.println("Undertow Server : " + Version.getVersionString());
         System.out.println("JFinal-Undertow : " + version);
         System.out.println("Http URL        : http://" + config.getHost() + ":" + config.getPort() + getContextPathInfo());
         if (config.isSslEnable()) {
            System.out.println("Https URL       : https://" + config.getHost() + ":" + config.getSslConfig().getPort() + getContextPathInfo());
         }
         System.out.println("-----------------------------------");
         long start = System.currentTimeMillis();
         doStart();
         System.out.println("-----------------------------------");
         System.out.println(projectName + " " + projectVersion + " Startup Success in " + getTimeSpent(start) + " seconds(^_^)");
         System.out.println("-----------------------------------");
         /**
          * 使用 kill pid 命令或者 ctrl + c 关闭 JVM 时,调用 UndertowServer.stop() 方法, 以便触发
          * JFinalConfig.onStop();
          * 
          * 注意:下方代码严格测试过,只支持 kill pid 不支持 kill -9 pid
          */
         Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
               JBoltServer.this.stop();
            }
         });

      } catch (Exception e) {
         e.printStackTrace();
         stopSilently();

         // 支持在 doStart() 中抛出异常后退出 JVM,例如端口被占用,否则在 linux 控制台 JVM 并不会退出
         System.exit(1);
      }

   }

   @Override
   public synchronized void stop() {
      if (started) {
         started = false;
      } else {
         return;
      }
      System.out.println("-----------------------------------");
      System.out.println("Shutdown JBolt Server ......");
      System.out.println("-----------------------------------");
      long start = System.currentTimeMillis();
      try {
         if (hotSwapWatcher != null) {
            hotSwapWatcher.exit();
         }

         doStop();

      } catch (Exception e) {
         e.printStackTrace();
         stopSilently();
      } finally {
         System.out.println("-----------------------------------");
         System.out.println("Shutdown Complete in " + getTimeSpent(start) + " seconds. See you later (^_^)");
         System.out.println("-----------------------------------");
      }
   }

}


这样就可以完美实现一个定制化的平台启动输出了。


三、日志标准化输出解决方案

【分享】使用JFinal4.8中的Slf4J日志门面配置,具体实现用Log4j2



加入并使用JBolt极速开发平台,获得JFinal最佳实践极速开发体验。


JBolt平台slogan:

省心,省事儿,降本增效,极速开发,JFinal社区600家企业的共同选择!


推荐:

JFinal-JBolt极速开发平台

JFinal极速开发,30秒一个CRUD,为开发者节约更多时间,陪恋人家人和朋友

【盘点】2022年年中项目名录-谁在用JFinal极速开发

评论区