【发布时间】:2020-03-21 22:44:34
【问题描述】:
我有包含 kafka 和 jpa 的 Spring Boot 应用程序。我使用 h2 作为我的内存数据库。对于每个测试类的执行,我不希望每个测试类都出现 kafka。我有 2 个测试类,一个是 KafkaConsumerTest,另一个是 JPATest。 KafkaConsumerTest 带有 @SpringBootTest 注释,它完美地加载了整个应用程序并通过了所有测试。但是,对于 JPATest,我不想调出整个应用程序,只需要几个所需的上下文来测试 JPA 相关的更改。当我这样做时,它会引发以下异常。
Caused by: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:958)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:109)
at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:138)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:172)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:233)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:815)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:256)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:769)
我在 application.yml 文件中使用 jdbcUrl 传递数据源
src/test/resources/application.yml
spring:
datasource:
jdbcUrl: jdbc:h2:mem:mydb
url: jdbc:h2:mem:mydb
driverClassName: org.h2.Driver
username: sa
kafka:
bootstrap-servers: ${spring.embedded.kafka.brokers}
KafkaConsumerTest.java
@RunWith(SpringRunner.class)
@SpringBootTest (classes = Application.class)
@DirtiesContext
@EmbeddedKafka(partitions = 1,
topics = {"${kafka.topic}"})
public class KafkaConsumerTest {
JpaTest.java
@RunWith(SpringRunner.class)
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class, classes = {JPAConfiguration.class})
public class NotificationServiceTest {
我尝试将加载程序作为 AnnotationConfigContextLoader.class 但它给了我同样的错误。我尝试使用 TestPropertyResource 专门指定 application.yml 但仍然出现相同的错误。
@TestPropertyResource(locations = {"classpath:application.yml"})
我认为我无法在此处正确加载上下文,并且 application.yml 文件无法在此处选择或解析值。
有关如何解决此问题的任何建议。
【问题讨论】:
标签: spring-data-jpa h2 spring-kafka spring-boot-test