本文主要阐述用dynamic-datasource-spring-boot-starter配置多数据源时,按需动态初始化数据库or按需加载数据源的问题处理。
背景:有个做数据处理的组件,数据来源是某几个数据库,这时候可用dynamic-datasource-spring-boot-starter做多数据源配置(具体配置不细述,可见官方文档:https://github.com/baomidou/dynamic-datasource-spring-boot-starter)使用。
场景一:
当数据来源的几个数据库(DB),并不是每个都是必需的情况;比如存在源数据库A、B、C,只需要其中一个库能提供数据即可,但是我们不知道具体哪个数据库是可达的。
这种情况下,你会发现一个问题:当你所配置的多个数据源里面,只要有1个数据源无法访问,整个程序在启动时就会报错终止,不再运行。
那么怎么处理,能让当某个数据库连不上时,只影响该数据源本身,而不是终止程序?
最简单的方式是懒启动(3.3.2版本后支持),配置:spring.datasource.dynamic.lazy=true后,只有需要用到连接的时候才初始化连接池。当然有一定影响:如果使用了有问题的源会一直抛异常。不过也能满足这种场景。
场景二:
当数据来源不仅仅是DB,可能是KAFKA等消息组件、接口获取、FTP等等(DB只是其中一种方式)。
这种情况下,你会发现另一个问