簡體   English   中英

Spring 引導數據庫初始化失敗:SimpleDriverDataSource 無法初始化 class

[英]Spring Boot Database initialization failed: SimpleDriverDataSource could not initialize class

我正在嘗試使用 Spring 啟動上下文運行測試,但出現錯誤“無法初始化 class org.springframework.jdbc.datasource.SimpleDriverDataSource

我在這個問題上苦苦掙扎了幾天,無法讓它工作。 可能我對 Spring 啟動測試不夠熟悉,但是在 Spring 啟動版本 2.3.4 上一切正常。 升級到 2.5.7 及更高版本后,(2.6.1)問題仍然存在。

測試 class:

@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
@ContextConfiguration(classes = TestApplication.class)
@SpringBootTest(properties = {
        "spring.sql.init.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE",
        "spring.sql.init.driver-class-name=org.h2.Driver",
        "spring.sql.init.username=user",
        "spring.sql.init.password=pass",
        "spring.jpa.hibernate.ddl-auto=update",
        "spring.jpa.show-sql=true"
}
)
public class UserServiceTest {

    private static final String USERNAME_COLUMN = "username";

    @Autowired
    private RoleRepository roleRepository;

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private UserService userService;

    @BeforeEach
    @AfterEach
    public void cleanDatabase() {
        userRepository.deleteAll();
        roleRepository.deleteAll();
    }

    @Test
    @Transactional
    public void shouldRegisterUser() {
        roleRepository.saveAndFlush(RoleFixture.createRoleEntity(UserType.USER.name()));

        final String username = "username";
        final UserType type = UserType.USER;

        final UserRegister userRegister = UserFixture.createUserRegister(
                username,
                "password",
                "email@test.com",
                25,
                "name",
                "last_name",
                type
        );
        final UserResponse userResponse = userService.registerUser(userRegister);

        assertThat(userResponse).isNotNull();
        assertThat(userResponse.getUserId()).isNotNull();
        assertThat(userResponse.getUsername()).isEqualTo(username);
        assertThat(userResponse.getType()).isEqualTo(type);

        assertThat(userRepository.findByUserId(userResponse.getUserId())).isNotEmpty();
    }

上下文初始化器 class:

package hr.fitbit.demo.fitbitconnect.testsupport;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = "hr.fitbit.demo.fitbitconnect")
public class TestApplication {
}

Maven 依賴關系:

 <!-- spring boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

我試圖包含 spring-boot-data-jpa、h2、spring-boot-jdbc 依賴項,但沒有任何幫助。 這是項目https://github.com/filip194/fitbit-connect的鏈接和測試鏈接: https://github.com/filip194/fitbit-connect/blob/master/subprojects/users/src/測試/java/hr/fitbit/demo/fitbitconnect/users/service/UserServiceTest.java

我也嘗試刪除@AutoConfigureTestDatabase但后來又出現另一個錯誤:無法初始化 class com.zaxxer.hikari.HikariDataSource ,即使我在 pom 中明確包含依賴項,我也找不到解決方案。

我目前對此感到困惑,無法繼續我的教育項目。 任何幫助,將不勝感激。 謝謝!

編輯 1:使用spring.datasource。 spring.sql.init。 在這兩種情況下,屬性都不會更改測試結果或錯誤消息。

我建議你做出以下決定:

  1. 添加@EnableJpaRepositories@EntityScan
   @EnableJpaRepositories(basePackageClasses = {UserRepository.class,  RoleRepository.class})
   //@EnableJpaRepositories(basePackages = "hr.fitbit.demo.fitbitconnect.dao.repository")
   @EntityScan(basePackageClasses = {UserEntity.class, RoleEntity.class})
   @SpringBootTest(classes = TestApplication.class)
   public class UserServiceTest {
  1. 在模塊dao中添加到文件夾dao/src/test/java class 與@SpringBootApplicatio n
   package hr.fitbit.demo.fitbitconnect.dao;

   import org.springframework.boot.autoconfigure.SpringBootApplication;

   @SpringBootApplication
   public class MockTestApplication {
   }

    @DataJpaTest
    public class RoleEntityTest {

更多信息在這里https://www.baeldung.com/spring-boot-unable-to-find-springbootconfiguration-with-datajpatest

  1. @EnableJpaRepositories@EntityScan添加到 TestSupport class 和 FitbitServiceTest class。

祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM