#Spring Boot

从2016年1月开始写博客,默默地更新《Spring Boot系列教程》,从无人问津到千万访问,作为一个独立站点(http://blog.didispace.com),相信只有那些跟我一样,坚持维护自己独立博客的童鞋才能体会这有多么不容易。 由于没有CSDN、博客园这样的权重优势,各种发布于这些平台上的洗稿文章与相似内容,就算发布时间较晚,它依然可以在百度上占据很大的搜索优势,以至于一些读者在读了其他人发布于CSDN、博客园上的一些文章之后看到我的原文,再来我这里喷我抄袭,这样的现象早已经习以为常了。但是庆幸,这些内容的很大一部分读者都是科学上网的好手,我大部分的流量来源都源自谷歌,这点不得不佩服谷歌对原创与一手内容的尊重,这才让我们这些能够独立思考与写作分享的技术人可以一直坚持下去。 不知道从什么时候开始,技术圈里的浮夸运营风也越来越重,各种原本非常有含金量的数据也变得越来越虚假,...

在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理。那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一个对象呢? 实现原理:消息转换器(Message Converter)在扩展上述问题之前,我们先要知道Spring Boot中处理HTTP请求的实现是采用的Spring MVC。而在Spring MVC中有一个消息转换器这个概念,它主要负责处理各种不同格式的请求数据进行处理,并包转换成对象,以提供更好的编程体验。 在Spring MVC中定义了HttpMessageConverter接口,抽象了消息转换器对类型的判断、对读写的判断与操作,具体可见如下定义: public interface HttpMessageConverter<T> { boolea...

Swagger Butler是一个基于Swagger与Zuul构建的API文档汇集工具。通过构建一个简单的Spring Boot应用,增加一些配置就能将现有整合了Swagger的Web应用的API文档都汇总到一起,方便查看与测试。 项目地址 Github:https://github.com/dyc87112/swagger-butler Gitee:https://gitee.com/didispace/swagger-butler 快速入门该工具的时候非常简单,先通过下面几步简单入门: 第一步:构建一个基础的Spring Boot应用 如您还不知道如何创建Spring Boot应用,可以先阅读本篇入门文章 第二步:在pom.xml中引入依赖 <parent> <groupId>org.springframework.boot</groupI...

Swagger Butler是一个基于Swagger与Zuul构建的API文档汇集工具。通过构建一个简单的Spring Boot应用,增加一些配置就能将现有整合了Swagger的Web应用的API文档都汇总到一起,方便查看与测试。 项目地址 Github:https://github.com/dyc87112/swagger-butler Gitee:https://gitee.com/didispace/swagger-butler 使用手册快速入门该工具的时候非常简单,先通过下面几步简单入门: 第一步:构建一个基础的Spring Boot应用 如您还不知道如何创建Spring Boot应用,可以先阅读本篇入门文章 第二步:在pom.xml中引入依赖 <parent> <groupId>org.springframework.boot</gr...

在之前的《Spring Boot基础教程》中,我们介绍了通过Spring官方的构建页面来生成项目,也介绍了通过使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程。在完成了基础项目构建之后,我们要开始进行的就是代码的开发阶段,传统情况下,我们需要选择一款自己喜欢的IDE,比如:Intellij、Eclipse等;同时,我们还需要安装一系列其他的基本环境,比如:Java运行环境、Maven、Git等等一系列的工具,才能支持我们正常的Spring Boot应用开发。对于一个初学者来说,可能有些复杂。所以,这篇就来介绍一个比较有创意的在线编辑器:Cloud Studio,它可以帮助我们省去这些繁杂的准备工作。 官网地址:https://studio.coding.net/ 下面我们就来看看,这个工具可以怎么帮助我们编辑、调试以及管理代码...

转载自公众号:工匠小猪猪的技术世界 摘要: 本文非原创,是笔者搜集了一些HikariCP相关的资料整理给大家的介绍,主要讲解了为什么sb2选择了HikariCP以及HikariCP为什么这么快。 Springboot2默认数据库连接池选择了HikariCP为何选择HikariCP理由一、代码量理由二、口碑理由三、速度理由四、稳定性理由五、可靠性HikariCP为什么这么快优化并精简字节码更好的并发集合类实现使用FastList替代ArrayListHikariCP与Druid相比哪个更好?Springboot2快速上手参考资料 Spring Boot 2默认数据库连接池选择了HikariCP默认的数据库连接池由Tomcat换成HikariCP. 如果在一个Tomcat应用中用spring.datasource.type来强制使用Hikari连接池, 则可以去掉这个override...

去年我曾经写过几篇和 Spring Session 相关的文章,从一个未接触过 Spring Session 的初学者视角介绍了 Spring Session 如何上手,如果你未接触过 Spring Session,推荐先阅读下「从零开始学习Spring Session」系列: 从零开始的Spring Security Session(一) 从零开始的Spring Security Session(二) 从零开始的Spring Security Session(三) Spring Session 主要解决了分布式场景下 Session 的共享问题,本文将从 Spring Session 的源码出发,来讨论一些 Session 设计的细节。 Spring Session 数据结构解读想象一个场景,现在一到面试题呈现在你面前,让你从零开始设计一个 Session 存储方案,你会怎么回...

之前连续写了几篇关于使用@Async实现异步调用的内容,也得到不少童鞋的反馈,其中问题比较多的就是关于返回Future的使用方法以及对异步执行的超时控制,所以这篇就来一起讲讲这两个问题的处理。 如果您对于@Async注解的使用还不了解的话,可以看看之前的文章,具体如下: 使用@Async实现异步调用 使用@Async实现异步调用:自定义线程池 使用@Async实现异步调用:资源优雅关闭 定义异步任务首先,我们先使用@Async注解来定义一个异步任务,这个方法返回Future类型,具体如下: @Slf4j@Componentpublic class Task { public static Random random = new Random(); @Async("taskExecutor") public Future<String> ru...

Spring Boot CLI(Command Line Interface)是一个命令行工具,您可以用它来快速构建Spring原型应用。通过Spring Boot CLI,我们可以通过编写Groovy脚本来快速的构建出Spring Boot应用,并通过命令行的方式将其运行起来。下来,我们来学习一下如何安装和使用Spring Boot CLI。 安装Spring Boot CLI关于Spring Boot CLI的安装方式有很多,这里根据目前主要主流的开发平台,具体介绍一下Windows和Mac下的安装方式: 通用安装先介绍一个所有平台都可以使用的安装方法。 第一步:下载Spring Boot CLI的工具包: spring-boot-cli-2.0.1.RELEASE-bin.zip spring-boot-cli-2.0.1.RELEASE-bin.tar.gz 第二步:解压...

上周发了一篇关于Spring Boot中使用@Async来实现异步任务和线程池控制的文章:《Spring Boot使用@Async实现异步调用:自定义线程池》。由于最近身边也发现了不少异步任务没有正确处理而导致的不少问题,所以在本文就接前面内容,继续说说线程池的优雅关闭,主要针对ThreadPoolTaskScheduler线程池。 问题现象在上篇文章的例子Chapter4-1-3中,我们定义了一个线程池,然后利用@Async注解写了3个任务,并指定了这些任务执行使用的线程池。在上文的单元测试中,我们没有具体说说shutdown相关的问题,下面我们就来模拟一个问题现场出来。 第一步:如前文一样,我们定义一个ThreadPoolTaskScheduler线程池: @SpringBootApplicationpublic class Application { pub...

在之前的Spring Boot基础教程系列中,已经通过《Spring Boot中使用@Async实现异步调用》一文介绍过如何使用@Async注解来实现异步调用了。但是,对于这些异步执行的控制是我们保障自身应用健康的基本技能。本文我们就来学习一下,如果通过自定义线程池的方式来控制异步调用的并发。 本文中的例子我们可以在之前的例子基础上修改,也可以创建一个全新的Spring Boot项目来尝试。 定义线程池第一步,先在Spring Boot主类中定义一个线程池,比如: @SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); ...

之前转载了一篇关于《如何在Spring Boot中是配置MongoDB的连接数》的文章,相信关注我博客的朋友们肯定也看过了。这篇文章的作者主要重写了MongoDbFactory的构建来完成,整体实现的过程还是比较复杂的。本文就来具体说说如何更简单的来实现对MongoDB的更多配置定制。 spring-boot-starter-mongodb-plus几周之前,我就在spring4all的github上创建了这个项目,主要就是想扩展一下官方spring boot starter对mongodb的支持,提供更多配置属性,比如:连接数的配置等。 先来看看如果使用这个扩展,是否要比之前那样自己定制要方便的多: 如何使用 在使用了spring-boot-starter-data-mongodb的项目中,增加以下依赖 <dependency> <groupId>...

LocalDate、LocalTime、LocalDateTime是Java 8开始提供的时间日期API,主要用来优化Java 8以前对于时间日期的处理操作。然而,我们在使用Spring Boot或使用Spring Cloud Feign的时候,往往会发现使用请求参数或返回结果中有LocalDate、LocalTime、LocalDateTime的时候会发生各种问题。本文我们就来说说这种情况下出现的问题,以及如何解决。 问题现象先来看看症状。比如下面的例子: @SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); &#...

前提希望本文档将帮助您把应用程序迁移到 Spring Boot 2.0。 在你开始之前首先,Spring Boot 2.0 需要 Java 8 或更高版本。不再支持 Java 6 和 7 了。 在 Spring Boot 2.0 中,许多配置属性被重新命名/删除,开发人员需要更新application.properties/ application.yml相应的配置。为了帮助你解决这一问题,Spring Boot 发布了一个新spring-boot-properties-migrator模块。一旦作为该模块作为依赖被添加到你的项目中,它不仅会分析应用程序的环境,而且还会在启动时打印诊断信息,而且还会在运行时为您暂时迁移属性。在您的应用程序迁移期间,这个模块是必备的: <dependency> <groupId>org.springframework.bo...

今天继续来聊Spring Boot 2.0的新特性。本文将具体说说2.0版本中的事件模型,尤其是新增的事件:ApplicationStartedEvent。 在Spring Boot 2.0中对事件模型做了一些增强,主要就是增加了ApplicationStartedEvent事件,所以在2.0版本中所有的事件按执行的先后顺序如下: ApplicationStartingEvent ApplicationEnvironmentPreparedEvent ApplicationPreparedEvent ApplicationStartedEvent <= 新增的事件 ApplicationReadyEvent ApplicationFailedEvent 从上面的列表中,我们可以看到ApplicationStartedEvent位于ApplicationPreparedE...