2010-09-20 9 views
3

Я разрабатываю Java webapp с использованием Spring, Spring Security, Tomcat и MySQL. Сейчас я все еще в фазе, где я делаю довольно частые изменения в базе данных, а также воссоздавая базу данных для очистки тестовых данных. В конечном счете, это не будет проблемой, но есть ли способ создать экземпляр компонента или код, который выполняется для загрузки Webapp? Я бы хотел использовать функциональность IoC для использования того же самого, например PasswordEncoder, которое мое приложение использует для заполнения исходных учетных записей пользователей. Кроме того, я хотел бы, чтобы этот скрипт создавал базу данных, если она не существует и т. Д. Есть ли способ сделать это? Есть ли лучший способ, чем я предлагаю? Я не состою в браке с алгоритмом, который я только что описал, но это лучший способ, которым я могу представить, что я ищу.Webapp bootstrap code в Tomcat

Заранее благодарен!

ответ

3

Если вы используете Spring, вы можете register a ContextLoaderListener автоматически запускать ApplicationContext. Ваш ApplicationContext может затем инициализировать базу данных, в идеале через JPA или Hibernate, но и using plain jdbc

+0

Это было точно так же, как и я, спасибо! –

3

Хорошим способом создания схемы базы данных является liquibase. Вы также можете вставить данные. Liquibase предлагает интеграцию Spring через bean-компонент: liquibase.spring.SpringLiquibase, поэтому при необходимости база данных будет обновлена.

+0

Это действительно классный дизайн. Я обязательно посмотрю на это. Это не совсем то, что я ищу: мне нужно иметь возможность вызывать запросы на вставку с Java, чтобы гарантировать, что я использую один и тот же кодер. –

+0

Вся ваша работа с Liquibase во время разработки может соответствовать вашей производственной среде для изменений. Это отличное программное обеспечение –

1

вы могли бы реализовать боб с интерфейсом ApplicationListener.

выполнить вам необходимые действия, когда вы получаете ContextRefreshedEvent

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

недостатком является то, что это событие запускается при инициализации и обновления

ContextRefreshedEvent Опубликовано при ApplicationContext инициализации или обновления. Инициализировано здесь означает, что все бобы загружены, однопоточные экземпляры предварительно создаются и ApplicationContext готов к использованию.