Запуск сервера базы данных H2 от знатока?

Предположим, что я хочу создать и использовать базу данных H2 для моих интеграционных тестов.

У знатока есть команда для запущения тестов: mvn test.

Существует ли способ сказать знатоку запускать сервер базы данных H2 для тестов и останавливать его, когда он сделан?

Я воображаю эту работу подобной тому, как я могу выполнить кота через команду Maven (mvn tomcat:run).

Извините, если этот вопрос бессмыслен, я все еще переношу голову вокруг новых понятий.

37
задан Peter Mularien 10 April 2013 в 02:37
поделиться

4 ответа

Я смог заставить его работать без использования внешнего сервера, просто добавив зависимость в H2 через Maven, а затем используя этот боб:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.h2.Driver"/>
    <property name="url" value="jdbc:h2:file:h2\db"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>        
</bean>

Опять же, это потребовало, чтобы я использовал БД на основе файлов, а не в памяти. Но это помогает.

19
ответ дан 27 November 2019 в 04:48
поделиться

В моем проекте для модульного тестирования я попросил Spring обработать создание и инициализацию этой базы данных. Как указано в документации H2 , вы можете создать для этого bean-компонент:

<bean id = "org.h2.tools.Server"
    class="org.h2.tools.Server"
    factory-method="createTcpServer"
    init-method="start"
    destroy-method="stop">
    <constructor-arg value="-tcp,-tcpAllowOthers,true,-tcpPort,8043" />
</bean>

Вам просто нужно запустить контекст Spring с этой конфигурацией, когда вы запускаете свои модульные тесты.

4
ответ дан 27 November 2019 в 04:48
поделиться

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

вы должны сделать то же самое для своего сервера БД, как описано где-то в этом документе (описание предназначено для запуска и остановки Jetty в интеграционных тестах)

в вашем pom.xml вы должны определить maven- плагин exec для выполнения цели exec: java и создания 2 выполнения (1 для вызова StartServer и 1 для StopServer):

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1.1</version>
  <executions>
    <execution>
      <!-- start server before integration tests -->
      <id>start</id>
      <phase>pre-integration-test</phase>
      <goals>
        <goal>java</goal>
      </goals>
      <configuration>
        <mainClass>com.foo.StartServer</mainClass>
      </configuration>
     </execution>
     <execution>
      <!-- stop server after integration tests -->
      <id>stop</id>
      <phase>post-integration-test</phase>
      <goals>
        <goal>java</goal>
      </goals>
      <configuration>
        <mainClass>com.foo.StopServer</mainClass>
      </configuration>
     </execution>
   </executions>
 </plugin>

надеюсь, что это то, что вы хотите

12
ответ дан 27 November 2019 в 04:48
поделиться

Поскольку H2 не предоставляет подключаемый модуль Maven, вы должны запустить его с помощью maven-antrun-plugin. Напишите код для запуска и остановки движка h2 в задаче ant и вызывайте его, когда ваш интеграционный тест запускается и останавливается.

См. Подробности о http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing

1
ответ дан 27 November 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: