Я делаю это при запуске приложения. Версия схемы, которая требуется приложению, компилируется в приложение как часть процесса сборки. Он также сохраняется в базе данных и обновляется сценариями миграции базы данных.
При запуске приложения приложение проверяет, что версия схемы в базе данных соответствует ожидаемой, и, если нет, немедленно прерывает работу с явным сообщением об ошибке.
В обычной Java-программе это происходит в самом начале метода main.
В веб-приложении оно выполняется ServletContextListener приложения и является первым, что оно делает при создании контекста сервлета.
Это спасло мой (приложения) бекон несколько раз.