一.spring---spring-boot的区别
其实讲区别,就是讲spring-boot有不同
- Spring Boot可以建立独立的Spring应用程序;
- 内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再做部署工作了。
- 无需再像Spring那样搞一堆繁琐的xml文件的配置;
- 可以自动配置Spring;
- 提供了一些现有的功能,如量度工具,表单数据验证以及一些外部配置这样的一些第三方功能;
- 提供的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.****.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。还有就是注意继承的关系按照次序进行重构会比较方便。
三。体会
综上所述。。能不重构还是不要重构了,其实没那么简单。