Считаете ли вы @Autowired
конструктором или установщиком и String.split()
в теле?
class MyClass {
private List<String> myList;
@Autowired
public MyClass(@Value("${my.list.of.strings}") final String strs) {
myList = Arrays.asList(strs.split(","));
}
//or
@Autowired
public void setMyList(@Value("${my.list.of.strings}") final String strs) {
myList = Arrays.asList(strs.split(","));
}
}
Я предпочитаю делать свое автоувеличивание одним из этих способов, чтобы повысить проверяемость моего кода.
Мы пишем сценарий каждого изменения DDL в DB и когда мы делаем "выпуск", мы связываем их в единственный сценарий "обновления", вместе с любыми Хранимыми процедурами, которые изменились "с прошлого раза, когда",
у Нас есть таблица, которая хранит номер версии последнего примененного патча - таким образом, инструменты обновления могут применить любые более новые патчи.
Каждая Хранимая процедура находится в отдельном файле. Каждый запускает с оператора "вставки" к регистрирующейся таблице, которая хранит Название SProc, Версии и "теперь". (На самом деле SProc выполняется для хранения этого, не необработанный оператор вставки).
Иногда во время развертывания мы вручную изменяем SProc или разногласия развертывания & концы от DEV и сравнение баз данных TEST и PRODUCTION клиента входа в систему позволяют нам проверить, что все в той же версии.
у Нас также есть основная база данных "выпуска", к которой мы применяем обновления, и мы используем восстановленное резервное копирование этого для новых установок (экономит время запущения скриптов, которые, очевидно, увеличиваются со временем). Мы обновляем это как & когда, потому что, очевидно, если это является немного устаревшим, более поздние сценарии патча могут быть применены.
база данных Our Release также содержит санированные данные начинающего (который удален или иногда принимается & измененный, прежде чем новая установка идет живая - таким образом, это не включено ни в какие сценарии обновления)
, SQL Server имеет кнопку на панели инструментов для сценариев изменения - таким образом, можно использовать инструменты GUI для внесения всех изменений, а скорее, чем сохранение их генерирует сценарий вместо этого. (на самом деле существует флажок к всегда , генерируют сценарий, поэтому если Вы забываете и просто нажимаете SAVE, он все еще дает Вам сценарий, который он использовал после совершения, который может быть сохранен как файл исправления)
В случае SQLite можно использовать user_version прагму для отслеживания версии базы данных. Получить версию:
PRAGMA user_version
Для установки версии:
PRAGMA user_version = 5
я затем сохраняю каждую группу обновлений в файле SQL (это встраивается в приложение), и работайте, обновления должны были заниматься новой версией:
Select Case currentUserVersion
Case 1
// Upgrade to version 2
Case 2
// Upgrade to version 3
Case etc...
End Select
Это позволяет приложению обновлять себя к новой версии независимо от текущей версии DB.
IMO самая легкая вещь сделать должен рассматривать обновление от, например, 1.0 к 1,5 как последовательность обновлений от 1,0 до 1,1, 1.1 к 1,2, и т.д. Для каждого изменения версии имейте в наличии сценарий/часть преобразования кода.
Затем сохраните таблицу с полем версии в базе данных и скомпилируйте в приложение требуемая версия. На запуске, если поле версии не соответствует скомпилированному - в версии, запускает все необходимые скрипты преобразования, один за другим.
сценарии преобразования должны идеально запустить транзакцию и записать новую версию в базу данных как последний оператор прежде, чем фиксировать транзакцию.
Что я рассматриваю, добавляет таблица SchemaVersion к базе данных, которая содержит запись для каждой версии, которая существует. Последняя версия таблицы SchemaVersion является текущим уровнем базы данных.
я собираюсь создать (SQL) сценарии, которые выполняют начальную настройку 1,0 и после этого обновление от 1,0 до 1,1, 1.1 к 1,2, и т.д.
, Даже новая установка на, например, 1.2 пробежит все эти сценарии. Это могло бы казаться немногим медленным, но только сделано однажды и на (почти) пустой базе данных.
большое преимущество этого состоит в том, что новая установка будет иметь ту же схему базы данных как обновленная установка.
, Поскольку я сказал: Я рассматриваю это. Я, вероятно, начну реализовывать это завтра. Если Вам интересно, я могу совместно использовать свои события. Я буду реализовывать это для c# приложения, которое использует LINQ к объектам с SQL Server и MySQL как системы управления базами данных.
мне интересно слышать чьи-либо еще предложения и идеи и если кто-то может указать на меня библиотека .NET с открытым исходным кодом или классы, который реализует что-то вроде этого, которое было бы большим.
РЕДАКТИРОВАНИЕ: В ответе на другое вопрос здесь на ТАК я нашел ссылку на Мигранта. Сеть. Я начал использовать его сегодня, и похоже, что это точно, что я искал.
У меня была та же проблема в приложении .NET, которое я писал.
В конце я записал, моя собственная платформа обновления, чтобы сделать задание (не будет работать на Вас, потому что это было записано в C#). Можно хотеть посмотреть в текст ссылки для получения некоторое представление.