Spring Boot

在如今的关系型数据库中,有两个开源产品是你必须知道的。其中一个是MySQL,相信关注我的小伙伴们一定都不陌生,因为之前的Spring Boot关于关系型数据库的所有例子都是对MySQL来介绍的。而今天我们将介绍另外一个开源关系型数据库:PostgreSQL,以及在Spring Boot中如何使用。 PostgreSQL简介在学习PostgreSQL的时候,我们总是会将其与MySQL放一起来比较:MySQL自称是最流行的开源数据库,而PostgreSQL则标榜自己是最先进的开源数据库,那么有多先进呢?下面就一起认识一下它! PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。Postg...

9 月 23 日官方发布了 Spring Boot 2.5.5 版本,此版本包括 41 个错误修复、文档改进和依赖项升级。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.5</version> <relativePath/> <!-- lookup parent from repository --></parent> 缺陷修复 修复 端点默认情况下不会清理 SPRING_APPLICATION_JSON #28081 Flyway 和 Spring Integratio...

Spring Boot的上传文件,相信你一定会了。如果还不会的小伙伴,可以先看看之前的分享: Spring Boot 2.x基础教程:实现文件上传 Spring Boot 2.x基础教程:多文件的上传 文件上传实现之后,通常最常见的另外两个操作就是下载和预览,下载只需要知道地址,就简单搞定了,那么预览怎么做?你知道吗? 今天小编就来推荐一个用Spring Boot搭建的文档在线预览解决方案:kkFileView! 这是一款成熟且开源的文件文档在线预览项目解决方案,如果你用过类似如永中office、office365、idocv这些付钱产品,你一定会喜欢kkFileView,因为在功能满足的前提下,谁还喜欢付费呢? 12大特性 支持word excel ppt,pdf等办公文档 支持txt,java,php,py,md,js,css等所有纯文本 支持zip,rar,jar,tar,...

通过之前三篇关于Spring Boot异步任务实现的博文,我们分别学会了用@Async创建异步任务、为异步任务配置线程池、使用多个线程池隔离不同的异步任务。今天这篇,我们继续对上面的知识进行完善和优化! 如果你已经看过上面几篇内容并已经掌握之后,一起来思考下面这个问题: 假设,线程池配置为核心线程数2、最大线程数2、缓冲队列长度2。此时,有5个异步任务同时开始,会发生什么? 场景重现我们先来把上面的假设用代码实现一下: 第一步:创建Spring Boot应用,根据上面的假设写好线程池配置。 @EnableAsync@SpringBootApplicationpublic class Chapter78Application { public static void main(String[] args) { SpringApplicatio...

通过上一篇:配置@Async异步任务的线程池的介绍,你应该已经了解到异步任务的执行背后有一个线程池来管理执行任务。为了控制异步任务的并发不影响到应用的正常运作,我们必须要对线程池做好相应的配置,防止资源的过渡使用。除了默认线程池的配置之外,还有一类场景,也是很常见的,那就是多任务情况下的线程池隔离。 什么是线程池的隔离,为什么要隔离可能有的小伙伴还不太了解什么是线程池的隔离,为什么要隔离?。所以,我们先来看看下面的场景案例: @RestControllerpublic class HelloController { @Autowired private AsyncTasks asyncTasks; @GetMapping("/api-1") public String taskOne() { Completab...

上一篇我们介绍了如何使用@Async注解来创建异步任务,我可以用这种方法来实现一些并发操作,以加速任务的执行效率。但是,如果只是如前文那样直接简单的创建来使用,可能还是会碰到一些问题。存在有什么问题呢?先来思考下,下面的这个接口,通过异步任务加速执行的实现,是否存在问题或风险呢? @RestControllerpublic class HelloController { @Autowired private AsyncTasks asyncTasks; @GetMapping("/hello") public String hello() { // 将可以并行的处理逻辑,拆分成三个异步任务同时执行 CompletableFuture<String> task1 = asyncTasks...

什么是“异步调用”?“异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。 同步调用下面通过一个简单示例来直观的理解什么是同步调用: 定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内) @Slf4j@Componentpublic class AsyncTasks { public static Random random = new Random(); public void doTaskOne() throws Exception { log.info("开始做任务一"); long start = System.currentTimeMil...

一年一度的SpringOne大会在9月1日至2日因为疫情原因在线上举行。Pivotal公司(Spring项目拥有者)每年都会举办一次这样的大会,与全球数千位开发人员、客户和合作伙伴相聚在一起,交流技术实践经验,探讨技术的发展趋势。同时每次大会也会披露Spring项目下一步的大动作。今年的大会的亮点无疑是Spring Framework 6.0。跟随胖哥来看看在未来一段时间内Spring的大动作。 Spring Framework 5.3.x先来看看Spring Framework 5.3.x的一些规划。 不用翻译的了吧,强调一下Spring Boot 2.6和2.7都会基于该版本。 Spring Framework 6.0备受瞩目的就是Spring Framework 6.0了。它将基于 Java 17 和 Jakarta EE 9 。它现在的情况是这样的: Spring 6.0...

这个swagger的starter已经存在四年了,记得当时做这个的时候主要是由于swagger官方并没有提供类似spring boot官方其他starter模块一样的封装。当我们要用swagger的时候,还是要写很多Java配置来启动,所以就做了这个,尽可能的把原来要写在Java中的配置都转移到配置文件中来。 一个小小的封装,也获得了2k+的Star,使用也超过了3.1k。 之前由于springfox 3.0推出了starter(之前我也写了篇博客介绍使用SpringFox 3生成Swagger文档),想着既然有了这个,那就没有花太多精力去继续更新了。 但是,一直有收到用过springfox starter的小伙伴反应还是希望可以用纯配置的方式来使用swagger,希望这个swagger可以继续升级到最新的版本。所以,下面会继续跟进这个starter,这里要特别感谢andi.lin...

美国时间8月19日Spring Boot 2.5.4版本发布,此版本包括35个错误修复、文档改进和依赖项升级。 错误修复 spring-boot-configuration-metadata强制性的泄露依赖约束到消费构建中 #27730 TomcatMetricsBinder.findContext()中潜在的空指正问题 #27616 当Spring Data的repository是一个MeterBinder的依赖项时,出现循环Bean定义 #27591 spring-boot:build-image会因为上传过程中抛出异常而挂起 #27535 当WebClient在类路径上没有一个可以支持的HTTP Client的时候,WebTestClientContextCustomizerFactory会引发IllegalStateException #27527 spring.securi...

前几天分享了一篇《Spring Boot 2.x基础教程:加密配置中的敏感信息》 ,然后看到群里有小伙伴反应跟着这篇文章出现了这个异常com.ulisesbocchio.jasyptspringboot.exception.DecryptionException: Unable to decrypt。 具体完整的错误信息如下: Caused by: com.ulisesbocchio.jasyptspringboot.exception.DecryptionException: Unable to decrypt: ENC(/AL9nJENCYCh9Pfzdf2xLPsqOZ6HwNgQ3AnMybFAMeOM5GphZlOK6PxzozwtCm+Q). Decryption of Properties failed, make sure encryption/decryption...

在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用、随机数的应用、命令行参数的使用、多环境的配置管理等等。 这些配置相关的知识都是Spring Boot原生就提供的,而今天我们将介绍的功能并非Spring Boot原生就支持,但却非常有用:配置内容的加密。 为什么要加密?可能很多初学者,对于配置信息的加密并不敏感,因为开始主要接触本地的开发,对于很多安全问题并没有太多的考虑。而现实中,我们的配置文件中,其实包含着大量与安全相关的敏感信息,比如:数据库的账号密码、一些服务的密钥等。这些信息一旦泄露,对于企业的重要数据资产,那是相当危险的。 所以,对于这些配置文件中存在的敏感信息进行加密,是每个成熟开发团队都一定会去的事。 如果您是DD的老读者,也许马上会想到Spring Cloud Config就提供配置的加密功能,之前在我的...

除了最常用的关系数据库和缓存之外,之前我们已经介绍了在Spring Boot中如何配置和使用MongoDB、LDAP这些存储的案例。接下来,我们继续介绍另一种特殊的数据库:时序数据库InfluxDB在Spring Boot中的使用。 InfluxDB简介什么是时序数据库?全称为时间序列数据库。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。时间序列数据主要由电力行业、化工行业等各类型实时监测、检查与分析设备所采集、产生的数据,这些工业数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、严重依赖于采集时间(每一条数据均要求对应唯一的时间)、测点多信息量大(常规的实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)。虽然关系型数据库也可以存储基于时间序列的数据,但由于存储...

昨天,有群友反应根据之前这篇《使用Elastic Job实现定时任务》文章编写测试定时任务的时候,报了类似下面的这个错误: Caused by: org.apache.shardingsphere.elasticjob.infra.exception.JobConfigurationException: Job conflict with register center. The job 'my-simple-job' in register center's class is 'com.didispace.chapter72.MySimpleJob', your job class is 'com.didispace.chapter74.MySimpleJob' at org.apache.shardingsph...

美国时间7月22日Spring Boot 2.5.3版本发布,此版本包括58个错误修复、文档改进和依赖项升级。 新的功能 将 Java 17 添加到 JavaVersion 枚举#26769 Bug修复 尝试从未知数据源类型派生数据源时,DataSourceBuilder 抛出 UnsupportedDataSourcePropertyException #27453 DatabaseInitializerDetector 和 DependsOnDatabaseInitializationDetector 实现可能会使用错误的 ClassLoader 进行实例化#27422 YamlPropertySourceLoader 可能不会使用正确的 ClassLoader 来检查 SnakeYAML 是否存在#27419 将 Gson 设置为首选映射器会破坏返回 JSON 字符串的控制器...