前端时间帮朋友开发的SSM房屋租赁系统,后来有朋友要求改造成SpringBoot版本。
于是,这就开搞。
项目介绍地址:新品 SSM/SpringBoot房屋租赁系统,房屋合租系统(ssm和springboot多版本)
一、结构对比
1、SSM项目结构
2、SpringBoot版本
下面开始介绍代码修改
二、 修改 pom.xml
1、SSM的pom.xml
4.0.0 com.example Veriowar 1.0.0-SNAPSHOT Verio Maven Webapp http://maven.apache.org 1.8 1.8 UTF-8 org.projectlombok lombok1.16.22 javax.servlet javax.servlet-api3.1.0 provided javax.servlet.jsp javax.servlet.jsp-api2.3.1 javax.servlet jstl1.1.2 taglibs standard1.1.2 org.springframework spring-core4.2.0.RELEASE org.springframework spring-beans4.2.0.RELEASE org.springframework spring-context4.2.0.RELEASE org.springframework spring-context-support4.2.0.RELEASE org.springframework spring-web4.2.0.RELEASE org.springframework spring-test4.2.0.RELEASE org.springframework spring-webmvc4.2.0.RELEASE org.springframework spring-tx4.2.0.RELEASE org.springframework spring-jdbc4.2.0.RELEASE org.springframework spring-aop4.2.0.RELEASE org.springframework spring-aspects4.2.0.RELEASE com.baomidou mybatis-plus3.1.2 mysql mysql-connector-java8.0.11 com.alibaba druid1.0.16 log4j log4j1.2.17 org.slf4j slf4j-api1.7.21 commons-logging commons-logging1.2 junit junit4.12 test commons-fileupload commons-fileupload1.2.2 commons-io commons-io2.4 com.fasterxml.jackson.core jackson-databind2.5.0 com.fasterxml.jackson.core jackson-core2.5.0 com.fasterxml.jackson.core jackson-annotations2.5.0 org.codehaus.jackson jackson-mapper-asl1.9.13 org.json json20170516 org.apache.commons commons-lang33.4 com.github.pagehelper pagehelper4.2.1 com.alibaba fastjson1.2.72 net.coobird thumbnailator0.4.8 cn.hutool hutool-all4.1.13 io.github.biezhi oh-my-email0.0.3 aliyun http://maven.aliyun.com/nexus/content/groups/public aliyun http://maven.aliyun.com/nexus/content/groups/public Verio src/main/java **/*.xml true src/main/resources **/* true
2、SpringBoot的pom.xml
4.0.0 com.example Verio-bootjar 1.0.0-SNAPSHOT Verio Maven Webapp http://maven.apache.org org.springframework.boot spring-boot-starter-parent2.1.7.RELEASE 1.8 1.8 UTF-8 UTF-8 UTF-8 1.8 1.1.10 1.18.2 3.8 4.1.13 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.springframework.boot spring-boot-starter-aopcom.baomidou mybatis-plus-boot-starter3.1.2 org.springframework.boot spring-boot-starter-jdbcmysql mysql-connector-javaruntime com.alibaba druid-spring-boot-starter${druid.version} org.projectlombok lombok${lombok.version} provided org.apache.commons commons-lang3${commons-lang3.version} cn.hutool hutool-all${hutool-all.version} org.springframework.boot spring-boot-devtoolstrue com.alibaba fastjson1.2.72 com.google.guava guava26.0-jre org.apache.shiro shiro-spring1.4.0 com.github.theborakompanioni thymeleaf-extras-shiro2.0.0 com.google.code.gson gson2.8.5 io.github.biezhi oh-my-email0.0.3 junit junit4.12 javax.servlet jstlcompile org.apache.tomcat.embed tomcat-embed-jaspercompile aliyun http://maven.aliyun.com/nexus/content/groups/public aliyun http://maven.aliyun.com/nexus/content/groups/public verio org.springframework.boot spring-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 项目教程 | 言曌博客