如何將一個spring專案重構成spring-boot專案(僅後臺)

TateBrwonJava發表於2018-05-27

一.spring---spring-boot的區別

 其實講區別,就是講spring-boot有不同

  1. Spring Boot可以建立獨立的Spring應用程式;
  2. 內嵌瞭如Tomcat,Jetty和Undertow這樣的容器,也就是說可以直接跑起來,用不著再做部署工作了。
  3. 無需再像Spring那樣搞一堆繁瑣的xml檔案的配置;
  4. 可以自動配置Spring;
  5. 提供了一些現有的功能,如量度工具,表單資料驗證以及一些外部配置這樣的一些第三方功能;
  6. 提供的POM可以簡化Maven的配置;

可以看出的區別主要是不需要配置Tomcat,其實說白了還有就是將xml的配置寫到了Java裡面,還有就是註解的不同,json解析的不同。

二.最近重構一個專案,原專案是spring-springmvc-mybatis,現在是spring-boot-springmvc-mybatis。詳細說說過程。

A.搭建一個spring-boot專案。按照需求整合了shiro,redis,分頁工具,響應頭等基本工具。

B.檢視mybatis的版本問題,一般的3.1.2之前的版本是需要自己配置物理分頁和攔截器的。後面的都不需要的可以整合分頁工具的。

C.匯入原專案的依賴包,注意json解析包不需要匯入,spring-boot預設採用json格式返回。

D.將spring專案中的XML配置檔案寫成config類,構建一個POJO的對映,將yml中的配置按照key-value的方式對映到配置檔案中,合理利用註解。

拿Encache的配置舉例,程式碼如下

**
 * EhCache快取配置類
 * 動態新增快取參考:http://blog.csdn.net/u012255097/article/details/54576720
 */
@Configuration
public class EhcacheConfig {

    @Bean
    @Primary //配置了多個CacheManager,指定一個CacheManager作為預設
    public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean) { // 此錯誤提示可忽略,程式可正常執行

        EhCacheCacheManager ehCacheCacheManager=new EhCacheCacheManager(bean.getObject());

        /**
         * 也可在此動態新增快取,這樣就可以動態配置快取的引數
         */

        //建立一個快取管理器
        //CacheManager singletonManager = CacheManager.create();
        //建立一個快取例項
        //Cache cache = new Cache("demo", 5000, false, false, 300, 300);
        //在記憶體管理器中新增快取例項
        //ehCacheCacheManager.getCacheManager().addCache(cache);

        return ehCacheCacheManager;
    }

    @Bean
    public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
        EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();
        cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("config/ehcache.xml"));
        cacheManagerFactoryBean.setShared(true);

        return cacheManagerFactoryBean;
    }

}

如果還不明白再看驗證碼的config

原來的XML如下


現在的Java方式配置。

/**
 * @Author: TateBrown
 * @date: 2018/5/27 13:34
 * @param:
 * @return:
 */
@Configuration
public class Kaptcha {
    @Bean(name="captchaProducer")
    public DefaultKaptcha defaultKaptcha(){
        DefaultKaptcha defaultKaptcha=new DefaultKaptcha();

        Properties properties =new Properties();
        properties.setProperty("kaptcha.border","yes");
        properties.setProperty("kaptcha.border.color","105,179,90");
        properties.setProperty("kaptcha.textproducer.font.color","blue");
        properties.setProperty("kaptcha.textproducer.font.size","45");
        properties.setProperty("kaptcha.image.width","125");
        properties.setProperty("kaptcha.image.height","45");
        properties.setProperty("kaptcha.textproducer.char.length","4");
        properties.setProperty("kaptcha.textproducer.font.names","宋體,楷體,微軟雅黑");
        Config config =new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

注意@Conguration和@Bean必不可少,具體功能,具體去更詳細的地方尋找,這裡就不贅述了。

然後是需要新建一個beans類ConfigParameters

/**
 * 自動對映一個POJO到Spring Boot配置檔案(預設是application.yml檔案)的屬性集。
 * config配置在application.yml檔案中,會按相同名稱自動注入到Bean中
 *
 */
@Component //必須加上,才能自動注入
@ConfigurationProperties(prefix="config")

然後將原spring專案的xml中,例如資料庫連線池的配置,shiro的配置,mybatis的配置給匯入到yml裡,yml的寫法具體查詢,這裡就不贅述了。

B.完成上述的問題之後,

複製原來專案的entity層檔案和dao層mapper層,複製原來專案的mybeans層。

然後複製service層,注意service層是有講究的,原專案一般需要每次呼叫一個mapper之後是需要重新開啟sqlsession的,springboot是可以不這樣的,也就是說注意修改相應的註解和程式碼。

然後複製Controller層,注意註解的更改,我這裡由於原來是用postman測的介面,現在要改swagger,註解就改的略問繁瑣了。主要還是@Controller和@Request可以合併成一個。也就是spring-boot的註解,別的也沒什麼需要改。

C.之後解決解決包的問題,複製的時候尤其注意impot對正確的包很重要。由於java的jar包數量太多,很多名字是一樣的,它可能會引入錯誤的包。導致無法呼叫正確的方法類。

D。還有就是注意繼承的關係按照次序進行重構會比較方便。


三。體會

綜上所述。。能不重構還是不要重構了,其實沒那麼簡單。

   

相關文章