SSM升级为SpringBoot

SSM升级为SpringBoot

前段时间把原来的JavaWeb项目架构升级为了Maven项目。技术栈则是从原生的Jdbc+Servlet升级到了SSM,现在准备把项目升级为SpringBoot。

目前项目架构:

SSM升级为SpringBoot_第1张图片

升级步骤

  • 改POM
  • 改项目结构
  • 主启动类
  • 合并配置文件

改POM

POM文件导入的jar包非常的多,使用SpringBoot的场景启动器来简化。

SSM升级为SpringBoot_第2张图片

目前是一个单体项目,所有的功能都写在一个模块里面。所以我们可以使用标签来做jar包版本的仲裁。然后根据需要添加starter,这里我主要是SSM架构,所以添加如下几个即可。

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-parentartifactId>
    <version>2.0.2.RELEASEversion>
parent>

<dependencies>
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
    dependency>
    <dependency>
        <groupId>org.aspectjgroupId>
        <artifactId>aspectjweaverartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starterartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    <dependency>
        <groupId>org.mybatis.spring.bootgroupId>
        <artifactId>mybatis-spring-boot-starterartifactId>
        <version>2.1.3version>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
    dependency>
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
    dependency>
    dependency>
dependencies>

改项目结构

目前的项目长这样,其中我们的页面要从webapp转移到resources里面,然后其他的基本上差别不大。

SSM升级为SpringBoot_第3张图片

如图,我们的SpringBoot项目应该是这个结构,其中resources里面默认自带两个文件夹,一个是templates,一个是static。templates是个特殊的目录,不能直接访问,一般存放着是一些模板引擎,比如JSP,themeleaf这类的。由于我目前的项目都是HTML页面发送Ajax请求来完成的,所以我们可以不必创建templates这个目录,创建一个static即可,然后把我们的webapp的文件都转移过去。

SSM升级为SpringBoot_第4张图片

改造完毕,其实SpringBoot这是在Maven的基础上添加了一些东西,并没有修改已有的。

SSM升级为SpringBoot_第5张图片

主启动类

在我们的com.kaikeba.express目录右键创建主启动类,对于大家而言,只要保证这个类的路径和我们的各个文件夹同一层即可。

SSM升级为SpringBoot_第6张图片

创建主启动类

@SpringBootApplication
public class ExpressMainApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExpressMainApplication.class, args);
    }
}

保证和我们创建的各个文件夹同一目录即可。

SSM升级为SpringBoot_第7张图片

合并配置文件

目前我们主要有:数据库配置文件,log4j配置文件,spring配置文件,springmvc配置文件。

SSM升级为SpringBoot_第8张图片

首先我们先创建一个springboot的配置文件,我比较喜欢yml,这里以yml作为演示:

如果变成一个树叶,说明我们的主启动类的配置是正确的。

SSM升级为SpringBoot_第9张图片

jdbc.properties

这个好改

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///express?useUnicode=true&characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=123456

yml

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/express?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: root
    password: 123456

log4j

其实有点复杂,这里我们主要为了打印SQL和BUG

### 设置###
log4j.rootLogger = debug,stdout,D

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

## 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

## 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

yml

这里我们可以如下组合,这里我先不配置日志文件了

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
logging:
  level:
    com.kaikeba.express.dao: debug  

spring-config.xml

大概分为如下部分。其中注解扫描就不用了,@SpringBootApplication这个注解自带注解扫描,加载配置文件来配置数据源也不用了,这里我们上面已经配好了。接下来是mybatis,这些对象的创建过程都交给自动配置类了我们等下进行对应的配置接口。事物的话,使用纯注解配置。

SSM升级为SpringBoot_第10张图片

为了简化目录结构,我把mapper.xml都放进resources的mapper目录下。

SSM升级为SpringBoot_第11张图片

配置mybatis的mapper扫描路径和别名管理器

SSM升级为SpringBoot_第12张图片

然而,我们的mybaits的starter并不是springboot写的,而是mybatis团队去适配springboot而写的。所以我们的@SpringBootApplication只会扫描自己的组件,不会扫描mybatis的组件,所以这里我们只是找到了xml的配置文件,并不知道我们的接口类在哪个目录。

这里我们添加一个注解@MapperScan,和@ComponentScan一个意思,扫描指定的包。

SSM升级为SpringBoot_第13张图片

接口推荐使用@Mapper注解,其实@@Repository也行,不过Mapper是适配MapperScan注解,肯定会有更好的容错效果,不要太纠结用哪个。

SSM升级为SpringBoot_第14张图片

springmvc.xml

其中注解扫描也是不用配置了,注解支持,静态资源过滤也不用了,static目录下的资源,Springboot都会视为静态资源处理。关于视图解析器,这里我们可以用springboot的配置文件进行配置,拦截器则是使用纯注解配置。

SSM升级为SpringBoot_第15张图片

配置视图解析器

SSM升级为SpringBoot_第16张图片

除了不能删的都删了。

SSM升级为SpringBoot_第17张图片

接下来,把之前的拦截器给加上,使用注解的方式来完成。

主启动类添加两注解。

SSM升级为SpringBoot_第18张图片

已经有了一个拦截器了,这里使用如下方式进行配置。

@Configuration
public class SpringBootConfig extends WebMvcConfigurerAdapter {
    @Bean
    public LoginInterceptor securityInterceptor() {
        return new LoginInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(securityInterceptor()).excludePathPatterns("/static/*")
                .excludePathPatterns("/error").addPathPatterns("/**");
    }
}

我们的Springboot改造好了。

SSM升级为SpringBoot_第19张图片

启动没有报错
SSM升级为SpringBoot_第20张图片
页面也升起来了

SSM升级为SpringBoot_第21张图片

总结

springboot和spring本来就是一家人,spring系列框架都是低侵入性的,所以我们写好的代码不要动,基本上就是改改文件即可。

你可能感兴趣的:(Java笔记)