我正在使用SpringBoot2,我正在尝试使用H2 Liquibase JUNIT配置一个单元测试。
我认为liquibase没有执行更改日志文件并应用SQL命令,单元测试不识别我的表。
我在文件中放入了错误的sql,以查看是否执行了changelog文件,但似乎没有执行。
为什么我的应用程序不能访问表?也许liquibase没有执行?
在src/test/resource中,我有一个文件:application。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_html" target="_blank">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();
}
}
foRepository方法:
@Query(value = "SHOW TABLES", nativeQuery = true)
List<Object> tables();
当我运行单元测试时,我得到以下结果:
我的变更日志文件位于:src/main/resources/db中
更新:我找到了为什么liquibase没有执行我的sql代码。这是因为我的SQL文件有“dbms:mysql”,所以我使用H2 liquibase执行的方式将不适用。
-- changeset 1.0:2 dbms:mysql
command
-- rollback command
现在,我需要知道为什么会话中选择的数据库不是myDB。
我认为在你的情况下,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
您可以删除用户
我正在使用带有Spring Boot(2.3.3版)的H2数据库和H2数据库的所有默认设置。 这是我申请的所有文件。 pom.xml
我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。 应用程序测试属性如下所示: 在目录resources/db/migration中,我有一个包含这些脚本的sql文件: 但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本: 如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。 你能帮我把飞行道和H2整合起来吗? 谢谢!
如果我在集成测试中使用的是单例数据库容器,那么在每次测试之前,我如何确保数据库处于干净状态(没有数据)?代码库使用Liquibase进行数据迁移。
我正在使用Glassfish应用服务器开发一个web应用程序。我已经安装了H2 DB,现在正试图在glassfish中定义一个连接池,但在尝试ping DB时失败了。 以下是我所做的: > 资源类型:javax。sql。数据源 数据库驱动程序供应商:H2 数据源类名:org。h2.jdbcx。JdbcDataSource 我的“其他属性”包括: 用户:my\u db\u user 当我尝试ping
spring控制台加载另一个数据库 如何正确加载H2数据库?
我们有一个现有的数据库在生产。我们已经决定使用liquibase进行所有进一步的更新,并创建任何新的数据库(如开发或集成)。 如果我们在生产上执行liquibase,它将尝试进行所有的完全更改,即使是那些已经存在的更改,这不会发生,因为除了两个新的更新之外,生产中已经有了所有的更改。现在我们想使用liquibase将这两个更改单独更新到产品中。 我们怎么能做到这一点?