之前有同事引入了pig-cloud。
但是一些使用和配置的非常不友好,比如jackson,
2.jpg
图1
此配置是覆盖原始配置的,会导致jackson的很多默认加载项不加载,如果你明确知道原始配置做了哪些事情,你可以直接使用,但是很明显,jackson的推荐配置方式不是这样的,可以看JacksonAutoConfiguration下有个配置
1691753663256.jpg

该类配置目标同图1一致,但是他的依赖bean里有一个List customizers。
可以看到这是一个接口,那他的实现类有哪些呢
1691754084564.jpg

就在他的下方
1691754669827.jpg

这个配置里做了很多事情 ,包括对名为spring.jackson.*下的配置的加载,如果你使用图1的形式覆盖,就会导致这些配置失效。
那么应该如何配呢?很显然,跟标准实现做同样的事就行了
1691754818461.jpg

配置的加载是按ordered排序,从小到大,所以源码中的标准实现的ordered是0,只需要你的配置大于0,即可覆盖默认的配置。

再来说一下常见的加载,在标准实现里可以看到n多的默认模块加载。
1691755219906.jpg

我们常用的比如JavaTimeModule。
最常见的方式就是像图1中的配置,通过builder去设置,但是看源码就知道,这是一种覆盖式的设置,相当于你加了一个就只有这一个配置了,
image.png

但是很显然,spring更推荐通过bean注入的方式添加,在没有任何配置时,spring默认有如下module,即使我们不熟悉,也可以知道,spring是通过收集同类型的bean去注册的,所以只需要照本宣科就行
image.png

只需要增加一个配置
image.png

就可以在启动时看到,他被加载并注册到jackson的module了
image.png

所以实现Jackson2ObjectMapperBuilderCustomizer, Ordered的方式配置Jackson的各种配置,不仅方便于多模块项目,common模块写公共部分省配置,又可以通过设置高于公共模块的ordered来实现对公共模块的覆盖与自定义,非常优雅有木有!

所以下次别再写图1这样的配置了