2010-09-20 5 views
3

Je développe une webapp Java en utilisant Spring, Spring Security, Tomcat et MySQL. À l'heure actuelle, je suis encore dans une phase où je modifie assez fréquemment la base de données et recréer la base de données pour purger les données de test. En fin de compte, ce ne sera pas un problème, mais existe-t-il un moyen d'avoir un bean qui est instancié ou du code qui est exécuté pour amorcer la webapp? J'aimerais pouvoir profiter de la fonctionnalité IoC pour utiliser par exemple le PasswordEncoder que mon application utilise pour remplir les comptes d'utilisateurs d'origine. De plus, j'aimerais que ce script crée la base de données si elle n'existe pas, etc. Y a-t-il un moyen de le faire? Y a-t-il un meilleur moyen que je ne le suggère? Je ne suis pas marié à l'algorithme que je viens de décrire, mais c'est la meilleure façon de penser à ce que je cherche.Webapp bootstrap code dans Tomcat

Merci d'avance!

Répondre

3

Si vous utilisez Spring, vous pouvez register a ContextLoaderListener démarrer automatiquement ApplicationContext. Votre ApplicationContext peut alors initialiser la base de données, idéalement via JPA ou Hibernate, mais aussi using plain jdbc

+0

C'était exactement dans le sens de ce que je cherchais, merci! –

3

Une bonne façon de créer le schéma de base de données est liquibase. Vous pouvez également insérer des données. Liquibase propose une intégration Spring via le bean: liquibase.spring.SpringLiquibase, de sorte que la base de données sera mise à jour si nécessaire.

+0

Ceci est un cadre vraiment cool. Je vais certainement regarder ça. Ce n'est pas tout à fait ce que je recherche: je dois pouvoir appeler les requêtes d'insertion de Java pour garantir que j'utilise le même encodeur. –

+0

Tout votre travail avec liquibase pendant le développement peut s'adapter à votre environnement de production pour les changements. C'est un super logiciel –

1

vous pouvez mettre en œuvre un haricot avec l'interface ApplicationListener.

vous effectuer les mesures nécessaires lorsque vous recevez le ContextRefreshedEvent

la hausse de cette approche est que le cadre pour que vous avez chargé le contexte et tous vos haricots, si vous avez accès à tous pour ce que jamais bootstrapping que vous voulez faire.

l'inconvénient est que cet événement est déclenché lors de l'initialisation et le rafraîchissement

ContextRefreshedEvent Publié lorsque le ApplicationContext est initialisé ou rafraîchi. Initialisé ici signifie que tous les beans sont chargés, les singletons sont pré-instanciés et ApplicationContext est prêt à l'emploi.

Questions connexes