背景:
随着中国的发展,很多技术因为一些原因越来越受制于人,尤其是上游核心技术。为了解决这个问题,我国明确了“数字中国”建设战略,抢占数字经济产业链制高点。于是,国家提出“2+8”安全可控体系,2020-2022年是国家安全可控体系推广最重要的3年,中国IT产业从基础硬件-基础软件-行业应用软件有望迎来国产替代潮。这些都是为了实现信创发展的目标:自主可控!
企业背景:
目前很多企业在招标都需要进行信创要求,如国产操作系统、国产浏览器、国产数据库、国产中间件等。。
目的:
将springboot 自带 tomcat 替换为 宝兰德容器 并注册相关servlet服务
任意信创容器都能够快速嵌入springboot项目中,能够切换任意容器提供项目启动
1、拿到宝兰德容器后首先可以将容器上传到自己的私有maven仓库(bes-lite-spring-boot-2.x-starter-x.x.x.xxx),或者直接本地引用 (本文以上传到私有仓库为例)
2、新增maven配置,此配置对应第一步上传私有仓库对应。注:能够拿到中间件的朋友,应该都能够直接按照说明进行启动,这里不对容器外的其他宝兰德组建进行介绍
<dependency>
<groupId>com.bes.appserver</groupId>
<artifactId>bes-lite-starter</artifactId>
<scope>provided</scope> // 打包时候不生成对应jar包,需要使用时,才进行替换。
</dependency>
3、进行代码编码
新建servlet工具类 RegisterServletUtil
注:后续还需要兼容其他容器可以按照本示例动态添加。
package com.xxx.core.xxx.servlet;
import org.apache.catalina.core.StandardContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 类描述:注册Servlet工具类
* @date 2022-08-08 10:27:28
*/
public class RegisterServletUtil {
private static final Logger logger = LogManager.getLogger(RegisterServletUtil.class);
/**
* 方法描述:注册路由与servlet至容器中
* @param path 访问路由地址
* @param servlet 注册servlet
* @param servletContext servlet视图
* @date 2022-07-27 09:58:11
*/
public static void addServlet(String path, Servlet servlet, ServletContext servletContext) {
try {
Object standardContext = getStandContext(servletContext);
switch (standardContext.getClass().getSimpleName()) {
case "TomcatEmbeddedContext":
TomCatRegisterServlet.addServlet(pa