在运行时用 H2 DataSource 替换 DataSource bean

Posted

技术标签:

【中文标题】在运行时用 H2 DataSource 替换 DataSource bean【英文标题】:Replace DataSource bean with H2 DataSource at runtime 【发布时间】:2016-09-11 11:40:04 【问题描述】:

我正在开发一个测试框架。

当某些用例需要 H2 时,我想将 mysql DataSource bean 替换为 H2(未在 XML 中配置为 bean)。

一些用例仍然使用 MySQL,所以我不能直接修改 DataSource bean 配置。 Spring XML配置文件中只需要配置一个DataSource(没有配置H2DataSource)。

有没有办法在运行时替换sqlmapclient(ibatis)中的DataSource bean?

【问题讨论】:

您是否考虑过简单地配置 Spring 对 bean 定义配置文件 的支持并在您的测试类中使用 @ActiveProfiles hI @SamBrannen,这很好,但是每个项目都应该做一些更改来添加配置文件配置。我希望其他人使用我的测试框架零变化。 :) 【参考方案1】:

一种选择是在您的测试类中使用 Spring 对 bean 定义配置文件@ActiveProfiles 的支持。

但是,如果您不愿意或不能这样做,另一种选择是实现自定义 BeanFactoryPostProcessor替换 MySQL DataSource 的 bean 定义为H2DataSource。请记住,如果您走这条路,您仍然需要条件逻辑(在您的BeanFactoryPostProcessor 中)来决定是否替换 MySQL DataSource bean 定义。

【讨论】:

我可以使用 BeanFactoryPostProcessor 来替换 junit 中的数据源。所以项目不需要做任何事情。非常感谢。:D

以上是关于在运行时用 H2 DataSource 替换 DataSource bean的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在容器运行时用 docker-compose 替换图像吗

H2 DB 运行脚本错误

h2使用

Spring Boot 2.x 之 H2 数据库

H2 DB的Spring Boot两个Datasource配置创建表和插入数据失败

idea 中 springBoot 集成 h2 轻量级内存数据库