在运行时用 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 替换图像吗