Обновления схемы базы данных

Считаете ли вы @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(","));
    }
}

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

15
задан Christophe Herreman 15 February 2009 в 10:35
поделиться

5 ответов

Мы пишем сценарий каждого изменения DDL в DB и когда мы делаем "выпуск", мы связываем их в единственный сценарий "обновления", вместе с любыми Хранимыми процедурами, которые изменились "с прошлого раза, когда",

у Нас есть таблица, которая хранит номер версии последнего примененного патча - таким образом, инструменты обновления могут применить любые более новые патчи.

Каждая Хранимая процедура находится в отдельном файле. Каждый запускает с оператора "вставки" к регистрирующейся таблице, которая хранит Название SProc, Версии и "теперь". (На самом деле SProc выполняется для хранения этого, не необработанный оператор вставки).

Иногда во время развертывания мы вручную изменяем SProc или разногласия развертывания & концы от DEV и сравнение баз данных TEST и PRODUCTION клиента входа в систему позволяют нам проверить, что все в той же версии.

у Нас также есть основная база данных "выпуска", к которой мы применяем обновления, и мы используем восстановленное резервное копирование этого для новых установок (экономит время запущения скриптов, которые, очевидно, увеличиваются со временем). Мы обновляем это как & когда, потому что, очевидно, если это является немного устаревшим, более поздние сценарии патча могут быть применены.

база данных Our Release также содержит санированные данные начинающего (который удален или иногда принимается & измененный, прежде чем новая установка идет живая - таким образом, это не включено ни в какие сценарии обновления)

, SQL Server имеет кнопку на панели инструментов для сценариев изменения - таким образом, можно использовать инструменты GUI для внесения всех изменений, а скорее, чем сохранение их генерирует сценарий вместо этого. (на самом деле существует флажок к всегда , генерируют сценарий, поэтому если Вы забываете и просто нажимаете SAVE, он все еще дает Вам сценарий, который он использовал после совершения, который может быть сохранен как файл исправления)

7
ответ дан 1 December 2019 в 01:31
поделиться

В случае 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.

25
ответ дан 1 December 2019 в 01:31
поделиться

IMO самая легкая вещь сделать должен рассматривать обновление от, например, 1.0 к 1,5 как последовательность обновлений от 1,0 до 1,1, 1.1 к 1,2, и т.д. Для каждого изменения версии имейте в наличии сценарий/часть преобразования кода.

Затем сохраните таблицу с полем версии в базе данных и скомпилируйте в приложение требуемая версия. На запуске, если поле версии не соответствует скомпилированному - в версии, запускает все необходимые скрипты преобразования, один за другим.

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

1
ответ дан 1 December 2019 в 01:31
поделиться

Что я рассматриваю, добавляет таблица SchemaVersion к базе данных, которая содержит запись для каждой версии, которая существует. Последняя версия таблицы SchemaVersion является текущим уровнем базы данных.

я собираюсь создать (SQL) сценарии, которые выполняют начальную настройку 1,0 и после этого обновление от 1,0 до 1,1, 1.1 к 1,2, и т.д.

, Даже новая установка на, например, 1.2 пробежит все эти сценарии. Это могло бы казаться немногим медленным, но только сделано однажды и на (почти) пустой базе данных.

большое преимущество этого состоит в том, что новая установка будет иметь ту же схему базы данных как обновленная установка.

, Поскольку я сказал: Я рассматриваю это. Я, вероятно, начну реализовывать это завтра. Если Вам интересно, я могу совместно использовать свои события. Я буду реализовывать это для c# приложения, которое использует LINQ к объектам с SQL Server и MySQL как системы управления базами данных.

мне интересно слышать чьи-либо еще предложения и идеи и если кто-то может указать на меня библиотека .NET с открытым исходным кодом или классы, который реализует что-то вроде этого, которое было бы большим.

РЕДАКТИРОВАНИЕ: В ответе на другое вопрос здесь на ТАК я нашел ссылку на Мигранта. Сеть. Я начал использовать его сегодня, и похоже, что это точно, что я искал.

2
ответ дан 1 December 2019 в 01:31
поделиться

У меня была та же проблема в приложении .NET, которое я писал.

В конце я записал, моя собственная платформа обновления, чтобы сделать задание (не будет работать на Вас, потому что это было записано в C#). Можно хотеть посмотреть в текст ссылки для получения некоторое представление.

0
ответ дан 1 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: