maven分佈式項目中spring bean未加載問題

maven分佈式項目中spring bean未加載問題

問題描述

項目中採用了maven 分佈式的模塊開發。其中baseFrame 模塊依賴common模塊。
項目結構
在common中配置了一些公共的基礎類。如工具類,統一異常處理,AOP日誌輸出,filter等等。
然而在使用中,發現其中的一些輔助類並沒有生效。

原因分析

spring 在初始化時,默認是掃描啓動類所在目錄,將所有帶註解的java類進行統一管理。由於common模塊並不在啓動類的所在目錄,所以其中的bean是沒有被初始化的。這時候就需要我們制定需要掃描的目錄,其只要實現依靠@ComponentScan註解。

解決方案

在啓動類上通過@ComponentScan註解引入其他模塊的目錄。

@SpringBootApplication
@MapperScan("jaylen.stocks.dao")
@ComponentScan(basePackages={"cn.jaylen.common"})
public class BaseFrameApplication {
    public static void main(String[] args) {
        SpringApplication.run(BaseFrameApplication.class, args);
    }
}

引入過後,確實能加載到common下面的所有bean。
但是@ComponentScan()註解會覆蓋spring默認的掃描機制,即不會在掃描啓動類所在的目錄。所以我們不僅要引入common包路徑,啓動類所在路徑也同樣需要引入。

@SpringBootApplication
@MapperScan("jaylen.stocks.dao")
@ComponentScan(basePackages={"cn.jaylen.common","jaylen.stocks"})
public class BaseFrameApplication {
    public static void main(String[] args) {
        SpringApplication.run(BaseFrameApplication.class, args);
    }

    /**
     * *
     * 解決跨域問題
     *      * @return
     * @return
     */
    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config); // CORS 配置對所有接口都有效
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }
}

這樣就大工告成了。

本博客主要爲日常問題記錄,在解決問題時,主要參見pringboot 多模塊注入bean ,訪問不到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章