使用H2数据库和Liquibase配置 Spring Boot

mxg2im7a  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(214)

我正在使用Spring boot 2,我正在尝试使用H2 + Liquibase + JUNIT配置单元测试。
我认为liquibase未执行changeLog文件和应用SQL命令,单元测试未识别我的表。
我在我的文件中放置了错误的sql,以查看是否执行了更改日志文件,但是,似乎没有执行。
为什么我的应用程序无法访问表?也许liquibase没有执行?
在我 src/test/resource 中,我有这个文件:* 应用程序.yml*

spring:
  application:
    name: my-api
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:myDB;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    username: sa
    password: sags
  liquibase:
    enabled: true
    user: sa
    password: sags
    change-log: classpath:/db/changelog/db.changelog-master.xml
  jpa:
    hibernate:
      ddl-auto: none
      database-platform: org.hibernate.dialect.H2Dialect
    show-sql: true
    properties:
      hibernate:
        use_sql_comments: true
        format_sql: true
  h2:
    console:
      enabled: true
      path: /console

我的测试类:

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class FooRepositoryTest {

    @Autowired
    private FooRepository fooRepository;

    @Test
    public void findAllMustReturnAnything() {
        List<Object> result = fooRepository.tables();
    }
}

FooRepository方法:

@Query(value = "SHOW TABLES", nativeQuery = true)
    List<Object> tables();

当我运行我的单元测试时,我得到了以下结果:

我的更改日志文件位于:* 源/主/资源/数据库 *
更新:我找到了为什么LiquidBase没有执行我的SQL代码。这是因为我的SQL文件有“dbms:mysql”,所以,我如何执行H2 LiquidBase将不适用。

-- changeset 1.0:2 dbms:mysql
command
-- rollback command

现在,我需要知道为什么我在会话中选择的数据库不是myDB。

js5cn81o

js5cn81o1#

我认为在您的情况下,Spring会打开自动配置数据源。(https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/api/org/springframework/boot/test/autoconfigure/orm/jpa/AutoConfigureTestDatabase.Replace.html
试着关掉它。

spring.test.database.replace=none

而且还有一些不必要的配置。

liquibase:
    user: sa
    password: sags

您可以删除用户和密码,liquibase从数据源中使用它。

相关问题