作者回复: 如果还有同学对多个数据源、读写分离、分库分表之类的问题感兴趣,请关注答疑课程的内容,我们做了些展开的讨论。
作者回复: 我没有用过AbstarctRoutingDataSource,看了下例子,它和我们这里说的多数据源还不太一样。打个比方,我的系统同时需要访问交易库和账务库,这时我需要配置两个数据源,它们里面的表也都不一样,SQL也都不同。而AbstarctRoutingDataSource的场景除了我讲到的,还有同时要访问交易00库和交易01库,它们的表应该也都是一样的,SQL啥的都是一样的,只是实际操作的库不一样。
作者回复: Bean简单来讲就是由Spring容器创建并托管的实例。
作者回复: 这两注解没关系,别放在一起看,@Bean是说我这个方法的返回值当做一个Bean。而@Resource是说我这个方法的参数要按照名字来注入其他的Bean。如果大家对这些注解有疑惑,我后续补充下。
作者回复: 发现大家对多数据源的理解都不太一样,我在后续答疑时统一展开聊聊这个话题吧。
作者回复: 如果自己做的话,简单的可以手工搞,但读写分离建议配合中间件或者框架来做,会更好一些,这个我后续展开聊聊吧。
作者回复: 我们并不是针对完全不懂任何东西的开发者的哈,是有前提的,如果基础知识不太清楚的话,前几课下面有些材料,可以先学习一下,再回来继续后面的课程。
作者回复: 你好,请见置顶回复
作者回复: 你理解的多数据源和想在这节里面讲的并不太一样,可以关注下我们的答疑课程
作者回复: 1. Spring自己会计算依赖关系,把依赖最底层的Bean先创建出来。至于你的第二个问题,注入和调用方法的效果是一样的,这里有些小小的黑魔法,Spring对这里的调用做了处理。官方文档里有这么一句话:All @Configuration classes are subclassed at startup-time with CGLIB. In the subclass, the child method checks the container first for any cached (scoped) beans before it calls the parent method and creates a new instance.
2. 因为你排除了SpringBoot的数据源自动配置,所以SpringBoot不会为你初始化Schema和Data,因此就没有你要的数据表。
作者回复: 看到你的留言后我去仔细看了下,JdbcTemplateAutoConfiguration在2.2.1版本下的确不用排除。但原因不是你说的那个注解,而是因为@ConditionalOnSingleCandidate,只有一个DataSource时才会执行,我们已经配置了两个DataSource了,所以不会执行该自动配置。
作者回复: 第5节是在讲如果要配置多个数据源该怎么办,SpringBoot的自动配置多数都是针对只有一个DataSource的,所以我在课程中提了,要么给主要的DataSource Bean增加@Primary注解,要么就把几个自动配置类排除掉。
作者回复: 我在其他同学的留言中解释过这个问题了,可以翻一下哈。的确不exclude的是可以的,但明确不使用的东西就从项目依赖中去掉,是个不错的习惯。
作者回复: 个人习惯,有可能搞混的地方加个注解。byType就一个也没问题,有几个同类型的byName加上更放心。
作者回复: 目前多数据源的事务,基本还得靠自己,用最终一致的方式来做,可以了解一下BASE、TCC这些概念
作者回复: 看情况,但既然各种Bean你都自己配置了,那把Spring的自动配置排除掉也没什么问题。如果你拿我们的例子来跑跑,不做排除,就会发现有多个DataSourceProperties会报错。