项目SpringMvc转SpringBoot记录

项目SpringMvc转SpringBoot记录

  • 背景介绍

项目基于JDK8,应用SpringMvc+Jsp的结构,前后端部分还未实现分离。

基于现有微服务架构,项目现有架构功能扩展复杂度高,风险不宜把控,项目需求迭代频繁,敏捷迭代困难,微服务组件和公共服务调用支持不便捷。需要在不影响业务的情况下,将SpringMvc架构先转为Springboot。

  • 过程记录
  1. springboot  pom 依赖整理

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!-- 数据库连接 -->

<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid-spring-boot-starter</artifactId>

</dependency>

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

</dependency>

<!-- mybatisPlus组件包 -->

<dependency>

    <groupId>com.baomidou</groupId>

    <artifactId>mybatis-plus-boot-starter</artifactId>

</dependency>

<!-- 数据库连接 -->

原有spring的部分pom引用重复冲突的清除

包冲突不一定对服务造成影响,可根据系统情况排除,最好是先清除明确不需要的依赖,其他冲突问题可在服务启动和调试时再处理。

   2. application启动类添加

@SpringBootApplication

@Slf4j

@MapperScan({"com.ab.cd.dao""})

public class SpringBootApplication {

    public static void main(String[] args) {

        SpringApplication.run(SpringBootApplication .class, args);

        log.info("+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+");

        log.info("服务|启动成功! ");

   log.info("+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+");

    }

}
  1. application yml配置 @value

项目中存在很多@value的配置项,都需要实现yaml配置application.yml

server:

  port: 8029

  servlet:

    context-path: /springboot

spring:

  application:

    name: springboot

  ## redis start ##

  redis:

    database: 0

    host: localhost

    port: 6378

    password: ****

    timeout: 3000ms

    lettuce:

      pool:

        max-active: 8

        max-wait: -1ms

        max-idle: 8

        min-idle: 0

  ## redis end ##



  ## datasource start ##

  datasource:

    type: com.alibaba.druid.pool.DruidDataSource

    driver-class-name: com.mysql.cj.jdbc.Driver

    url: jdbc:mysql://localhost:8066/hand_db?serverTimezone=GMT%2B8&allowMultiQueries=true  # 数据库名称

    username: ***

    password: ****

    druid:

      #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时

      initial-size: 5

      min-idle: 5 #最小连接池数量

      max-active: 100 #最大连接池数量

      max-wait: 60000 #获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。

      use-unfair-lock: true

      validation-query: SELECT 1 #用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。

      validation-query-timeout: 2 #单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法

      test-while-idle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。

      test-on-borrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

      test-on-return: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

      reset-stat-enable: true

      connection-init-sqls:

        'set names utf8mb4;'

      filters: stat

      stat-view-servlet:

        login-username: druid

        login-password: druid

      time-between-eviction-runs-millis: 300000 #空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟

  ## datasource end ##

  ##邮件

  mail:

    host: smtp.qq.com

    username: 1234@qq.com

    password: 12345

    properties:

      mail:

        smtp:

          auth: true

          starttls:

            enable: true

            required: true

  resources:

    # 配置静态资源地址,默认地址:"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/

    static-locations: classpath:/webapp/,classpath:/static/

  mvc:

    view:

      # 如果将html页面直接放在templates目录下,可能省略下面这行配置

      #prefix: views

      prefix: /

      # 必须的,不然报错

      suffix: .jsp

    #配置了未生效

#    static-path-pattern: /static/**



mybatis:

  config-location: classpath:static/mybatis/mybatis.cfg.xml

  type-aliases-package: com.**.**.dao.*

  mapper-locations: classpath:/mapper/*/*.xml



logging:

  #config: classpath:logback.xml

  level:

    #    这里配置切换根日志root级别   | DEBUG  | INFO | WARN | ERROR

    root: INFO

    org.apache: WARN

    com.**.**.dao: DEBUG

    springfox.documentation: INFO

    org.springframework: INFO

    com.alibaba.nacos: WARN

  1. dao mapper扫描处理,xml移动resource目录

Yaml mybatis 做配置项

mybatis:

  config-location: classpath:static/mybatis/mybatis.cfg.xml

  type-aliases-package: com.xm.**.dao.*

  mapper-locations: classpath:/mapper/*/*.xml

Springboot需要添加dao层扫描,一般常见两种处理方式

接口类上加注解@Mapper   

application 启动类上统一添加@MapperScan

注意项:application 启动类上统一添加@MapperScan时,需要指明dao路径,MapperScan扫描时会将接口interface注入bean,如果扫描范围过大,将service的接口也扫描到,启动会报错 多个bean实现问题。

--------------------------------------------------------------------

按正常流程,前面几项处理完后,简单springboot项目应该能正常启动访问了。

但一般项目中都会集成应用一些组件,原有模式项目启动会报错,那我们就得继续处理,改成支持springboot。

  1. freemarker版本升级匹配springboot
<dependency>

    <groupId>org.freemarker</groupId>

    <artifactId>freemarker</artifactId>

    <version>2.3.30</version>

</dependency>

原有freemarker版本不支持springboot,需要升级版本支持

  1. redis 改为springboot starter

Redis改为springboot集成

<!--SpringBoot整合redis -->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

spring:

  ## redis start ##

  redis:

    database: 0

    host: localhost

    port: 6379

    password: ****

    timeout: 3000ms

    lettuce:

      pool:

        max-active: 8

        max-wait: -1ms

        max-idle: 8

        min-idle: 0

  ## redis end ##

參考地址 SpringBoot整合Redis_Xxxyfeng的博客-CSDN博客_springboot整合redis

  1. springboot整合javaMailSender

项目中应用了mail服务,需要改成springboot集成

<!--SpringBoot整合mail -->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-mail</artifactId>

    <version>2.2.13.RELEASE</version>

</dependency>

Spring:

##邮件

mail:

  host: smtp.qq.com

  username: **@qq.com

  password: ***

  properties:

    mail:

      smtp:

        auth: true

        starttls:

          enable: true

          required: true

參考地址 SpringBoot整合javaMailSender_傲来雾-花果香的博客-CSDN博客_javamailsender依赖

  1. 启动后运行方法

项目存在启动后需要运行的方法,类似服务号菜单配置等,需要改成springboot集成

1 实现ApplicationRunner接口

2 实现CommandLineRunner接口


@Component

@Slf4j

public class MyRunner implements CommandLineRunner {

 

    /**

     * Callback used to run the bean.

     *

     * @param args incoming main method arguments

     * @throws Exception on error

     */

    @Override

    public void run(String... args) throws Exception {

        log.info("程序启动了");

            }

   }

參考地址 想springboot启动完成后执行某个方法 - 简书

-------------------------------------------------------------------

到此,服务可以正常启动成功,接口访问正常!接下来就是调试前端支持jsp了

  1. html jsp 页面访问支持配置 ,js css img 移动static

jsp页面在webapp下

js css img 静态资源在resource/static下


spring:

resources:

    # 配置静态资源地址,默认地址:"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/

    static-locations: classpath:/webapp/,classpath:/static/

  mvc:

    view:

      # 如果将html页面直接放在templates目录下,可能省略下面这行配置

      #prefix: views

      prefix: /

      # 必须的,不然报错

      suffix: .jsp

    #配置了未生效

#    static-path-pattern: /static/**

先写个测试的html页面调试访问  suffix: .html

 

<!--SpringBoot JSP依赖-->

<dependency>

    <groupId>org.apache.tomcat.embed</groupId>

    <artifactId>tomcat-embed-jasper</artifactId>

</dependency>

中间出现调试处理的问题:

页面请求不到

页面请求直接下载

Js\css\img静态资源404

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值