代码之家  ›  专栏  ›  技术社区  ›  cetnar

如何用初始数据填充web应用程序

  •  10
  • cetnar  · 技术社区  · 17 年前

    我正在编写web应用程序,不知道填充初始数据的推荐方法是什么。这是JPA/Hibernate和Spring应用程序,由maven构建。到目前为止,我使用的脚本用初始数据填充数据库,这是手动开始的。

    org.springframework.test.jpa.AbstractJpaTests

    最后,我想要一个maven构建,它创建数据库表单实体(现在我需要第一次运行应用程序来创建数据库,然后运行脚本),然后填充初始/字典数据并运行单元和集成测试。这个过程应该是完全自动化的,以便将这个构建放在CI服务器(hudson)中,从头开始创建新的数据库也是值得的。

    编辑: 我要找的最好的例子是 init closure in BootStrap.groovy

    3 回复  |  直到 6 年前
        1
  •  6
  •   Pascal Thivent    17 年前

    编辑

    […]我想要一个maven构建,它可以从实体创建数据库

    maven hibernate3 plugin 带着 hibernate3:hbm2ddl maven sql plugin ,应该可以从生成的DDL创建此架构。

    […]然后填充初始/字典数据

    再说一次 maven sql插件 我可以在这里工作。或者可能是 DBUnit 这是另一个优雅的解决方案(参见 maven dbunit plugin ).

    并运行单元和集成测试。

    嗯,我不确定您的单元测试是否应该访问数据库,但是,对于集成测试,请检查 数据库单元 正如我所说。它确实是一个非常好的工具,允许您在已知状态下设置数据库,在测试执行后测试表的预期内容,并将数据库恢复到初始状态。看见 Testing JPA Hibernate with Spring & DbUnit 举个好例子。

    这个过程应该是完全自动化的,以便将这个构建放在CI服务器(hudson)中,从头开始创建新的数据库也是很有价值的。

    我认为这是可行的。

        2
  •  1
  •   cetnar    17 年前

    @大卫,谢谢你的帖子。我找到的唯一合理的解决方案是在初始数据中植入种子,这与您的类似,即在测试中插入数据。在我的代码中,我甚至没有使用hibernate3 maven插件。中的数据库创建由Spring在文件中完成 jpaContext.xml

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
      <bean
        class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
          <property name="showSql" value="true" />
          <property name="generateDdl" value="true" />
          <property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect"/>
      </bean>
    </property>
    <property name="dataSource" ref="dataSource"/>
    

    正如我所写,我使用 org.springframework.test.jpa.AbstractJpaTests 用重写方法

    
      @Override
      protected String[] getConfigLocations() {
        return new String[]{
          "classpath:/jpaContext.xml"};
      }
    

    我认为这应该简化你的解决方案。我仍然在寻找更好的解决方案来创建初始数据。手动创建具有大量关系的对象很麻烦。

        3
  •  0
  •   David Krisch    17 年前

    我通过扩展解决了一个与你几乎相同的问题

    org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests

    然后,我在测试时使用hibernate3 maven插件填充数据库(我使用hsqldb):

          <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>hibernate3-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <components>
                        <component>
                            <name>hbm2ddl</name>
                            <implementation>jpaconfiguration</implementation>
                        </component>
                    </components>
                    <componentProperties>
                        <drop>true</drop>
                        <jdk5>true</jdk5>
                        <propertyfile>target/classes/jdbc.properties</propertyfile>
                        <skip>${maven.test.skip}</skip>
                    </componentProperties>
                </configuration>
                <executions>
                    <execution>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>hbm2ddl</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>${jdbc.groupId}</groupId>
                        <artifactId>${jdbc.artifactId}</artifactId>
                        <version>${jdbc.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
    

    我贴了一张 simple maven project