Comment faire pour remplir Java (web) application avec données initiales à l'aide de Spring/JPA/Hibernate

Je veux configurer ma base de données avec des données initiales de la programmation. Je veux remplir ma base de données pour le développement s'exécute, pas pour le test fonctionne (c'est facile). Le produit est construit sur le sommet de Printemps et JPA/Hibernate.

  • Développeur récupère le projet
  • Développeur exécute la commande/script de configuration de la base de données avec des données initiales
  • Développeur commence application (serveur) et commence le développement/tests

alors:

  • Développeur exécute la commande/script pour vider la base de données et le mettre en place avec de nouvelles données initiales parce que les structures de base de données ou l'initiale de l'ensemble de données ont été modifiées

Ce que je veux, c'est l'installation de mon environnement par les pièces nécessaires afin d'appeler mon DAOs et insérer de nouveaux objets dans la base de données. Je ne veux pas créer des ensembles de données initiales en raw, SQL, XML, prendre des dumps de la base de données ou que ce soit. Je veux de programmation pour créer des objets et de les conserver dans la base de données que je voudrais dans l'application normale de la logique.

Une façon d'y parvenir serait de commencer ma demande normalement et exécuter un spécial servlet qui ne l'initialisation. Mais est-ce vraiment la voie à suivre? J'aimerais exécuter les données initiales de la configuration que Maven tâche et je ne sais pas comment faire si je prends la servlet approche.

Il est un peu la même question. J'ai pris un coup d'oeil rapide à l'a suggéré DBUnit et Unitils. Mais ils semblent être fortement concentrés dans la mise en place d'environnements de tests, ce qui n'est pas ce que je veux ici. DBUnit n'données initiales de la population, mais seulement à l'aide de xml/csv luminaires, ce qui n'est pas ce que je suis après ici. Ensuite, Maven a SQL plugin, mais je ne veux pas gérer SQL brut. Maven a également Hibernate plugin, mais il semble pour aider seulement dans Hibernate configuration et le schéma de la table la création (pas dans le remplissage de db avec les données).

Comment faire?

Solution partielle 2010-03-19

Solutions de rechange proposées sont:

  • L'aide de tests unitaires pour remplir la base de données #2423663
  • À l'aide de ServletContextListener de contrôle de gain sur le web contexte de démarrage #2424943 et #2423874
  • À l'aide de Printemps ApplicationListener et du Printemps, les Événements Standard et Personnalisés #2423874

Je l'ai fait à l'aide du Printemps ApplicationListener:

Classe:

public class ApplicationContextListener implements ApplicationListener {

    public void onApplicationEvent(ApplicationEvent event) {

        if (event instanceof ContextRefreshedEvent) {
            ...check if database is already populated, if not, populate it...
        }
    }
}

applicationContext.xml:

<bean id="applicationContextListener" class="my.namespaces.ApplicationContextListener" />

Pour une raison que je ne pouvais pas obtenir ContextStartedEvent lancé, j'ai donc choisi ContextRefreshedEvent qui est lancé au démarrage (n'ai pas croisé d'autres situations, encore).

Comment puis-je vider la base de données? Actuellement, j'ai simplement supprimer HSQLDB artefacts et un nouveau schéma est généré au démarrage par Hibernate. Le DB est alors aussi vide.

OriginalL'auteur Tuukka Mustonen | 2010-03-11