Spring ContentNegotiation(内容协商)之使用篇(一)

背景

随着业务系统的成熟,如果你的项目正好是公司的中台战略之一,但是下游系统的接收方式不统一,这一种情况在一些老的公司系统架构总经常出现,如果下游系统不方便兼容,那么就需要中台系统对外提供各种不同格式返回报文

内容协商

简单说就是服务提供方根据客户端所支持的格式来返回对应的报文,在 Spring 中,REST API 基本上都是以 json 格式进行返回,而如果需要一个接口即支持 json,又支持其他格式,开发和维护多套代码显然是不合理的,而 Spring 又恰好提供了该功能,那便是ContentNegotiation

在 Spring 中,决定一个数据是以 json、xml 还是 html 的方式返回有三种方式,分别如下:

阅读更多

Spring中AOP的探索与实践(一)之Redis多数据源切换

一般在项目的使用过程中,有时候为了减轻数据库的压力,从而将一部分数据缓存至Redis,但是随着业务量的增多。我们所需要的Redis服务器也会越来越多,就算不需要多个Redis数据源,那么在一个redis里面,切换不同的DB也是很麻烦的一件事情。

非AOP的一般的多数据源操作

在Redis的多数据源使用中,一般的方法是从配置文件中读取多个RedisProperties,读取到配置文件之后,将RedisProperties配置到RedisTemplate,然后每次使用的时候就通过不同的Template来调用Redis服务器。示例如下:

代码示例

Redis的配置类

阅读更多

Springboot中使用Mysql多数据源

随着业务的发展,很可能需要在一个项目里面同时使用多个数据源。

大致看了网上的多数据源Demo,发现无非有两种:

一种是自己封装多个JdbcTemplate,然后调用对应的数据库就使用对应的JdbcTemplate

一种是通过注解的方式来实现,在需要切换数据源的方法上添加一个自己封装的注解便可以完成切换。

考虑了一下以后的扩展性和通用性,便决定采用基于注解的多数据源方式

阅读更多

SpringBoot中在一个事物中更新多表的注意事项

现象:

具体表现为数据被update之后,在同一个事物里面再次查询,查询的是一个更新之后的值。

复现步骤

更新一个商品的信息,其步骤如下:

  1. 更新商品表的一些数据
  2. 在进展表中新加入一条申请
  3. 在操作日志表中新增各种变更的操作(记录变更之前的值,变更之后的值)
阅读更多
an class="level-item tag">3
  • 设计模式2
  • 问题排查1
  • 阿里云1