Генерация базы данных при развертывании войны в Tomcat - PullRequest
1 голос
/ 27 января 2012

У меня есть файл war с моим веб-приложением, и мне нужно сгенерировать таблицы базы данных в MySQL в тот момент, когда я скопировал war-файл в папку webapps из Tomcat (при условии, что Tomcat запущен).

Есть ли способ сделать это, можете ли вы помочь мне с некоторой информацией об этом?

PS.Это очень простое веб-приложение, использующее только JDBC, я не использую ORM-фреймворки.Это возможно с JDBC?

Ответы [ 3 ]

4 голосов
/ 27 января 2012

Если вы просто хотите обновить схему, но не хотите вводить что-то такое тяжелое, как Hibernate, есть несколько хороших альтернатив:

  • Flyway - Предоставьте сценарии миграции вместе с приложением для его обновления во время развертывания.
  • Liquibase - укажите XML-описание вашей схемы и разрешите Liquibase обновить схему.

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

Код для запуска миграции может быть помещен в ServletContextListener. Пример кода, который можно использовать там, приведен на странице Интеграция приложений Flyway .

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

Liquibase предоставляет собственный ServletContextListener, который вы можете использовать. См. Страницу ServletListener в документации.

Если вы хотите внедрить ORM, вы можете посмотреть:

  • Hibernate - ORM с множеством функций (и довольно много зависимостей)
  • EclipseLink - ранее Oracle TopLink. Это выглядит более отточенным, чем в Hibernate, но имеет меньше возможностей.
2 голосов
/ 27 января 2012

Выполните работу в методе contextInitialized() пользовательского класса ServletContextListener. Это будет вызвано при запуске веб-приложения.

@WebListener
public class Config implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        // Just write/call JDBC code here the usual way to create database/tables if not exists.
    }

    // ...
}

Тем не менее, использование среды ORM, такой как JPA / Hibernate, действительно спасает вас от большого стандартного кода JDBC и головной боли.

1 голос
/ 27 января 2012

звучит как случай для: http://www.hibernate.org/

...