10分钟 SSM项目转成SpringBoot 项目教程

前端时间帮朋友开发的SSM房屋租赁系统,后来有朋友要求改造成SpringBoot版本。

于是,这就开搞。

项目介绍地址:新品 SSM/SpringBoot房屋租赁系统,房屋合租系统(ssm和springboot多版本)

一、结构对比

1、SSM项目结构

2、SpringBoot版本

下面开始介绍代码修改

二、 修改 pom.xml

1、SSM的pom.xml

4.0.0com.exampleVeriowar1.0.0-SNAPSHOTVerio Maven Webapphttp://maven.apache.org1.81.8UTF-8org.projectlomboklombok1.16.22javax.servletjavax.servlet-api3.1.0providedjavax.servlet.jspjavax.servlet.jsp-api2.3.1javax.servletjstl1.1.2taglibsstandard1.1.2org.springframeworkspring-core4.2.0.RELEASEorg.springframeworkspring-beans4.2.0.RELEASEorg.springframeworkspring-context4.2.0.RELEASEorg.springframeworkspring-context-support4.2.0.RELEASEorg.springframeworkspring-web4.2.0.RELEASEorg.springframeworkspring-test4.2.0.RELEASEorg.springframeworkspring-webmvc4.2.0.RELEASEorg.springframeworkspring-tx4.2.0.RELEASEorg.springframeworkspring-jdbc4.2.0.RELEASEorg.springframeworkspring-aop4.2.0.RELEASEorg.springframeworkspring-aspects4.2.0.RELEASEcom.baomidoumybatis-plus3.1.2mysqlmysql-connector-java8.0.11com.alibabadruid1.0.16log4jlog4j1.2.17org.slf4jslf4j-api1.7.21commons-loggingcommons-logging1.2junitjunit4.12testcommons-fileuploadcommons-fileupload1.2.2commons-iocommons-io2.4com.fasterxml.jackson.corejackson-databind2.5.0com.fasterxml.jackson.corejackson-core2.5.0com.fasterxml.jackson.corejackson-annotations2.5.0org.codehaus.jacksonjackson-mapper-asl1.9.13org.jsonjson20170516org.apache.commonscommons-lang33.4com.github.pagehelperpagehelper4.2.1com.alibabafastjson1.2.72net.coobirdthumbnailator0.4.8cn.hutoolhutool-all4.1.13io.github.biezhioh-my-email0.0.3aliyunhttp://maven.aliyun.com/nexus/content/groups/publicaliyunhttp://maven.aliyun.com/nexus/content/groups/publicVeriosrc/main/java**/*.xmltruesrc/main/resources**/*true

2、SpringBoot的pom.xml

4.0.0com.exampleVerio-bootjar1.0.0-SNAPSHOTVerio Maven Webapphttp://maven.apache.orgorg.springframework.bootspring-boot-starter-parent2.1.7.RELEASE1.81.8UTF-8UTF-8UTF-81.81.1.101.18.23.84.1.13org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.springframework.bootspring-boot-starter-aopcom.baomidoumybatis-plus-boot-starter3.1.2org.springframework.bootspring-boot-starter-jdbcmysqlmysql-connector-javaruntimecom.alibabadruid-spring-boot-starter${druid.version}org.projectlomboklombok${lombok.version}providedorg.apache.commonscommons-lang3${commons-lang3.version}cn.hutoolhutool-all${hutool-all.version}org.springframework.bootspring-boot-devtoolstruecom.alibabafastjson1.2.72com.google.guavaguava26.0-jreorg.apache.shiroshiro-spring1.4.0com.github.theborakompanionithymeleaf-extras-shiro2.0.0com.google.code.gsongson2.8.5io.github.biezhioh-my-email0.0.3junitjunit4.12javax.servletjstlcompileorg.apache.tomcat.embedtomcat-embed-jaspercompilealiyunhttp://maven.aliyun.com/nexus/content/groups/publicaliyunhttp://maven.aliyun.com/nexus/content/groups/publicverioorg.springframework.bootspring-boot-maven-plugintrue

我这里是直接找到之前的一个springboot项目的依赖,拷贝进来的

注意需要引入 tomcat-embed-jasper,这个是内置tomcat解析jsp的依赖

这里主要是引入一下springboot的依赖

三、配置文件

1、删除原来的 SSM 所有配置文件,添加 application.yml

server:
port: 8080
forward-headers-strategy: true
servlet:
session:
timeout: 86400
spring:
transaction:
rollback-on-commit-failure: true
datasource:
type: com.alibaba.druid.pool.DruidDataSource
#MySql配置
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/verio?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
username: root
password: 123456
servlet:
multipart:
max-file-size: 2MB
max-request-size: 20MB
mybatis-plus:
mapper-locations: classpath*:/mapper/**Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.example.ssm.rental.entity
global-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 0
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
field-strategy: 2
#驼峰下划线转换
db-column-underline: true
#刷新mapper 调试神器
refresh-mapper: true
#逻辑删除配置(下面3个配置)
logic-delete-value: 1
logic-not-delete-value: 0
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
logging:
file: ./logs/log.log
level:
org:
springframework:
boot:
autoconfigure: error

2、静态资源映射和拦截器 web配置

注意,我把之前的静态文件包assets放到了resources/static里面,需要映射一下

包括上传目录也可以一起映射一下

还有就是之前在spring-mvc.xml里配置的拦截器,也可以用java config配置一起改了

package com.example.ssm.rental.common.config;
import com.example.ssm.rental.common.constant.Constant;
import com.example.ssm.rental.common.interceptor.AdminInterceptor;
import com.example.ssm.rental.common.interceptor.CustomerInterceptor;
import com.example.ssm.rental.common.interceptor.OwnerInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
/**
* @author liuyanzhao
*/
@Slf4j
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**")
.addResourceLocations("classpath:/static/assets/");
registry.addResourceHandler("/uploads/**")
.addResourceLocations("file:///" + Constant.UPLOADS_PATH);
}
@Bean
public InternalResourceViewResolver setupViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AdminInterceptor())
.addPathPatterns("/admin/user")
.addPathPatterns("/admin/user")
.addPathPatterns("/admin/news")
.addPathPatterns("/admin/news")
.addPathPatterns("/admin/feedback/reply/submit")
.addPathPatterns("/admin/house/checkPass")
.addPathPatterns("/admin/house/checkReject");
registry.addInterceptor(new OwnerInterceptor())
.addPathPatterns("/admin/house")
.addPathPatterns("/admin/house");
registry.addInterceptor(new CustomerInterceptor())
.addPathPatterns("/admin/order")
.addPathPatterns("/admin/order")
.addPathPatterns("/admin/order");
// ...省略
}
}

四、添加启动类

Application.java

package com.example.ssm.rental;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 
* SENS run!
* 
* * @author : saysky * @date : 2019/11/14 */ @Slf4j @SpringBootApplication @EnableScheduling @MapperScan("com.example.ssm.rental.mapper") public class Application { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(Application.class, args); String serverPort = context.getEnvironment().getProperty("server.port"); log.info("Verio started at http://localhost:" + serverPort); } }

从其他springboot项目中拷贝一个启动类过来,修改一下mapperScan的包名

然后直接运行,如果遇到报错,可以再检查下有没有遗漏的地方,如扫包包名错了,无法获取数据源啦,什么的。

有可能是其他的ssm的一些java config有问题,删除掉就行。因为springboot已经有了很多自动配置

五、可能会遇到的报错

1、Could not resolve view with name 'xx' in servlet with name dispa......

这个报错是因为找不到前端模板路径,在application.yml里配置 spring.mvc.view的prefix和suffix似乎无效

需要在配置类里加入配置

 
@Bean
public InternalResourceViewResolver setupViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}

注意给你的webapp目录设置web模块,即webapp目录是蓝色有圆点的

如果不是,请做如下配置,在Facets里添加Web,指定webapp目录

2、前端静态资源404,即页面无样式

这个是因为你配置的静态资源映射有问题,即映射和实际引用的不一致。

我的配置如下

 
registry.addResourceHandler("/assets/**")
.addResourceLocations("classpath:/static/assets/");

前端引用代码如下

 

至此,我们就转换完毕了

个人觉得如果你熟练的话10分钟是差不多的,当然里面一些问题需要逐一分析啦!

基本是一个简单的ssm+jsp的项目能这样快速转成springboot啦!

当然springboot要转成ssm也差不多啦!工作量会稍微大一丢丢!

参考:10分钟 SSM项目转成SpringBoot 项目教程 | 言曌博客