我正在尝试将占位符与 flyway 测试扩展 1.7.0 一起使用。我在 flyway.properties 中定义了一个占位符:
flyway.placeholders.schema_name=MYSCHEMA
我的 sql 脚本如下所示:
create schema ${schema_name};
运行 flyway 测试时,我收到以下错误:
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 文件已成功加载(我也将它用于其他值,例如 jdbc url)。
有人知道这里可能是什么问题吗?
EDIT1看起来 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>
但我们仍在寻找更好的解决方案......