记spring boot快速改造老项目

前言碎语

博主公司一个项目在开发中使用某些功能的时候,受限于spring低版本的限制,故索性将整个模块升级为spring boot,在这里做个记录,希望能帮助到有相同场景的朋友。整个改造过程非常简单,耗时大概在2个小时左右,主要解决项目中的各种版本冲突,不过下面我会介绍一个神器。

老项目情况

1.项目使用spring-context作为容器,使用RabbitMQ提供Rpc服务

2.spring.springframework 版本比较低,3.1.x的版本,升级后会变成4.3.x

3.项目使用maven构建

以上是项目的基本情况,针对如上情况,下面会详细描述改造过程中需要的关注点

第一步:添加spring boot依赖

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>1.5.7.RELEASE</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

第二步:新增spring boot启动类,加载原先的xml配置

/**
 * Created by kl on 2018/1/29.
 * Content :Lbt-service-ext服务启动器
 */
@SpringBootApplication(exclude = {RabbitAutoConfiguration.class})
@ImportResource("service-context.xml")
public class LbtServiceExtApplication {
    public static void main(String[] args) {
        SpringApplication application=  new SpringApplication(LbtServiceExtApplication.class);
        application.setWebEnvironment(false);
        application.run(args);
    }
}

注意的地方:

1.排除了RabbitMQ的自动装载了,因为在xml中已经配置过了RabbitMQ的相关连接和服务信息了

2.设置了setWebEnvironment(false),标记项目为非web项目,因为只是提供Rpc服务,所以不需要servlet容器。

第三步:尝试启动,排除jar冲突

这个时候可以启动main方法,看看能否启动了,一般情况下没那么容易就能启动起来,会有各种的jar冲突。我们项目从3.x到4.x,更是各种冲突

下面介绍一个插件,破除jar冲突排除的烦恼,前提是在IDEA下开发,eclipse应该也有类似的。

插件名字:Maven Helper 可以代替mvn dependency:tree命令的使用了,这个插件可以更直观的列出项目依赖的jar,非常牛逼的是可以直接列出项目中有冲突的jar,这对找jar冲突非常有用,而且可以直接右键排除掉

参考地址:http://www.kailing.pub/article/index/arcid/175.html jar相关异常识别技巧:

出现NoSuchMethodError:一般都是jar冲突了

出现ClassNotFoundException:缺少相关的jar了

三步做完后,项目妥妥的跑起来了。

后记-spring boot怎么识别web项目

1.spring boot会识别项目是否是web项目,如果识别到事web项目,又没有添加tomcat等容器jar,就抛异常。

2.识别的方式就是看项目是否依赖了servlet-api和spring-web。而我们项目需要spring-web相关如el等功能又不需要tomcat容器,所以可以指定为非web项目。

3.排除掉tomcat后,项目jar体积和运行时内存占用都有很大的改善

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

系统方案合集-系统备份方案

导读 | 精选 一、方案特点 此方案是基于批处理脚本和任务计划技术,针对系统特有文件结构和数据库结构的特点,而形成的系统备份方案。该方案特点: 1.易用性好,通...

3847
来自专栏IT技术精选文摘

微服务架构中的进程间通信

介绍 在单体应用程序中,组件通过语言级的方法或函数调用进行彼此的调用。相比之下,基于微服务的应用程序是在多台机器上运行的分布式系统。每个服务实例通常是一个进程...

5695
来自专栏零基础使用Django2.0.1打造在线教育网站

利用Flask搭建微电影视频网站(一):项目介绍

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

1.9K3
来自专栏用户2442861的专栏

CQRS架构简介

http://www.cnblogs.com/netfocus/p/4055346.html

1272
来自专栏全华班

系统方案合集-系统备份方案

一、方案特点 此方案是基于批处理脚本和任务计划技术,针对系统特有文件结构和数据库结构的特点,而形成的系统备份方案。该方案特点: 1. 易用性好,通过编写批处...

4525
来自专栏个人分享

分布式系统中的线程与进程

  虽然进程构成了分布式系统中的基本组成单元,但是操作系统提供的用于构建分布式系统的进程在粒度上还是太大了,而就粒度而言,将每个进程细分为若干控制线程的形式则更...

691
来自专栏猿天地

Spring Cloud如何提供API给客户端

现在越来越多的公司开始拥抱Spring Cloud了,很多Java方向的同学也开始积极的学习Spring Cloud,其实这边还有一个问题就是说:虽然大家学了E...

3737
来自专栏finleyMa

说下browserslist

browserslist 是一个开源项目 见到有些package.json里会有如下的配置参数

4821
来自专栏腾讯云serverless的专栏

使用 SCF 无服务器云函数定时拨测站点并邮件告警

利用无服务器架构中提供的定时触发能力,在运维监控场景有很多种用处,例如定时备份、定时拨测、定时统计等。

9.5K2
来自专栏GopherCoder

ReStructuredText 文档编写全攻略编写文档说明

3013

扫码关注云+社区

领取腾讯云代金券