Java HSQLDB和Liquibase,表已存在:DATABASECHANGELOGLOCK

Java HSQLDB和Liquibase,表已存在:DATABASECHANGELOGLOCK,java,maven,integration-testing,hsqldb,liquibase,Java,Maven,Integration Testing,Hsqldb,Liquibase,我试图用liquibase和HSQLDB实现单元测试。 一切正常。但由于某些原因,当liquibase尝试在数据库上应用更改日志时,我得到: 我无法理解为什么会发生这种事 上下文只引发一次。我看不到以前有人创建过这个表 HSQLDB也在内存中运行。所以有一个新的例子 有什么想法吗? 以下是我的上下文和maven插件配置: 马文: 阿维尼·莫霍神父 HSQLDBMaven插件 1.0.0 启动hsqldb 预集成测试 开始 停止hsqldb 整合后测试 停止 您正在运行哪个版本的liquiba

我试图用liquibase和HSQLDB实现单元测试。 一切正常。但由于某些原因,当liquibase尝试在数据库上应用更改日志时,我得到:

我无法理解为什么会发生这种事

上下文只引发一次。我看不到以前有人创建过这个表

HSQLDB也在内存中运行。所以有一个新的例子

有什么想法吗? 以下是我的上下文和maven插件配置:

马文:


阿维尼·莫霍神父
HSQLDBMaven插件
1.0.0
启动hsqldb
预集成测试
开始
停止hsqldb
整合后测试
停止

您正在运行哪个版本的liquibase?谢谢。我认为答案与您需要调用ChangeLogHistoryServiceFactory.getInstance().reset()的答案相同在你清理数据库的地方,我最终会检查出来,移动到嵌入式mysql实例进行集成测试。但我更喜欢较轻的版本。你在同一数据库上使用不同的变更日志文件(例如,不同文件夹中的副本)吗?
INFO 14:19 14/06/14:liquibase: Successfully acquired change log lock
INFO 14:19 14/06/14:liquibase: Creating database history table with name: PUBLIC.DATABASECHANGELOG
2014-06-14 14:19:03,923 [DEBUG] [NewPooledConnection,handleThrowable(),430] - com.mchange.v2.c3p0.impl.NewPooledConnection@281fb795 handling a throwable.
java.sql.SQLException: Table already exists: DATABASECHANGELOGLOCK in statement [CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK]
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.execute(Unknown Source)
at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:1006)
repository.connectionString = jdbc:hsqldb:mem:testdb
repository.driver = org.hsqldb.jdbcDriver
repository.username = SA
repository.password = 
repository.hibernate.dialect = org.hibernate.dialect.H2Dialect
repository.hibernate.showSQL = true
repository.hibernate.onStartup = verify



public com.mchange.v2.c3p0.ComboPooledDataSource dataSource() throws PropertyVetoException {
    com.mchange.v2.c3p0.ComboPooledDataSource ds = new ComboPooledDataSource();
    ds.setDriverClass(REPOSITORY_DRIVER);
    ds.setJdbcUrl(REPOSITORY_CONNTION_STRING);
    ds.setUser(REPOSITORY_USERNAME);
    ds.setPassword(REPOSITORY_PASSWORD);
    ds.setAcquireIncrement(5);
    ds.setIdleConnectionTestPeriod(60);
    ds.setMaxPoolSize(10);
    ds.setMaxStatements(50);
    ds.setMinPoolSize(5);
    return ds;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(LocalSessionFactoryBean annotationSessionFactoryBean) {
    return new HibernateTransactionManager(annotationSessionFactoryBean.getObject());
}
@Bean
@Autowired
public LocalSessionFactoryBean sessionFactory(ComboPooledDataSource dataSource) {
    LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
    localSessionFactoryBean.setDataSource(dataSource);
    localSessionFactoryBean.setPackagesToScan(new String[] { "X.Y.Z" });
    localSessionFactoryBean.setHibernateProperties(hibernateProperties());
    return localSessionFactoryBean;
}   
@Bean
@Autowired
public SpringLiquibase liquibae(ComboPooledDataSource dataSource){
    SpringLiquibase springLiquibase = new SpringLiquibase();
    springLiquibase.setDataSource(dataSource);
    springLiquibase.setContexts("dev,test");
    springLiquibase.setChangeLog("classpath:db/db.changelog-master.xml");   
    return springLiquibase;
}
private Properties hibernateProperties() {
    Properties hibernateProperties = new Properties();
    hibernateProperties.setProperty("dialect", REPOSITORY_HIBERNATE_DIALECT);
    hibernateProperties.setProperty("show_sql", REPOSITORY_HIBERNATE_SHOWSQL);
    hibernateProperties.setProperty("hibernate.hbm2ddl.auto", REPOSITORY_HIBERNATE_ONSTARTUP);
    return hibernateProperties;
}
 <plugin>
    <!-- current version -->
    <groupId>fr.avianey.mojo</groupId>
    <artifactId>hsqldb-maven-plugin</artifactId>
    <version>1.0.0</version>
    <!-- call start and stop -->
    <executions>
        <execution>
            <id>start-hsqldb</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>start</goal>
            </goals>
        </execution>
        <execution>
            <id>stop-hsqldb</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>stop</goal>
            </goals>
        </execution>
    </executions>
</plugin>