我正在寻找一些非常好的例子,它们可以启发我如何设置我的集成测试,给出一个使用Testcontainers、mariadb、shardingsphere和flyway的设置。
如果需要3个分片,我假设需要初始化3个不同的数据源,每个分片对应一个数据源,如下所示
spring:
config:
activate:
on-profile: test
shardingsphere:
datasource:
names: test-api-1, test-api-2, test-api-3,
test-api-1:
type: org.apache.commons.dbcp2.BasicDataSource
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
url: jdbc:tc:mariadb:10.6.7:///
validationQuery: /* ping */ select 1
name: testapi01
username: root
password: root1234
test-api-2:
type: org.apache.commons.dbcp2.BasicDataSource
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
url: jdbc:tc:mariadb:10.6.7:///
validationQuery: /* ping */ select 1
name: testapi02
username: root
password: root1234
test-api-3:
type: org.apache.commons.dbcp2.BasicDataSource
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
url: jdbc:tc:mariadb:10.6.7:///
validationQuery: /* ping */ select 1
name: testapi03
username: root
password: root1234
我想不出的是如何正确地配置flyway。所以,底线是,我正在寻找一对夫妇的好的实际例子,可以指出我在正确的方向。也随时纠正我,如果我以上的假设是错误的。
到目前为止,我们一直在运行基于单个数据源的集成测试,因为主要的重点是测试数据库迁移之类的生产环境。但是,由于我们正在尝试改变我们的分片选择,我们也需要测试多个分片。
1条答案
按热度按时间axr492tv1#
其实有两种方法
首先,如果你在flyway中使用shardingsphere-jdbc,可以分别配置它们。这意味着你在这里使用3个DB进行分片,需要告诉flyway所有这些3个DB和所有分片的实际表。注意,这种方式会导致漂移问题,因为shardingsphere-jdbc无法感知flyway的变化。
其次,使用shardingsphere-proxy进行分片和flyway迁移。因为shardingsphere-proxy与shardingsphere-jdbc共享相同的功能,并且作为
database server
工作。因此,您可以使用Shardingsphere-proxy [1]创建一个包含许多逻辑分片表的逻辑分片数据库。然后使用此逻辑数据库和分片表通知flyway、用户名和密码进行迁移。[1][https://shardingsphere.apache.org/document/5.2.1/en/user-manual/shardingsphere-proxy/startup/](https://shardingsphere.apache.org/document/5.2.1/en/user-manual/shardingsphere-proxy/startup/)