SpringBoot配置自定義包掃描


SpringBoot配置自定義包掃描

項目中正在拆分微服務,需要把一個maven模塊,拆分成2個服務,要根據不同的包的路徑,來啟動不同的服務,因此就使用了自定義的包掃描,代碼如下:

/**
 * @author WGR
 * @create 2021/8/2 -- 12:26
 */
@Slf4j
public class FwTypeFilter implements TypeFilter, EnvironmentAware {

    private  String packageScane;

    /**
     * 根據配置文件中的package.scan類型,實現動態包掃描
     * 此處不會通過注入的方法引入Environment,因為正在處於掃描階段,還沒有往IOC容器中注入bean
     * @param metadataReader
     * @param metadataReaderFactory
     * @return
     */
    @Override
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)  {
        //獲取當前正在掃描的類的類信息
        ClassMetadata classMetadata = metadataReader.getClassMetadata();
        String className = classMetadata.getClassName();
        try {
            Class<?> beanClass = ClassUtils.forName(className, FwTypeFilter.class.getClassLoader());
            String packageName = beanClass.getPackage().getName();
            if("scene".equals(packageScane)){
                if(packageName.contains(".scene.mvc")){
                    return true;
                }
            }else if("system".equals(packageScane)){
                if(!packageName.contains(".scene.mvc")){
                    return true;
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public void setEnvironment(Environment environment) {
        packageScane =  environment.getProperty("package.scan");
        log.info("========加載{}服務===========",packageScane);
    }
}

在啟動類上加上自定義的過濾配置

@ComponentScan(value = {"com.thingjs.framework.feignServer"},
        //此處為自定義的掃描規則
        includeFilters = {@ComponentScan.Filter(type= FilterType.CUSTOM,classes={FwTypeFilter.class}),
                //下面是公共的依賴
                @ComponentScan.Filter(type= FilterType.REGEX,pattern="com.thingjs.framework.feignServer.config.*")
        }
        ,useDefaultFilters = false)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM