我有一个应用程序,我想定义两个数据源,一个用于读取,一个用于写入:
# Master Database
spring.datasource.url= jdbc:mysql://mysite.com/mydb
spring.datasource.username=user
spring.datasource.password=pass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# Replica Database
spring.read.datasource.url= jdbc:mysql://mysite1.com/mydb
spring.read.datasource.username=user
spring.read.datasource.password=pass
spring.read.datasource.driver-class-name=com.mysql.jdbc.Driver
我已经定义了两个数据源/实体经理/事务管理器
但是使用spring数据只会为一个存储库选择一个(?) 我知道我可以隔离实体并重新发布并配置不同的ems以使用不同的包(repos / entities)。
我可以为同一个回购使用不同的ems吗? 比如说,通过在一个方法上执行@Transactional(value =“readTransactionManager”) @Transactional在第二个?
结论:我可以配置为春天为同一个实体使用多个数据源吗?
感谢任何帮助。我可能会问一个愚蠢的问题。
答案 0 :(得分:0)
Can I use different ems for same repo ?
- 不,你不能。您可以使用数据库集群,在这种情况下,您可以在一个集群中连接,一个数据库服务器负责读取(通常是从服务器),另一个数据库服务器负责写入(通常是主服务器)。您不应该知道要在群集模式下连接哪个服务器。虽然对于大量使用似乎有点慢。或者,您可以使用多个EMS
来表示不同的数据源 - I know I can segregate the entities and repos and configure different ems to work with different packages (repos/entities)
。
请参阅@skaffman在链接中所说的评论, Spring multiple @Transactional datasources