Liquibase:不支持H2的架构名称,但是MySQL可以 [英] Liquibase: Does not honor schema name for H2, but MySQL is fine

查看:108
本文介绍了Liquibase:不支持H2的架构名称,但是MySQL可以的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  • 我正在使用maven cargo部署我的Spring应用程序.
  • 我正在尝试针对MySQLH2嵌入式数据库运行它.
    H2的配置类似于
  • I am using maven cargo to deploy my Spring application.
  • I am trying to run this against MySQL and H2 embedded database.
    The configuration for H2 looks like
@Configuration
@Profile("development")
public class H2DatabaseConfig extends JpaCommonConfig {
    @Override
    public DataSource dataSource() {
        // (todo: harit) get rid of hard coding
        System.out.println("This is H2 Database Profile");
        final BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:mem:test_common");
        dataSource.setUsername("sa");
        dataSource.setPassword("");
        return dataSource;
    }

    @Override
    protected Class<? extends Dialect> getDatabaseDialect() {
        return H2Dialect.class;
    }

    @Override
    protected Properties getJpaProperties() {
        final Properties properties = new Properties();
        properties.setProperty(HBM2DDL_AUTO, Hbm2ddlType.CREATE_DROP.toValue());
        properties.setProperty(SHOW_SQL, TRUE.toString());
        properties.setProperty(FORMAT_SQL, TRUE.toString());
        properties.setProperty(USE_SQL_COMMENTS, TRUE.toString());
        properties.setProperty(CONNECTION_CHAR_SET, getHibernateCharSet());
        properties.setProperty(NAMING_STRATEGY, ImprovedNamingStrategy.class.getName());

        return properties;
    }
}

,对于MySQL,它看起来像

@Configuration
@Profile("default")
public class MySqlDatabaseConfig extends JpaCommonConfig {
    @Override
    public DataSource dataSource() {
        // (todo: harit) remove hardcoding to read from environment variables
        System.out.println("This is MySQL Database Profile");
        final BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test_common?createDatabaseIfNotExist=true");
        dataSource.setUsername("root");
        return dataSource;
    }

    @Override
    protected Class<? extends Dialect> getDatabaseDialect() {
        return MySQL5InnoDBDialect.class;
    }

    @Override
    protected Properties getJpaProperties() {
        final Properties properties = new Properties();
        properties.setProperty(HBM2DDL_AUTO, Hbm2ddlType.UPDATE.toValue());
        properties.setProperty(SHOW_SQL, TRUE.toString());
        properties.setProperty(FORMAT_SQL, TRUE.toString());
        properties.setProperty(USE_SQL_COMMENTS, TRUE.toString());
        properties.setProperty(CONNECTION_CHAR_SET, getHibernateCharSet());
        properties.setProperty(NAMING_STRATEGY, ImprovedNamingStrategy.class.getName());
        return properties;
    }
}

当我使用货物运行集成测试时,我看到两个区别,

When I run Integration tests using cargo, I see two differences,

  1. 针对MySQL运行时,在运行Liquibase时要注意架构名称,我会看到 test_common
  1. When ran against MySQL the schema name is taken care when Liquibase runs, I see test_common

INFO 5/26/14 9:18 AM:liquibase: Successfully acquired change log lock
INFO 5/26/14 9:18 AM:liquibase: Dropping Database Objects in schema: test_common.test_common
INFO 5/26/14 9:18 AM:liquibase: Creating database history table with name: test_common.DATABASECHANGELOG
INFO 5/26/14 9:18 AM:liquibase: Successfully released change log lock
INFO 5/26/14 9:18 AM:liquibase: Successfully acquired change log lock
INFO 5/26/14 9:18 AM:liquibase: Reading from test_common.DATABASECHANGELOG
INFO 5/26/14 9:18 AM:liquibase: Reading from test_common.DATABASECHANGELOG
INFO 5/26/14 9:18 AM:liquibase: Reading from test_common.DATABASECHANGELOG
INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: Reading from

test_common.DATABASECHANGELOG INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-1.xml :: 05192014.1525 :: h2:已创建表网络 INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-1.xml :: 05192014.1525 :: h2:ChangeSet liquibase/2014/1-1.xml :: 05192014.1525 :: h2在8毫秒内成功运行 INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-1.xml :: 05192014.1525 :: h2:从中读取 test_common.DATABASECHANGELOG INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:从中读取 test_common.DATABASECHANGELOG INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:ChangeSet liquibase/2014/1-2.xml :: 05192014.1525 :: h2在6毫秒内成功运行 INFO 5/26/14 9:18 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:从中读取 test_common.DATABASECHANGELOG INFO 5/26/14 9:18 AM:liquibase:成功释放更改日志锁定

test_common.DATABASECHANGELOG INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: Table network created INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: ChangeSet liquibase/2014/1-1.xml::05192014.1525::h2 ran successfully in 8ms INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: Reading from test_common.DATABASECHANGELOG INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: Reading from test_common.DATABASECHANGELOG INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: ChangeSet liquibase/2014/1-2.xml::05192014.1525::h2 ran successfully in 6ms INFO 5/26/14 9:18 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: Reading from test_common.DATABASECHANGELOG INFO 5/26/14 9:18 AM:liquibase: Successfully released change log lock

  1. 针对H2运行时,它适用于 PUBLIC 模式,而适用于 test_common
  1. When ran against H2, It applies on PUBLIC schema and not on test_common

INFO 5/26/14 9:45 AM:liquibase: Successfully acquired change log lock
INFO 5/26/14 9:45 AM:liquibase: Dropping Database Objects in schema: TEST_COMMON.PUBLIC
INFO 5/26/14 9:45 AM:liquibase: Creating database history table with name: PUBLIC.DATABASECHANGELOG
INFO 5/26/14 9:45 AM:liquibase: Creating database history table with name: PUBLIC.DATABASECHANGELOG
INFO 5/26/14 9:45 AM:liquibase: Successfully released change log lock
INFO 5/26/14 9:45 AM:liquibase: Successfully acquired change log lock
INFO 5/26/14 9:45 AM:liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 5/26/14 9:45 AM:liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 5/26/14 9:45 AM:liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: Reading from

PUBLIC.DATABASECHANGELOG INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-1.xml :: 05192014.1525 :: h2:已创建表网络 INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-1.xml :: 05192014.1525 :: h2:ChangeSet liquibase/2014/1-1.xml :: 05192014.1525 :: h2在5毫秒内成功运行 INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-1.xml :: 05192014.1525 :: h2:从中读取 PUBLIC.DATABASECHANGELOG INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:从中读取 PUBLIC.DATABASECHANGELOG INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:将新行插入 网络 INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:ChangeSet liquibase/2014/1-2.xml :: 05192014.1525 :: h2在5毫秒内成功运行 INFO 5/26/14 9:45 AM:liquibase:liquibase/changelog.xml:liquibase/2014/1-2.xml :: 05192014.1525 :: h2:从中读取 PUBLIC.DATABASECHANGELOG INFO 5/26/14 9:45 AM:liquibase:成功释放更改日志锁定

PUBLIC.DATABASECHANGELOG INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: Table network created INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: ChangeSet liquibase/2014/1-1.xml::05192014.1525::h2 ran successfully in 5ms INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: Reading from PUBLIC.DATABASECHANGELOG INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: Reading from PUBLIC.DATABASECHANGELOG INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: ChangeSet liquibase/2014/1-2.xml::05192014.1525::h2 ran successfully in 5ms INFO 5/26/14 9:45 AM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: Reading from PUBLIC.DATABASECHANGELOG INFO 5/26/14 9:45 AM:liquibase: Successfully released change log lock

这是怎么回事?

推荐答案

Liquibase尝试处理方案"和目录",其中目录是可能包含或不包含模式的最顶层容器.对于像MySQL这样的仅具有一组对象分组的数据库,目录"和模式"是可互换的.对于H2,您既可以具有目录/数据库,也可以具有数据库中的模式.您的h2设置使用的是test_common数据库,但是该数据库中的默认PUBLIC模式.

Liquibase tries to handle both "schemas" and "catalogs" where the catalog is the top most container which may or may not contain schemas. For databases like MySQL which have just one level of object groupings, "catalog" and "schema" are interchangeable. For H2, you can have both the catalog/database and also schemas within the database. Your h2 setup is using the test_common database, but the default PUBLIC schema within that database.

如果要将Liquibase配置为使用非默认H2模式,请使用"defaultSchema" SpringLiquibase配置属性.

If you are wanting to configure Liquibase to use a non-default H2 schema, use the "defaultSchema" SpringLiquibase configuration property.

这篇关于Liquibase:不支持H2的架构名称,但是MySQL可以的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆