使用Spring Boot 1.4.1和H2测试JPA

时间:2016-09-26 04:24:53

标签: spring jpa testing spring-boot h2

我尝试使用H2测试我的JPA代码,我的生产数据库是PostGres。

我在运行测试时遇到的错误是:

Caused by: java.lang.ClassNotFoundException: org.h2.Driver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)

我的pom.xml文件中有H2:

<dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <scope>runtime</scope>
        </dependency>

不确定为什么找不到驱动程序。

作为替代方案,我尝试添加@DataJpaTest,这确实让我得到了H2但是我没有成功地覆盖它的配置如何导致FlyWay在测试运行多次之后抱怨现有版本。

我还尝试将以下内容放在application.yml(在test / resource中)与@DataJpaTest一起处理我的FlyWay问题,但是它被这个注释忽略或者没有被加载:

hibernate:
      ddl-auto: create-drop

我想要:

  1. 找出未加载驱动程序的原因
  2. 弄清楚如何调整@DataJpaTest
  3. 创建的DataSource
  4. 找出配置测试数据源的更好方法
  5. 任何提示?其他人如何配置生产是一种类型的数据库并且测试因嵌入式数据而下​​降的情况?

1 个答案:

答案 0 :(得分:0)

事实证明我毕竟不使用1.4.1。我还有1.4.0。我更新到1.4.1并做了一个mvn clean包。还删除了org.hsqldb依赖项。最后,我在src / main / resources中使用了application.yml,并将PostGres的依赖性移到了名为“cloud”的配置文件中。我删除了与H2有关的所有其他配置。我还删除了JUnit类上的所有注释,除了start.spring.io首次生成测试类时给出的注释。之后所做的一切都在那之后起作用。可能是我在我的配置中搞砸了什么,或者1.4.0中可能存在某种错误?无论如何,我重新开始营业: - )