为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 springboot 和 liquibase 在内存数据库中

如何使用 springboot 和 liquibase 在内存数据库中

慕婉清6462132 2022-07-06 15:55:02
使用 liquibase 和 springboot ,创建了数据库更改日志并能够使用 maven-liquibase-plugin (mvn liquibase:update) 成功运行它。我正在编写集成测试,其中需要以编程方式创建 liquibase 更改。@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = DummyApplication.class)@ActiveProfiles("test")public class TestDummyService{    @Autowired    private SpringLiquibase springLiquibase;    ...    @Test    public void testDummyRequest()    {    try {        Connection connection = springLiquibase.getDataSource().getConnection();        Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));        Liquibase liquibase = new liquibase.Liquibase("liquibase/changelog/db-changelog-master.xml", new ClassLoaderResourceAccessor(), database);        liquibase.update(new Contexts(springLiquibase.getContexts()), new LabelExpression(springLiquibase.getLabels()));    } catch (LiquibaseException | SQLException e) {        e.printStackTrace();    }}运行上述测试时出现以下异常。java.lang.IllegalStateException:无法在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext 加载 ApplicationContext(DefaultCacheAwareContextLoaderDelegate.java:125)原因:org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class] 中定义名称为“liquibase”的 bean 创建错误:通过工厂方法进行 Bean 实例化失败; 嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [liquibase.integration.spring.SpringLiquibase]:工厂方法“liquibase”抛出异常;嵌套异常是 java.lang.NoSuchMethodError: liquibase.integration.spring.SpringLiquibase.setLiquibaseSchema(Ljava/lang/String;)V引起:java.lang.NoSuchMethodError: liquibase.integration.spring.SpringLiquibase.setLiquibaseSchema(Ljava/lang/String;)
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

Spring Boot 2.1.3 依赖于 Liquibase 3.6.3,但您在 pom.xml 中指定了 3.4.2。

话虽如此,Spring Boot 的 Liquibase 自动配置将完成您在单元测试中编写的所有内容,因为您已经创建了属性来激活自动配置。您可以删除测试方法中的所有代码,而只需将 @Autowire 一个 DataSource 放入测试类。Spring 将为您应用 Liquibase 更改日志。

最后一件事:如果可以,最好将 a 添加<parent>到您的 pom.xml 中,这意味着您不需要指定每个依赖项(包括 Liquibase)的各个版本。Spring Boot 有很多依赖项,并且在升级时保持版本同步需要做很多工作。这也会阻止您的 NoSuchMethodError。


查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信