Spring Boot

在目前最新的Spring Boot 2.4版本中,对配置的加载机制做了较大的调整。相关的问题最近也被问的比较多,所以今天就花点时间,给大家讲讲Spring Boot 2.4的多环境配置较之前版本有哪些变化。 多环境配置2.4版本之前 先回顾下,2.4版本之前,我们在yaml配置文件中,使用spring.profiles来定义不同环境的标识,比如下面这样: spring: profiles: "dev"name: dev.didispace.com---spring: profiles: "test"name: test.didispace.com---spring: profiles: "prod"name: prod.didispace.com 2.4版本之后 而在本次2.4版本升级之后,我们需要将spring.profiles配置用spring.config.activat...

近日,Spring Boot官方发布了本年度最后一次版本更新,主要针对目前维护的三个版本: 2.4.x:第一个bug修复版本 2.4.1 2.3.x:常规维护版本 2.3.7 2.2.x:常规维护版本 2.2.12 由于2.2.x和2.3.x已经非常稳定,所以我们主要关注本次2.4.1的更新。 2.4.1版本内容由于在Spring Boot 2.4.0版本中,对原有的配置加载机制做了较大改动,不少开发者反映在升级的时候也出现了各种不同的问题。而这次2.4.1的发布,主要着手解决了不少关于配置相关的Bug。下面我们一起看看这次都解决了哪些重要问题: 通过通配符匹配的配置文件互相覆盖的问题 配置属性与JavaBean之间绑定的顺序问题 允许递归配置文件组的引用 外部应用程序属性加载顺序的问题 @Name在Kotlin中绑定失败的问题 Redis健康检查器对性能消耗过大的问题 Act...

2020年11月12日,Spring官方发布了Spring Boot 2.4.0 GA的公告。 在这个版本中增加了大量的新特性和改进,下面我们一起看看在这个重要版本中都有哪些值得关注的内容! 更新内容 版本命名的更改,从2.4开始,版本名将去除RELEASE后缀,所以这次的版本不是2.4.0.RELEASE,而是2.4.0 改进了 application.properties 和 application.yml 文件的处理方式。如果您只有一个简单的 application.properties 或 application.yml 文件,那么您的升级应该是无缝的。但是,如果您有更复杂的设置,那么如果您想使用新特性,则可能需要进行一些更改。更细节的内容可参考: https://github.com/spring-projects/spring-boot/wiki/Spring-Bo...

之前我们介绍了两种进程内缓存的用法,包括Spring Boot默认使用的ConcurrentMap缓存以及缓存框架EhCache。虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进程内的缓存框架,在集群模式下时,各应用服务器之间的缓存都是独立的,因此在不同服务器的进程间会存在缓存不一致的情况。即使EhCache提供了集群环境下的缓存同步策略,但是同步依然是需要一定的时间,短暂的缓存不一致依然存在。 在一些要求高一致性(任何数据变化都能及时的被查询到)的系统和应用中,就不能再使用EhCache来解决了,这个时候使用集中式缓存就可以很好的解决缓存数据的一致性问题。接下来我们就来学习一下,如何在Spring Boot的缓存支持中使用Redis实现数据缓存。 动手试试本篇的实现将基于上一篇的基础工程来进行。先来回顾下上一篇中的程序要素: User实体的定义 @Entity...

Spring Boot 2.3.2 Spring Boot 2.2.9 Spring Boot 2.1.16 现在可从 repo.spring.io 和 Maven Central 获得。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> <relativePath/></parent> 多个版本发布,本文仅着重分享关于 v2.3 版本的更新报告,此版本包括 88 个错误修复,增强功能,文档改进和依赖项升级。 更新日志新特性 增强 Liven...

最近 SpringFox 3.0.0 发布了,距离上一次大版本2.9.2足足有2年多时间了。可能看到这个名字,很多读者会有点陌生。但是,只要给大家看一下这两个依赖,你就知道了! <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> <scope>compile</scope></dependency><dependency> <groupId>io.springfox</groupId> <artifactId>...

上一篇我们介绍了在Spring Boot中整合EhCache的方法。既然用了ehcache,我们自然要说说它的一些高级功能,不然我们用默认的ConcurrentHashMap就好了。本篇不具体介绍EhCache缓存如何落文件、如何配置各种过期参数等常规细节配置,这部分内容留给读者自己学习,如果您不知道如何搞,可以看看这里的官方文档。 那么我们今天具体讲什么呢?先思考一个场景,当我们使用了EhCache,在缓存过期之前可以有效的减少对数据库的访问,但是通常我们将应用部署在生产环境的时候,为了实现应用的高可用(有一台机器挂了,应用还需要可用),肯定是会部署多个不同的进程去运行的,那么这种情况下,当有数据更新的时候,每个进程中的缓存都是独立维护的,如果这些进程缓存同步机制,那么就存在因缓存没有更新,而一直都用已经失效的缓存返回给用户,这样的逻辑显然是会有问题的。所以,本文就来说说当使用Eh...

上一篇我们学会了如何使用Spring Boot使用进程内缓存在加速数据访问。可能大家会问,那我们在Spring Boot中到底使用了什么缓存呢? 在Spring Boot中通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者: Generic JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others) EhCache 2.x Hazelcast Infinispan Couchbase Redis Caffeine Simple 除了按顺序侦测外,我们也可以通过配置属性spring.cache.type来强制指定。我们也可以通过debug调试查看cacheManager对象的实例来判断当前使用了什么缓存。在上一篇中,我们也...

随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一。Spring 3开始提供了强大的基于注解的缓存支持,可以通过注解配置方式低侵入的给原有Spring应用增加缓存功能,提高数据访问性能。 在Spring Boot中对于缓存的支持,提供了一系列的自动化配置,使我们可以非常方便的使用缓存。下面我们通过一个简单的例子来展示,我们是如何给一个既有应用增加缓存功能的。 快速入门下面我们将使用使用Spring Data JPA访问MySQL一文的案例为基础。这个案例中包含了使用Spring Data JPA访问User数据的操作,利用这个基础,我们为其添加缓存,来减少对数据库的IO,以达到访问加速的作用。如果您还不熟悉如何实现对MySQL的读写操作,那么建议先阅读前文,完成这个基础案例的编写。...

在昨天的《事务管理入门》一文发布之后,有读者联系说根据文章尝试,加了@Transactional注解之后,事务并没有回滚。 经过一顿沟通排查之后,找到了原因,在此记录一下,给后面如果碰到类似问题的童鞋一个参考。 问题原因在前文的描述中,我漏了一个细节,其实在示例代码中,与之前拿的基础例子在配置中有一个关键属性没有提到,就是下面这个配置: spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect 这里的spring.jpa.database-platform配置主要用来设置hibernate使用的方言。这里特地采用了MySQL5InnoDBDialect,主要为了保障在使用Spring Data JPA时候,Hibernate自动创建表的时候使用InnoDB存储引擎,不然就会以默认存储引擎MyISAM来...

什么是事务?我们在开发企业应用时,通常业务人员的一个操作实际上是对数据库读写的多步操作的结合。由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成功操作的数据并不可靠,如果要让这个业务正确的执行下去,通常有实现方式: 记录失败的位置,问题修复之后,从上一次执行失败的位置开始继续执行后面要做的业务逻辑 在执行失败的时候,回退本次执行的所有过程,让操作恢复到原始状态,带问题修复之后,重新执行原来的业务逻辑 事务就是针对上述方式2的实现。事务,一般是指要做的或所做的事情,就是上面所说的业务人员的一个操作(比如电商系统中,一个创建订单的操作包含了创建订单、商品库存的扣减两个基本操作。如果创建订单成功,库存扣减失败,那么就会出现商品超卖的问题,所以最基本的最发就是需要为这两个操作用事务包括起来,保证这两个操作要么都...

前两天,我们已经介绍了关于JdbcTemplate的多数据源配置以及Spring Data JPA的多数据源配置,接下来具体说说使用MyBatis时候的多数据源场景该如何配置。 添加多数据源的配置先在Spring Boot的配置文件application.properties中设置两个你要链接的数据库配置,比如这样: spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/test1spring.datasource.primary.username=rootspring.datasource.primary.password=123456spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.sec...

上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现。接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用。 添加多数据源的配置先在Spring Boot的配置文件application.properties中设置两个你要链接的数据库配置,比如这样: spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/test1spring.datasource.primary.username=rootspring.datasource.primary.password=123456spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.seco...

在本系列之前的教程中,我们已经介绍了如何使用目前最常用的三种数据访问方式: JdbcTemplate Spring Data JPA MyBatis 下面我们将分三篇来介绍在这三种数据访问方式之下,当我们需要多个数据源的时候,该如何使用的配置说明。 添加多数据源的配置先在Spring Boot的配置文件application.properties中设置两个你要链接的数据库配置,比如这样: spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/test1spring.datasource.primary.username=rootspring.datasource.primary.password=123456spring.datasource.primary.driver-class-name=com.mys...

在 2.3.0 中对 Spring Boot 进行了相当重大的更改,这是使用 Gradle 而非 Maven 构建的项目的第一个版本。 Spring 的每个项目都独立的项目组在开发运营,在用户最常使用的白盒部分(例如 API 设计)保持一致性,对于用户不可见的黑盒部分,各个项目组选择自己适合工具没有统一的约定。 例如: 项目构建工具。Spring Framework 自 2012 年的 3.2.0 起就使用 Gradle 构建,而一年后开始使用 Spring Boot,此后不久又开始使用 Spring Cloud,两者都基于 Maven。 项目 构建工具 Spring Framework Gradle Spring Boot Maven Spring Cloud Maven 为什么要切换Spring Boot 团队考虑由 Maven 切换到 Gradle ...