【发布时间】:2018-09-18 13:38:33
【问题描述】:
我在单元测试中使用了H2数据库,使用java配置:
@Configuration @EnableJpaRepositories(basePackageClasses = AdvertisementRepository.class) public class EmbeddedDatabaseConfig {
/**
* Creates DataSource for an embedded Database (H2).
*/
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();
}
并在 pom.xml 中设置测试范围:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.184</version>
<scope>test</scope>
</dependency>
它已经成功构建并在JUnit测试中,但是当我在服务器上运行它时,它会报告错误:
java.lang.ClassNotFoundException: org.h2.Driver
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1274)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1108)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
at org.springframework.jdbc.datasource.embedded.H2EmbeddedDatabaseConfigurer.getInstance(H2EmbeddedDatabaseConfigurer.java:48)
at org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseConfigurerFactory.getConfigurer(EmbeddedDatabaseConfigurerFactory.java:39)
... 51 more
我很困惑:junit 测试不会在运行时运行,对吧?为什么我的代码自动读取了java config类,却没有找到驱动类?
【问题讨论】:
-
也许您不小心在生产模式下也使用了该测试配置?
-
将 h2 JDBC 驱动程序添加到您的类路径中,或者如果您使用 IDE,则将其作为库添加到您的项目中。 stackoverflow.com/questions/29609985/… 的可能重复项
-
@Nithin 看起来问题不是缺少依赖项,而是在生产配置文件/代码中使用测试配置。
-
我在 IntelliJ 上遇到了同样的问题,它找不到 org.h2.Driver。我从网上尝试了几种解决方案,但是在简单地重新启动 IntelliJ 后,问题就解决了。希望这有助于节省一些时间。
-
@Nithin 我猜他正试图在除 dev 之外的不同环境中运行代码......猜他需要理清依赖关系
标签: java spring junit annotations h2