Замена заполнителя не работает с расширениями пролетного пути

Я пытаюсь использовать заполнители с расширением пролетного пути 1.7.0. Я определил заполнитель в flyway.properties:

  flyway.placeholders.schema_name=MYSCHEMA

Мой sql-скрипт выглядит так:

  create schema ${schema_name};

При запуске теста пролетного пути я получаю следующую ошибку:

117157 [main] DEBUG com.googlecode.flyway.core.migration.sql.SqlScript  - Found statement at line 1: create schema ${schema_name};
117157 [main] DEBUG com.googlecode.flyway.core.migration.sql.SqlStatement  - Executing SQL: create schema ${schema_name}
117157 [main] ERROR com.googlecode.flyway.core.migration.DbMigrator  - com.googlecode.flyway.core.exception.FlywayException: Error executing statement at line 1: create schema ${schema_name}
117158 [main] ERROR com.googlecode.flyway.core.migration.DbMigrator  - Caused by org.hsqldb.HsqlException: Unknown JDBC escape sequence: {: {schema_name}
117158 [main] DEBUG com.googlecode.flyway.core.migration.DbMigrator  - Finished migrating to version 1.1 (execution time 00:00.005s)

Похоже, замена заполнителя не работает. Кстати, мой файл flyway.properties успешно загружен (я использую его и для других значений, таких как URL-адрес jdbc).

Кто-нибудь знает, в чем может быть проблема?

EDIT1 Похоже, что метод configure в классе Flyway не вызывается. Надо ли что-то добавлять в контекст приложения?

EDIT2 Одно из найденных нами решений - установить заполнители в контексте приложения:

<bean id="flyway" class="com.googlecode.flyway.core.Flyway"
    depends-on="dataSourceRef">
    <property name="dataSource" ref="dataSourceRef" />
    <property name="placeholders" >
      <map>
        <entry key="schema_name" value="${flyway.placeholders.schema_name}" />
     </map> 
    </property>
</bean>

Но мы все еще ищем лучшее решение ...


person Christian    schedule 11.10.2012    source источник


Ответы (1)


Извините за столь поздний ответ. Я сегодня впервые увидел ваш вопрос.

Я принял вашу проблему, см. Также http://code.google.com/p/flyway-test-extensions/issues/detail?id=14.

Реализация по умолчанию и пример не показывают, как она может работать, или дают достаточно утилит для ее решения.

Решение может быть выполнено только с помощью пружинной части, в зависимости от реализации расширений flyway-test.

а.) Первая часть решения

Это не полное решение, потому что замена flyway.placeholder. будет выполняться внутри Flyway методом configure, который мы не можем вызвать.

Put following in your application context:

<!-- also need this as additional include part  -->

xmlns:util="http : //www.springframework.org/schema/util"
xsi:schemaLocation="
    http: // www.springframework.org/schema/util 
    http: // www.springframework.org/schema/util/spring-util-3.0.xsd

and

<!-- flyway part -->
<util:properties id="flyway.prop" location="/flyway.properties"/>

<bean id="flyway" class="com.googlecode.flyway.core.Flyway" depends-on="dataSourceRef">
    <property name="dataSource" ref="dataSourceRef"/>
    <property name="placeholders" ref="flyway.prop"/>
</bean>

Но чем в вашем файле flyway.properties, вы должны удалить flyway.placeholder. из определения свойства. Думаю, что искомое неполное решение.

б.) Вторая часть

ИЗМЕНИТЬ

Лучшее решение - использовать регистрацию из текущей разработки расширения flyway-test. (http://code.google.com/p/flyway-test-extensions/source/detail?r=921f44bb206527db88f4b59faaf7ea968a743233)

  • FlywayHelperFactory.java как заводская реализация Flyway. Поместите это как часть ваших тестовых исходников.
    Это также должно работать для версии 1.7.
  • flywayPropertiesContext.xml как новый контекст приложения. Поместите это как test / resources в каталог с именем context.
    Он содержит два примера решения, как можно загрузить flyway.properties.
    Примечание:
    В этом контексте не используется переменная jdbc.properties, вместо этого используются свойства flyway!
    Этот контекст также должен работать вместе с flyway-test-extension 1.7.0
  • измените настройки теста и используйте @ContextConfiguration(locationsForMirgation = { "/context/flywayPropertiesContext.xml" }) в качестве новой конфигурации.

Флорианец

person Florian E.    schedule 30.03.2013