All Stories
spring缓存自定义resolver
本文介绍spring中自定义缓存resolver,通过自定义resolver,可以在spring的cache注解中增加附加处理。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/main/spring-redis-resolver
In spring boot, Mar 13, 2022spring使用kafka的三种方式(listener、container、stream)
本文介绍spring中使用Kafka的三种方式,其中container方式最灵活,但是开发相对较复杂,stream方式使用最简便,listener方式由于提供的最早,使用的较普遍。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/main/spring-kafka
In spring boot, Oct 31, 2021springboot集成groovy脚本
在我们的应用中引入脚本能力,可以很好的提升灵活性,我们的核心开发工作可以集中在核心平台能力的开发上,具体场景的功能可以通过脚本来实现,例如jenkins就可以通过groovy脚本来编写pipeline,可以很灵活的定制构建过程。spring本身提供了groovy集成的机制,分为两种方式,一种是用groovy开发程序,跟用java开发类似,需要经过编译。一种是将gr...
In spring boot, May 05, 2021springboot单元测试技术
整个软件交付过程中,单元测试阶段是一个能够最早发现问题,并且可以重复回归问题的阶段,在单元测试阶段做的测试越充分,软件质量就越能得到保证。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/main/spring-unit-test
In spring boot, Apr 18, 2021spring自带线程池使用不当导致的死锁问题
Spring自带线程池使用很方便,不过在相对复杂的并发编程场景中,使用时还是需要根据使用场景仔细考虑配置,否则可能会遇到本文中提及的坑。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/main/spring-taskexecutor-block
In spring boot, Jan 10, 2021spring打印http接口请求和响应
在程序日志中打印出接口请求和响应的内容是一个基本的技术需求。如果在每个接口中实现请求响应的日志打印,程序编写会很繁琐,我们可以利用spring提供的机制,集中处理接口请求响应的日志打印。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/main/spring-rest-log-request-resp...
In spring boot, Nov 22, 2020spring动态数据源:只改配置即可接入新数据源
在实际的业务场景中,我们经常会遇到需要动态配置数据源的情况,只需要修改配置,就能增加新的数据源的接入,而不需要修改程序代码,通过动态数据源技术可以实现这个目标。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/main/spring-dynamic-datasource
In spring boot, Sep 16, 2020java并发编程:多线程、原子性与可见性
常用的java并发编程技术。具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/main/spring-currency
In spring boot, Apr 12, 2020Reactive编程(三):一个简单的HTTP服务
书接上文 Reactive编程 ,我们已经了解了基础的API,现在我们开始编写实际的应用。Reactive对并发编程进行了很好的抽象,也有很多底层的特性需要我们去关注。当使用这些特性时,我们可以对之前隐藏在容器、平台、框架中的细节进行控制。
In spring boot, Mar 25, 2018Reactive编程(二):代码演示
书接上文 Reactive编程 ,我们继续用真实的代码来解释一些概念。我们会更进一步理解Reactive的与众不同以及它的功能。这些例子很抽象,但能够让我们更进一步理解用到的API和编程风格,真实的感受它的与众不同。我们将会看到Reactive的核心元素,学习如何控制数据流,如果需要的话还会用到后台线程进行处理。
In spring boot, Mar 18, 2018