Rumah  >  Artikel  >  Java  >  Bagaimanakah SpringBoot memadamkan kacang yang tidak berguna dalam pakej balang yang dirujuk?

Bagaimanakah SpringBoot memadamkan kacang yang tidak berguna dalam pakej balang yang dirujuk?

王林
王林ke hadapan
2023-05-14 20:07:092134semak imbas

Kata Pengantar

Syarikat ini mempunyai projek yang dalam jadual yang padat, dan beberapa keperluan projek adalah sama dengan beberapa fungsi projek sebelum ini kelajuan, beberapa modul dalam projek maven berbilang modul sebelumnya telah disepadukan secara langsung ke dalam projek baru dalam bentuk pakej jar Walaupun ia menjimatkan banyak masa pembangunan, ia juga menyebabkan projek itu perlu mengimport kebergantungan berkaitan balang projek, menyebabkan projek menjadi kembung dan lambat untuk dimulakan. Adakah terdapat cara untuk membuat projek memuatkan hanya kacang yang diperlukan?

Sudah tentu kita boleh mengubah suai kod sumber dan pembungkusan semula secara langsung dan mengimportnya untuk menyelesaikan masalah, tetapi kaedah ini terlalu menyusahkan.

Melalui Baidu, pertanyaan boleh dilaksanakan menggunakan anotasi @ComponentScan pada kelas permulaan springboot

Contoh kod

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

Tetapi selepas banyak pelaksanaan, ia didapati tidak berguna Projek asal Kacang di luar bungkusan biasanya dimuatkan ke dalam projek lain melalui kaedah spring SPI spring.factories.

spring.factories akan mencipta beberapa biji yang ditakrifkan dalam balang, seperti memaksa nilai pulangan terformat

Kemudian, saya mendapati bahawa dengan menggunakan BeanDefinitionRegistryPostProcessor, ia terus dialih keluar selepas menghuraikan pendaftaran maklumat tentang kacang itu baik-baik saja, jadi kacang tidak akan dibuat.

BeanDefinitionRegistryPostProcessor mewarisi BeanFactoryPostProcessor dan boleh menguruskan kacang ini

Contoh kod pelaksanaan

Buat RemoveRegistryBeanFactoryPostProcessor baharu seperti kelas berikut kodnya

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 {
    }
}

Kelajuan permulaan projek adalah lebih cepat, banyak kebergantungan balang dialih keluar, dan banyak jadual yang tidak berguna juga dipadamkan, seperti jadual berkaitan aliran kerja boleh alir Pada masa lalu, apabila projek dimulakan, ia sentiasa menanyakan jadual berkaitan aliran kerja, menyebabkan projek jadual aliran kerja yang memadamkan pangkalan data itu gagal dimulakan melalui

@SpringBootApplication(exclude = {ProcessEngineServicesAutoConfiguration.class}) Selain kod kelas konfigurasi automatik ProcessEngineServicesAutoConfiguration, terdapat juga penyingkiran dan suntikan kelas projek yang merujuk boleh mengalir dalam projek, dan ia boleh bermula seperti biasa.

Atas ialah kandungan terperinci Bagaimanakah SpringBoot memadamkan kacang yang tidak berguna dalam pakej balang yang dirujuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam