如何将一个spring项目重构成spring-boot项目(仅后台)

一.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。还有就是注意继承的关系按照次序进行重构会比较方便。


三。体会

综上所述。。能不重构还是不要重构了,其实没那么简单。

   

猜你喜欢

转载自blog.csdn.net/tatebrwonjava/article/details/80471503