佔位符替換由PlaceholderReplacer
處理。
佔位符的用途是什麼?在什麼樣的現實世界的實際情況下佔位符可能有用?你能描述一些簡單的例子來證明有用嗎?
假如我是一個可憐的啓動與單個數據庫和使用表前綴每個命名dev
,test
和prod
環境分開。在我的Flyway遷移中,我可以選擇爲此變量設置一個佔位符${env}
。因此,現在我可以在所有使用佔位符的環境中使用相同的遷移,並在運行時提供一個值。
假設我有一個在數據庫中創建一個只讀用戶和密碼的遷移。在腳本中輸入密碼是不好的做法,所以使用佔位符可以在運行時傳遞密碼。
我們將如何設置插入值代替佔位符?
在Flyway
類的實例上調用configure()
將從傳遞的屬性中解析佔位符替換。它做它像這樣:
Map<String, String> placeholdersFromProps = new HashMap<String, String>(placeholders);
Iterator<Map.Entry<String, String>> iterator = props.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> entry = iterator.next();
String propertyName = entry.getKey();
if (propertyName.startsWith(PLACEHOLDERS_PROPERTY_PREFIX)
&& propertyName.length() > PLACEHOLDERS_PROPERTY_PREFIX.length()) {
String placeholderName = propertyName.substring(PLACEHOLDERS_PROPERTY_PREFIX.length());
String placeholderValue = entry.getValue();
placeholdersFromProps.put(placeholderName, placeholderValue);
iterator.remove();
}
}
setPlaceholders(placeholdersFromProps);
如果您正在使用CLI,用於指導檢查the configuration section of the docs在配置遷飛。
佔位符只佔用純文本,沒有其他數據類型嗎?
只有字符串。 String placeholderValue = entry.getValue()
只能在SQL文件中使用佔位符嗎? Java代碼中的SQL字符串中可以使用佔位符嗎?
是的只是一個普通的SQL文件。我從檢查對PlaceholderReplacer
的引用中知道這一點,但它也是有道理的,因爲Java遷移可能不包含SQL,並且它需要某種編譯器插件才能工作。此外,Java遷移可以從字面上做任何事情,所以如果它想使用與SQL腳本相同的佔位符。只需編寫Java來加載屬性並進行字符串替換。如果你願意的話,你甚至可以使用PlaceholderReplacer
。
有沒有其他地方可以使用佔位符?
我在檢查Flyway repo時沒有發現任何東西。