2016-09-22 13 views
2

Я использую LIquibase 3.3 и MySQL 5.5.37. У меня есть этот набор измененийКак заставить мою ревизию Liquibase работать, если меняет сценарий SQL?

<changeSet id="update-thirdparty-event-ids" author="davea" runOnChange="true"> 
    <sqlFile path="scripts/my_table_thirdparty_event_ids.sql" 
      stripComments="true"/> 
</changeSet> 

Я думал, что этот набор изменений запустится, если я внесу изменения в свой SQL-скрипт. Тем не менее, я замечаю, что даже когда я меняю свой сценарий, набор изменений не будет работать, если он уже запускался раньше. Что я могу сделать, чтобы заставить набор изменений запускаться тогда и только тогда, когда изменяется мой скрипт?

Спасибо, - Дейв и

+1

Это не так, как LiquiBase работы. Речь идет не о отслеживании вашего сменного сценария sql. Речь идет о отслеживании изменений на db. Поэтому каждый раз, когда вы что-то изменяете в своем скрипте, вы должны создать новый скрипт и новый набор изменений и добавить их. Каждый changeSet - это одно изменение в БД. – Jens

+0

Это хорошо, но я не хочу этого делать. Я хочу, чтобы сценарий запускался, если он изменился. Если есть какой-то хак, чтобы это произошло, я нахожусь. – Dave

ответ

0

При редактировании файла сохраните его с другим именем, так что вы должны изменить определение набора изменений, чтобы указать на новый файл.

< SQLFILE путь = "скрипты/my_table_thirdparty_event_ids .rev3 .sql" stripComments = "истинный"/>

+1

Я открыт для взлома, но это хак, который другие разработчики не знали бы, если бы они унаследовали этот код. Им нужно будет прочитать нашу документацию, которую никто не делает, а мы все равно не делаем. – Dave

+0

Существует несколько способов его автоматизации - вы можете рассчитать контрольную сумму файла и переименовать его/обновить XML-файл, например, с помощью Maven. Таким образом, имя файла будет изменено, и changset будет повторно применен при обновлении содержимого файла (есть плагин для замены текста, но поскольку вам нужно будет вывести контрольные суммы и т. Д., Я думаю, что вам нужно будет запустить код самостоятельно). У вас может быть что-то вроде path = "run_on_change scripts/my_table_thirdparty_event_ids.sql". Так что это все еще взломать, но его легче поддерживать, потому что он автоматизирован. Также вы можете поместить свой скрипт в тегов в свой список изменений. – dbf

+0

Затем вы остаетесь только с сохранением исходных файлов и генерируете файлы целевого сценария в какой-то временной папке со сценарием и изменяете файл набора изменений, чтобы указать на тот временный путь, когда файлы, имеющие другую дату изменения, чем источник, изменились имена. У вас было бы orgfilename.sql в исходной папке и orgfilename-sometimestamp.sql в папке temp, и вы бы сопоставляли файлы по первой части имени, чтобы сравнить дату модификации (и заменить новую метку времени, если modificaiton date старше). – doker