2012-10-11 83 views
0

我正在嘗試使用flyway test extension 1.7.0的佔位符。 我定義在flyway.properties的佔位符:Placeholder replacement not working with flyway test extensions

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文件已成功加載(我也用它作爲jdbc url等其他值)。

有人知道這裏可能是什麼問題嗎?

EDIT1它看起來像Flyway類中的configure方法沒有被調用。我必須添加一些東西到應用程序上下文嗎?

EDIT2一個解決方案,我們發現是設置佔位符中的ApplicationContext:

<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> 

但我們仍在尋找更好的解決辦法...

回答

0

遺憾的回答晚了。我今天第一次看到你的問題。

我接受了您的問題,另請參閱http://code.google.com/p/flyway-test-extensions/issues/detail?id=14

默認實現和示例不顯示它如何工作或提供足夠的實用程序來解決它。

該解決方案只能用spring部分來完成,取決於flyway-test-extensions的實現。

解決

它不是一個完整的解決方案的。)第一部分,因爲更換flyway.placeholders。將通過方法配置內Flyway完成,我們不能調用。在你的應用程序上下文

認沽以下幾點:在你的flyway.properties

<!-- 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 

<!-- 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.placeholders。從屬性定義。我認爲這不是完整的通緝令。

灣)第二部分

EDIT

更好

溶液使用從當前飛路測試延伸發展籤。(http://code.google.com/p/flyway-test-extensions/source/detail?r=921f44bb206527db88f4b59faaf7ea968a743233

  • FlywayHelperFactory.java作爲Flyway的工廠實現。把它作爲測試資源的一部分。
    這應該也適用於1.7版本。
  • flywayPropertiesContext.xml作爲新的應用程序上下文。把它作爲一個測試/資源放在一個名爲context的目錄中。
    這包含兩個示例解決方案,可以如何加載flyway.properties。
    注意:
    此上下文不使用jdbc.properties變量,而是使用flyway屬性!
    此上下文還應與flyway-test-extension 1.7.0
  • 一起使用,更改您的測試設置並使用@ContextConfiguration(locationsForMirgation = { "/context/flywayPropertiesContext.xml" })作爲新配置。

florian