Posts by qihaiyan

Spring RestTempate 打印请求和响应内容日志

系统中经常需要调用第三方接口实现业务功能,为了方便调试和定位问题,我们通常需要将接口调用参数和返回结果打印到日志文件中。在Spring项目中一般会用RestTemplate来调用第三方接口。通过在RestTemplate调用过程中统一打印日志,可以保持代码的整洁,也可以统一日志格式,比在业务逻辑中到处打印接口调用日志要方便的多。

In spring boot, May 03, 2023

简易规则引擎 easy-rules

合理的使用规则引擎可以极大的减少代码复杂度,提升代码可维护性。业界知名的开源规则引擎有Drools,功能丰富,但也比较庞大。在一些简单的场景中,我们只需要简易的规则引擎就能满足要求。本文介绍一个小巧的规则引擎 easy-rules,作为一个lib库提供,支持spring的SPEL表达式,可以很好的集成在spring项目中。

In spring boot, Mar 26, 2023

SpringCloudGateway 动态转发后端服务

API网关的核心功能是统一流量入口,实现路由转发,SpringCloudGateway是API网关开发的技术之一,此外比较流行的还有Kong和ApiSix,这2个都是基于OpenResty技术栈。简单的路由转发可以通过SpringCloudGateway的配置文件实现,在一些业务场景种,会需要动态替换路由配置中的后端服务地址,单纯靠配置文件无法满足这种需求。本文介...

In spring boot, Feb 19, 2023

Spring Boot 3的AOT(GraalVM Native Image)应用开发

GraalVM Native Images是一个利用AOT(Ahead-of-Time)技术把java程序直接编译成可执行程序的编译工具,编译出来的程序在运行时不再依赖JRE,同时启动速度快,资源消耗低,这对传统java程序来说都是极大的优势。同时云原生应用来说,GraalVM Native Images编译生成的程序体积很小,非常适合云原生环境,目前由于传统ja...

In spring boot, Nov 26, 2022

ElasticSearch新版JavaClient使用简介

ElasticSearch在7.17版本之前使用的java客户端是Java REST Client,但是从7.17版本开始,官方将Java REST Client标记为弃用(deprecated),推荐使用新版Java Client。本文介绍新版ElasticSearch Java Client的基本用法。具体的代码参照 示例项目 https://github.c...

In spring boot, Apr 17, 2022

spring-rest接口LocalDateTime转时间戳

本文介绍spring-rest接口中的LocalDateTime日期类型转时间戳的方法。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-localdatetime-epoch

In spring boot, Apr 04, 2022

spring缓存自定义resolver

本文介绍spring中自定义缓存resolver,通过自定义resolver,可以在spring的cache注解中增加附加处理。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-redis-resolver

In spring boot, Mar 13, 2022

spring使用kafka的三种方式(listener、container、stream)

本文介绍spring中使用Kafka的三种方式,其中container方式最灵活,但是开发相对较复杂,stream方式使用最简便,listener方式由于提供的最早,使用的较普遍。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-kafka

In spring boot, Oct 31, 2021

springboot集成groovy脚本

在我们的应用中引入脚本能力,可以很好的提升灵活性,我们的核心开发工作可以集中在核心平台能力的开发上,具体场景的功能可以通过脚本来实现,例如jenkins就可以通过groovy脚本来编写pipeline,可以很灵活的定制构建过程。spring本身提供了groovy集成的机制,分为两种方式,一种是用groovy开发程序,跟用java开发类似,需要经过编译。一种是将gr...

In spring boot, May 05, 2021

springboot单元测试技术

整个软件交付过程中,单元测试阶段是一个能够最早发现问题,并且可以重复回归问题的阶段,在单元测试阶段做的测试越充分,软件质量就越能得到保证。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-unit-test

In spring boot, Apr 18, 2021

spring自带线程池使用不当导致的死锁问题

Spring自带线程池使用很方便,不过在相对复杂的并发编程场景中,使用时还是需要根据使用场景仔细考虑配置,否则可能会遇到本文中提及的坑。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-taskexecutor-block

In spring boot, Jan 10, 2021

spring打印http接口请求和响应

在程序日志中打印出接口请求和响应的内容是一个基本的技术需求。如果在每个接口中实现请求响应的日志打印,程序编写会很繁琐,我们可以利用spring提供的机制,集中处理接口请求响应的日志打印。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-rest-log-request-re...

In spring boot, Nov 22, 2020

spring动态数据源

在实际的业务场景中,我们经常会遇到需要动态配置数据源的情况,只需要修改配置,就能增加新的数据源的接入,而不需要修改程序代码,通过动态数据源技术可以实现这个目标。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-dynamic-datasource

In spring boot, Sep 16, 2020

java并发编程

常用的java并发编程技术。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-currency

In spring boot, Apr 12, 2020

Reactive编程(三):一个简单的HTTP服务

书接上文 Reactive编程 ,我们已经了解了基础的API,现在我们开始编写实际的应用。Reactive对并发编程进行了很好的抽象,也有很多底层的特性需要我们去关注。当使用这些特性时,我们可以对之前隐藏在容器、平台、框架中的细节进行控制。

In spring boot, Mar 25, 2018

Reactive编程(二):代码演示

书接上文 Reactive编程 ,我们继续用真实的代码来解释一些概念。我们会更进一步理解Reactive的与众不同以及它的功能。这些例子很抽象,但能够让我们更进一步理解用到的API和编程风格,真实的感受它的与众不同。我们将会看到Reactive的核心元素,学习如何控制数据流,如果需要的话还会用到后台线程进行处理。

In spring boot, Mar 18, 2018

Reactive编程(一):Reactive编程的背景

Reactive编程很有趣,现在也有各种各样的讨论,概念上不是很容易理解。本文会以具体的形式介绍相关的概念。Reactive编程跟并发和高性能在概念上有一些重合,但在原理上完全不同。Reactive编程跟函数式编程是非常类似的。一些人认为Reactive编程并不是什么新概念,他们在日常工作中经常使用(例如javascript)。另一些人认为这是微软做出的新发明(R...

In spring boot, Mar 04, 2018

SpringBoot项目中使用AOP

1.概述

In spring boot, Feb 18, 2018

如何避免java程序内存泄漏

虽然jvm有垃圾回收机制,如果程序编写不注意某些特定规则,仍然会导致java程序内存泄漏,最终可能出现OutOfMemory异常。

In java, Jan 27, 2018

程序常驻后台运行的原理和方法

linux中进程组织结构为session包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。

In linux, Jun 11, 2017

OAuth 2.0 教程

(原文:/oauth2/index.html)

In oauth2, Jun 11, 2017

SpringBoot应用基于docker和EFK的日志处理

1.概述在分布式集群环境下,单个节点的日志内容往往都是存放在自己的节点上,这种独立分散的日志存储方式会有很多问题。我们需要一个统一的日志处理中心,对日志进行收集和集中存储,并进行查看和分析。The Twelve-Factor App中有关于日志处理的建议。

In spring boot, Jun 02, 2017