当前位置:

首页 > 编程开发 > SpringBoot怎么删除引用jar包中的无用bean

SpringBoot怎么删除引用jar包中的无用bean

前言公司有个项目,时间比较赶,而且项目的部分需求,和之前做的项目部分功能一样,为了赶速度和直接将之前多模块的maven项目中的部分模块,直接以jar包的形式引入到新项目中了,虽然省去了不少开发时间,但是造成项目需要导入引入项目jar的相关依赖,导致项目臃肿,启动很慢。有没有办法让项目只加载自己需要的bean呢?当然我们可以直接修改源代码重新打包引入去解决,但是这个办法太多麻烦。通过百度的手段,查询可以在springboot启动类上用@ComponentScan注解去实现代码示例@ComponentScan

本文目录

    前言

    公司有个项目,时间比较赶,而且项目的部分需求,和之前做的项目部分功能一样,为了赶速度和直接将之前多模块的maven项目中的部分模块,直接以jar包的形式引入到新项目中了,虽然省去了不少开发时间,但是造成项目需要导入引入项目jar的相关依赖,导致项目臃肿,启动很慢。有没有办法让项目只加载自己需要的bean呢?

    当然我们可以直接修改源代码重新打包引入去解决,但是这个办法太多麻烦。

    通过百度的手段,查询可以在springboot启动类上用@ComponentScan注解去实现

    代码示例

    @ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.REGEX,
            pattern = {"com.xx.controller","com.xx.xx"})})

    但是经过实现很多次发现没用,原来项目包以外的bean一般是通过 通过spring SPI spring.factories的方法把Bean加载到另一个项目当中去。

    spring.factories会创建一些jar中的定义的bean,比如强制格式化返回值

    后来发现通过使用BeanDefinitionRegistryPostProcessor,直接在 解析完bean的注册信息后,直接移除就行,这样就不会创建bean。

    BeanDefinitionRegistryPostProcessor继承BeanFactoryPostProcessor能够管理这些bean

    实现代码示例

    在项目中新建 RemoveRegistryBeanFactoryPostProcessor类,代码如下

    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
    import org.springframework.stereotype.Component;
     
    /**
     * @author liuya
     */
    @Component
    public class RemoveRegistryBeanFactoryPostProcessor implements BeanDefinitionRegistryPostProcessor {
     
        @Override
        public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
            String[] names = registry.getBeanDefinitionNames();
            for (String name : names) {
                if (name.contains("taskSendMessageListener") || name.contains("globalListener") || name.contains("executionSendMessageListener") || name.contains("processCallbackMesController")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.system.flow")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.system.modules.message")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.graphics.task")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.graphics.bimlight.location")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.graphics.bimlight.sectioning")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.graphics.modules")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.ubw.job")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.ubw.listener")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.ubw.msg")) {
                    registry.removeBeanDefinition(name);
                }
                if (name.contains("org.springblade.ubw.service")) {
                    registry.removeBeanDefinition(name);
                }
            }
        }
     
        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        }
    }

    当然还有部分自动配置类的代码需要删除bean注册,我们可以通过

    @SpringBootApplication(exclude = {})的方式去实现,代码如下:
    @EnableAsync
    @EnableScheduling
    @SpringBootApplication(exclude = {DllInitLoader.class,ProcessEngineServicesAutoConfiguration.class})
    public class UnifyWorkFaceApplication {
        public static void main (String[] args) {
          BladeApplication.run("work-face", UnifyWorkFaceApplication.class, args);
        }
    }

    配置完毕,项目启动速度快了很多,也去除了很多jar依赖,还删除了很多无用表,比如flowable工作流的相关表,之前项目启动时老是自动去查询工作流的相关表,导致删除数据库的工作流的表项目就会启动不起来,现在通过

    @SpringBootApplication(exclude = {ProcessEngineServicesAutoConfiguration.class}) 移除ProcessEngineServicesAutoConfiguration自动配置类代码,还有剔除,项目中引用flowable的项目类的注入,就可以正常启动了。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    通过实战案例学习如何高效使用httpclient.jar
    通过实战案例学习如何高效使用httpclient.jar

    ApacheHttpClient是处理HTTP通信的强大工具库,能简化网络操作并提升效率。首先需配置HttpClient实例,设置超时和连接池以优化性能。通过各类请求对象发送GET或POST等请求,并正确处理响应状态码和响应体,注意使用try-with-resources管理资源。高级功能包括连接池管理、重试机制和拦截器,有助于增强健壮性。实践中应复用客户端

    EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常
    EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常

    部署消息驱动Bean时抛出javax.naming.NameNotFoundException异常,原因是JMS消息队列未在JNDI命名服务中注册。其解决方法为:需要手动配置一个Queue对象,例如在JBoss服务器中修改mail-service.xml或新建-service.xml文件,将Queue绑定至queue/myqueue路径。完成上述操作并重新部

    NIO文件系统异常分析与解决方法
    NIO文件系统异常分析与解决方法

    在使用nio加载文件时,在idea中运行没有问题,但打成jar包后在windows和linux下都有问题:代码语言:javascript代码运行次数:0运行复制publicstaticvoidmain(String[]args)throwsException{//SpringApplication.run(MarketCollectApplication.class,args);URIuri=MarketCollectApplication.cla

    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    在 Linux 系统中如何执行 Java 可执行文件
    在 Linux 系统中如何执行 Java 可执行文件

    运行JAR文件的先决条件在Linux系统上运行JAR文件需要安装Java运行时环境(JRE),它是执行Java应用程序所需的基本组件,包括Java虚拟机(JVM)、核心类库等。许多主流Linux发行版,如Ubuntu、Debian、Fedora、openSUSE等,都提供了JRE包的软件库,方便用户进行安装。后文将详细介绍在流行的发行版上安装JRE的步骤。设置完JRE后,可以根据个人喜好选择使用命令行终端或图形用户界面来启动JAR文件。您的选择可能取决于对Linuxshell的熟悉程度和个人偏好。在Lin

    Maven实践技巧:简便导入Jar包的实用方法
    Maven实践技巧:简便导入Jar包的实用方法

    Maven实战指南:轻松导入Jar包的实用技巧Maven是Java项目管理工具中使用广泛的一个工具,通过它可以有效管理项目的构建、依赖等。在Java开发中,经常会遇到需要导入第三方Jar包的情况,而Maven可以帮助我们高效地管理这些依赖。本文将介绍几种实用的技巧,帮助读者轻松导入Jar包,并附带具体的代码示例。技巧一:在pom.xml文件中添加依赖在Mav

    解析SpringBoot和SpringMVC之间的异同
    解析SpringBoot和SpringMVC之间的异同

    解析SpringBoot和SpringMVC之间的异同SpringBoot和SpringMVC是Java领域中非常重要的开发框架。虽然它们都属于Spring框架的一部分,但是在使用和功能上有一些明显的区别。本文将对SpringBoot和SpringMVC进行比较,解析它们之间的异同。首先,让我们来了解一下SpringBoot。SpringBo

    探索SpringCloud和SpringBoot在微服务领域的不同应用方式
    探索SpringCloud和SpringBoot在微服务领域的不同应用方式

    近年来,随着云计算和分布式架构的兴起,微服务架构的应用越来越广泛。而SpringCloud和SpringBoot作为Java开发中的两个重要框架,对于微服务的实现起到了重要的作用。然而,很多人对于它们在微服务领域的不同应用方式还存在一定的疑惑。本文将从不同的角度探索SpringCloud和SpringBoot在微服务中的应用方式。首先,我们来了解一下Spri

    SpringBoot和SpringMVC有何区别?
    SpringBoot和SpringMVC有何区别?

    SpringBoot与SpringMVC的不同之处在哪里?SpringBoot和SpringMVC是两个非常流行的Java开发框架,用于构建Web应用程序。尽管它们经常分别被使用,但它们之间的不同之处也是很明显的。首先,SpringBoot可以被看作是一个Spring框架的扩展或者增强版。它旨在简化Spring应用程序的初始化和配置过程,以帮助开发人

    比较SpringBoot和SpringMVC的异同
    比较SpringBoot和SpringMVC的异同

    SpringBoot和SpringMVC都是Java开发中常用的框架,但它们之间有一些明显的差异。本文将探究这两个框架的特点和用途,并对它们的差异进行比较。首先,我们来了解一下SpringBoot。SpringBoot是由Pivotal团队开发的,它旨在简化基于Spring框架的应用程序的创建和部署。它提供了一种快速、轻量级的方式来构建独立的、可执行

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。