最新公告
  • 欢迎光临数据科学与编程,我们是数据学科学兴趣交流小组立即加入我们
  • 2021最新版SpringBoot 速记

    Demo 脚手架项目地址:https://github.com/Vip-Augus/springboot-note

    Table of Contents generated with DocToc

    • SpringBoot 速记
      • 一、引入依赖
      • 二、配置 Swagger 参数
      • 一、引入依赖
      • 二、配置邮箱的参数
      • 三、写模板和发送内容
      • 一、引用 Redis 依赖
      • 二、参数配置
      • 三、代码使用
      • 一、添加 mybatis 和 druid 依赖
      • 二、配置数据库和连接池参数
      • 三、其他 mybatis 配置
      • @ExceptionHandler 错误处理
      • @ModelAttribute 视图属性
      • 常规配置
      • HTTPS 配置
      • 构建项目
      • SpringBoot 基础配置
      • Spring Boot Starters
      • @SpringBootApplication
      • Web 容器配置
      • @ConfigurationProperties
      • Profile
      • @ControllerAdvice 用来处理全局数据
      • CORS 支持,跨域资源共享
      • 注册 MVC 拦截器
      • 开启 AOP 切面控制
      • 整合 Mybatis 和 Druid
      • 整合 Redis
      • 发送 HTML 样式的邮件
      • 整合 Swagger (API 文档)
      • 总结
      • 参考资料

    构建项目

    相比于使用 IDEA 的模板创建项目,我更推荐的是在 Spring 官网上选择参数一步生成项目

    https://start.spring.io/

    2021最新版SpringBoot 速记

    我们只需要做的事情,就是修改组织名和项目名,点击 Generate the project,下载到本地,然后使用 IDEA 打开

    这个时候,不需要任何配置,点击 Application 类的 run 方法就能直接启动项目。


    SpringBoot 基础配置

    Spring Boot Starters

    引用自参考资料 1 描述:

    starter的理念:starter 会把所有用到的依赖都给包含进来,避免了开发者自己去引入依赖所带来的麻烦。需要注意的是不同的 starter 是为了解决不同的依赖,所以它们内部的实现可能会有很大的差异,例如 jpa 的 starter 和 Redis 的 starter 可能实现就不一样,这是因为 starter 的本质在于 synthesize,这是一层在逻辑层面的抽象,也许这种理念有点类似于 Docker,因为它们都是在做一个“包装”的操作,如果你知道 Docker 是为了解决什么问题的,也许你可以用 Docker 和 starter 做一个类比。

    我们知道在 SpringBoot 中很重要的一个概念就是,「约定优于配置」,通过特定方式的配置,可以减少很多步骤来实现想要的功能。

    例如如果我们想要使用缓存 Redis

    在之前的可能需要通过以下几个步骤:

    1. pom 文件引入特定版本的 redis
    2. .properties 文件中配置参数
    3. 根据参数,新建一个又一个 jedis 连接
    4. 定义一个工具类,手动创建连接池来管理

    经历了上面的步骤,我们才能正式使用 Redis

    但在 Spring Boot 中,一切因为 Starter 变得简单

    1. pom 文件中引入 spring-boot-starter-data-redis
    2. .properties 文件中配置参数

    通过上面两个步骤,配置自动生效,具体生效的 beanRedisAutoConfiguration,自动配置类的名字都有一个特点,叫做 xxxAutoConfiguration

     


    @SpringBootApplication

    该注解是加载项目的启动类上的,而且它是一个组合注解:

    下面是这三个核心注解的解释:

    注解名 解释
    @SpringBootConfiguration 表明这是一个配置类,开发者可以在这个类中配置 Bean
    @EnableAutoConfiguration 表示开启自动化配置
    @ComponentScan 完成包扫描,默认扫描的类位于当前类所在包的下面

    通过该注解,我们执行 mian 方法:

    就可以启动一个 SpringApplicaiton 应用了。


    Web 容器配置

    常规配置

    配置名 解释
    server.port=8081 配置了容器的端口号,默认是 8080
    server.error.path=/error 配置了项目出错时跳转的页面
    server.servlet.session.timeout=30m session 失效时间,m 表示分钟,如果不写单位,默认是秒 s
    server.servlet.context-path=/ 项目名称,不配置时默认为/。配置后,访问时需加上前缀
    server.tomcat.uri-encoding=utf-8 Tomcat 请求编码格式
    server.tomcat.max-threads=500 Tomcat 最大线程数
    server.tomcat.basedir=/home/tmp Tomcat 运行日志和临时文件的目录,如不配置,默认使用系统的临时目录

    HTTPS 配置

    配置名 解释
    server.ssl.key-store=xxx 秘钥文件名
    server.ssl.key-alias=xxx 秘钥别名
    server.ssl.key-store-password=123456 秘钥密码

    想要详细了解如何配置 HTTPS,可以参考这篇文章 Spring Boot 使用SSL-HTTPS


    @ConfigurationProperties

    这个注解可以放在类上或者 @Bean 注解所在方法上,这样 SpringBoot 就能够从配置文件中,读取特定前缀的配置,将属性值注入到对应的属性。

    使用例子


    Profile

    使用该属性,可以快速切换配置文件,在 SpringBoot 默认约定中,不同环境下配置文件名称规则为 application-{profile}.propertieprofile 占位符表示当前环境的名称。

    • key : @ModelAttribute 注解中的 value 属性
    • 使用场景:任何请求 controller 类,通过方法参数中的 Model 都可以获取 value 对应的属性

    CORS 支持,跨域资源共享

    CORS(Cross-Origin Resource Sharing),跨域资源共享技术,目的是为了解决前端的跨域请求。

    引用:当一个资源从与该资源本身所在服务器不同的域或端口请求一个资源时,资源会发起一个跨域HTTP请求

    详细可以参考这篇文章-springboot系列文章之实现跨域请求(CORS),这里只是记录一下如何使用:

    例如在我的前后端分离 demo 中,如果没有通过 Nginx 转发,那么将会提示如下信息:

    Access to fetch at ‘http://localhost:8888/login‘ from origin ‘http://localhost:3000‘ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: The value of the ‘Access-Control-Allow-Credentials’ header in the response is ‘’ which must be ‘true’ when the request’s credentials mode is ‘include’

    为了解决这个问题,在前端不修改的情况下,需要后端加上如下两行代码:


     

    注册 MVC 拦截器

    MVC 模块中,也提供了类似 AOP 切面管理的扩展,能够拥有更加精细的拦截处理能力。

    核心在于该接口:HandlerInterceptor,使用方式如下:

    注册代码:

    拦截器执行顺序:preHandle -> controller -> postHandle -> afterCompletion,同时需要注意的是,只有 preHandle 方法返回 true,后面的方法才会继续执行。


    开启 AOP 切面控制

    切面注入是老生常谈的技术,之前学习 Spring 时也有了解,可以参考我之前写过的文章参考一下:

    Spring自定义注解实现AOP

    Spring 源码学习(八) AOP 使用和实现原理

    SpringBoot 中,使用起来更加简便,只需要加入该依赖,使用方法与上面一样。


    整合 Mybatis 和 Druid

    SpringBoot 整合数据库操作,目前主流使用的是 Druid 连接池和 Mybatis 持久层,同样的,starter 提供了简洁的整合方案

    项目结构如下:

    2021最新版SpringBoot 速记

    一、添加 mybatis 和 druid 依赖

    二、配置数据库和连接池参数

     

    三、其他 mybatis 配置

    本地工程,将 xml 文件放入 resources 资源文件夹下,所以需要加入以下配置,让应用进行识别:

     

    通过上面的配置,我本地开启了三个页面的监控:SQLURLSprint 监控,如下图:

    2021最新版SpringBoot 速记

    通过上面的配置,SpringBoot 很方便的就整合了 Druid 和 mybatis,同时根据在 properties 文件中配置的参数,开启了 Druid 的监控。

    但我根据上面的配置,始终开启不了 session 监控,所以如果需要配置 session 监控或者调整参数具体配置,可以查看官方网站


    整合 Redis

    我用过 RedisNoSQL,但最熟悉和常用的,还是 Redis ,所以这里记录一下如何整合

     

    这里只是简单记录引用和使用方式,更多功能可以看这里:


    发送 HTML 样式的邮件

    之前也使用过,所以可以参考这篇文章:

    一、引入依赖

    二、配置邮箱的参数

    如果使用的是 QQ 邮箱,需要在邮箱的设置中获取授权码,填入上面的 password

    三、写模板和发送内容

    通过上面简单步骤,就能够在代码中发送邮件,例如我们每周要写周报,统计系统运行状态,可以设定定时任务,统计数据,然后自动化发送邮件。


    整合 Swagger (API 文档)

    二、配置 Swagger 参数

    通过这样就能够识别 @ApiOperation 等接口标志,在网页查看 API 文档,参考文档:Spring Boot实战:集成Swagger2


    总结

    这边总结的整合经验,只是很基础的配置,在学习的初期,秉着先跑起来,然后不断完善和精进学习。

    而且单一整合很容易,但多个依赖会出现想不到的错误,所以在解决环境问题时遇到很多坑,想要使用基础的脚手架,可以尝试跑我上传的项目。

    数据库脚本在 resources 目录的 test.sql 文件中


    参考资料

    1、Spring Boot Starters

    2、Spring Boot 使用SSL-HTTPS

    3、Spring Boot(07)——ConfigurationProperties介绍

    4、springboot系列文章之实现跨域请求(CORS)

    5、Spring Data Redis(一)–解析RedisTemplate

    6、Spring Boot实战:集成Swagger2

    本站上原创文章未经作者许可,不得用于商业用途,仅做学习交流使用,本站免责声明。转载请注明出处,否则保留追究法律责任的权利。《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
    数据科学与编程 » 2021最新版SpringBoot 速记

    发表评论

    • 52会员总数(位)
    • 312资源总数(个)
    • 31本周发布(个)
    • 3 今日发布(个)
    • 331稳定运行(天)

    提供最优质的博文资源集合

    立即阅览 了解详情