Liquibase: не учитывает имя схемы для H2, но MySQL в порядке

  • Я использую maven cargo для развертывания своего Spring приложения.
  • Я пытаюсь запустить это для MySQL и H2 встроенной базы данных.
    Конфигурация для H2 выглядит так
@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;
    }
}

Когда я запускаю интеграционные тесты с использованием Cargo, я вижу два отличия:

  1. При запуске с MySQL имя схемы учитывается при запуске Liquibase, я вижу 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 26.05.14 9:18 AM: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-1.xml :: 05192014.1525 :: h2: Сеть таблиц создана INFO 26.05.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 26.05.14 9:18 AM: Liquibase: Liquibase /changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2: Чтение из test_common.DATABASECHANGELOG INFO 26.05.14 9:18 AM: Liquibase: Liquibase / changelog.xml: Liquibase / 2014/1 -2.xml :: 05192014.1525 :: h2: Новая строка вставлена ​​в сеть INFO 26.05.14, 9:18: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2 : Новая строка вставлена ​​в сеть INFO 26.05.14, 9:18: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1- 2.xml :: 05192014.1525 :: h2: Новая строка вставлена ​​в сеть INFO 26.05.14, 9:18: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2: Новая строка вставлена ​​в сеть INFO 26.05.14, 9:18: 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 26.05.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 26.05.14, 9:18 : Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2: Чтение из test_common.DATABASECHANGELOG INFO 26.05.14 9:18 AM: Liquibase: Успешно снята блокировка журнала изменений

  1. При работе с H2 он применяется к схеме PUBLIC, а не к 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 26.05.14 9:45: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-1.xml :: 05192014.1525 :: h2: Сеть таблиц создана ИНФОРМАЦИЯ 26.05.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: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-1.xml :: 05192014.1525 :: h2: Чтение из PUBLIC.DATABASECHANGELOG INFO 26.05.14 9:45: Liquibase: Liquibase /changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2: Чтение из PUBLIC.DATABASECHANGELOG INFO 26.05.14 9:45: Liquibase: Liquibase / changelog.xml: Liquibase / 2014/1 -2.xml :: 05192014.1525 :: h2: Новая строка вставлена ​​в сеть INFO 26.05.14, 9:45: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2 : Новая строка вставлена ​​в сеть INFO 26.05.14, 9:45: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014 .1525 :: h2: Новая строка вставлена ​​в сеть INFO 26.05.14, 9:45: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2: Новая строка вставлена ​​в ИНФОРМАЦИЯ о сети 26.05.14 9:45: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2: Новая строка вставлена ​​в сеть INFO 26.05.14 9:45 AM: Liquibase: Liquibase / changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2: Новая строка вставлена ​​в сеть INFO 26.05.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 мс ИНФОРМАЦИЯ 26.05.14 9:45: Liquibase: Liquibase /changelog.xml: Liquibase / 2014 / 1-2.xml :: 05192014.1525 :: h2: Чтение из PUBLIC.DATABASECHANGELOG INFO 26.05.14 9:45 AM: Liquibase: Успешно снята блокировка журнала изменений

Что здесь не так?


person daydreamer    schedule 26.05.2014    source источник


Ответы (1)


Liquibase пытается обрабатывать как «схемы», так и «каталоги», где каталог является самым верхним контейнером, который может содержать или не содержать схемы. Для баз данных, таких как MySQL, которые имеют только один уровень группировки объектов, «каталог» и «схема» взаимозаменяемы. Для H2 у вас может быть как каталог / база данных, так и схемы в базе данных. В вашей настройке h2 используется база данных test_common, но стандартная схема PUBLIC в этой базе данных.

Если вы хотите настроить Liquibase для использования нестандартной схемы H2, используйте свойство конфигурации SpringLiquibase «defaultSchema».

person Nathan Voxland    schedule 02.06.2014