2014-04-25 1 views
5

Я использую Java + Playframework + JPA, используя PlayFramework 2.3-M1 для разработки приложения.Playframework 2.2.x + Java + JPA - Отдельная база данных для модульного тестирования и производства

Я хочу использовать базу данных MySQL, когда я бегу-анкету, но когда я запускаю тест с использованием

activator test 

Я хочу использовать в H2 базы данных памяти.

Как это можно сделать?

Ниже мой

конф/META-INF/persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
      http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
      version="2.0"> 

    <persistence-unit name="prod" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <non-jta-data-source>prodDS</non-jta-data-source> 
     <properties> 
      <property name="hibernate.dialect" 
         value="org.hibernate.dialect.MySQL5Dialect"/> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
      <property name="hibernate.show_sql" value="true"></property> 
      <property name="hibernate.format_sql" value="true"></property> 
     </properties> 
    </persistence-unit> 

    <persistence-unit name="test" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <non-jta-data-source>TestDS</non-jta-data-source> 
     <properties> 
      <property name="hibernate.dialect" 
         value="org.hibernate.dialect.H2Dialect"/> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
      <property name="hibernate.show_sql" value="true"></property> 
      <property name="hibernate.format_sql" value="true"></property> 
     </properties> 
    </persistence-unit> 

</persistence> 

конф/application.conf

# Database configuration 
# ~~~~~ 
# You can declare as many datasources as you want. 
# By convention, the default datasource is named `default` 
# 
db.test.driver=org.h2.Driver 
db.test.url="jdbc:h2:mem:play" 
db.test.user=sa 
db.test.password="" 

db.test.jndiName=TestDS 

jpa.test=testPersistenceUnit 

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://X.X.X.X/lb" 
db.default.user=lb 
db.default.password="lb" 

# 
# You can expose this datasource via JNDI if needed (Useful for JPA) 
db.default.jndiName=DefaultDS 


jpa.default=defaultPersistenceUnit 


# Evolutions 
# ~~~~~ 
# You can disable evolutions if needed 
evolutionplugin=disabled 

# Ebean configuration 
# ~~~~~ 
# You can declare as many Ebean servers as you want. 
# By convention, the default server is named `default` 
# 
ebean.default="models.*" 

Это лучший подход, чтобы сделать это?

Благодаря

ответ

9

Так что я использовал некоторые смеси/матч подход для быстрого тестирования

  1. Я использовал отдельные файлы конфигурации для тестирования и производства
  2. Я использовал два различных JPA Стойкости Агрегаты для Prod и тестирования
  3. Добавлен файл переопределения для выполнения теста в build.sbt
  4. для генерации тестовых Schema
  5. ИСПОЛЬЗУЕМЫХ эволюции для загрузки тестовых данных светильников в тестовых данных

Ниже приведены мои файлы:

конф/test.conf

db.default.driver=org.h2.Driver 
db.default.url="jdbc:h2:mem:lb" 
db.default.user=lb 
db.default.password="" 

# 
# You can expose this datasource via JNDI if needed (Useful for JPA) 
db.default.jndiName=DefaultDS 


jpa.default=testPersistenceUnit 


# Evolutions 
# ~~~~~ 
# You can disable evolutions if needed 
#evolutionplugin=disabled 

конф/application.conf

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://X.X.X.X/lb" 
db.default.user=lb 
db.default.password="lb" 

# 
# You can expose this datasource via JNDI if needed (Useful for JPA) 
db.default.jndiName=DefaultDS 

jpa.default=defaultPersistenceUnit 

# Evolutions 
# ~~~~~ 
# You can disable evolutions if needed 
evolutionplugin=disabled 

Затем добавлена ​​следующая опция для файла build.sbt

build.sbt

javaOptions in Test += "-Dconfig.file=conf/test.conf" 

Наконец файл persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
      version="2.0"> 

    <!--Persistence Unit for Production--> 

    <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <non-jta-data-source>DefaultDS</non-jta-data-source> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
      <property name="hibernate.show_sql" value="true"></property> 
      <property name="hibernate.format_sql" value="true"></property> 
     </properties> 
    </persistence-unit> 

    <!--Persistence Unit for Testing--> 

    <persistence-unit name="testPersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <non-jta-data-source>DefaultDS</non-jta-data-source> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
      <property name="hibernate.show_sql" value="false"></property> 
      <property name="hibernate.format_sql" value="true"></property> 
     </properties> 
    </persistence-unit> 
</persistence> 

Наконец я проверить его с помощью

activator test 

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

+0

Спасибо, я не использую HIbernate только Ebean, но переопределение db в глобальном test.conf было хорошей идеей. Как примечание, Play будет выглядеть в 'conf /' автоматически, если вместо этого вы используете '-Dconfig.resource = test.conf'. – Blacklight

+0

@Blacklight Спасибо за отзыв.Да, я согласен, но поскольку многие вещи были скопированы из моих сценариев сборки Jenkins, для которых нужен полный путь для развертывания на удаленном сервере, я просто сохранил это. –

+1

Спасибо. Все это должно быть частью документов Play. Его действительно сложно настроить несколько конфигураций для тестирования и prod. – WarLord