SpringBoot集成H2数据库加载SQL server脚本踩的一些坑

在使用单元测试的时候会用到junit。springboot整合H2内存数据库,实现单元测试与数据库无关性。
H2的优点
H2是一个短小精干的嵌入式数据库引擎,主要的特性包括:

  • 1、免费、开源、快速;

  • 2、嵌入式的数据库服务器,支持集群;

  • 3、提供JDBC、ODBC访问接口,提供基于浏览器的控制台管理程序;

  • 4、Java编写,可使用GCJ和IKVM.NET编译;

  • 5、短小精干的软件,1M左右。

在pom中引入

		
        
            com.h2database
            h2
            1.4.192
        

配置文件

# 以下为H2数据库配置
# DataSource Config
spring.datasource.driver-class-name=org.h2.Driver
# 每次启动程序,程序都会运行schema.sql文件,对数据库的数据操作
spring.datasource.schema=classpath:db/schema.sql
spring.datasource.data=classpath:data/data.sql
# 配置h2数据库的连接地址
spring.datasource.url=jdbc:h2:mem:test;MODE=MSSQLServer;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false
spring.datasource.username=sa
spring.datasource.password=sa
spring.datasource.schema-username=sa
spring.datasource.schema-password=sa
spring.datasource.data-username=sa
spring.datasource.data-password=sa
spring.h2.console.enabled=true
spring.datasource.initialization-mode=always
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update

schema.sql中是创建测试所需要用到的表的语句。
这里有坑:
1. 直接导出的SQL server脚本中 每个建表语句后的GO删掉。
2. SQL server中有部分关键字H2不支持例如:COLLATE Chinese_Simplified_Pinyin_100_BIN 需要先把关键字删掉
data.sql是创建测试数据的sql语句
如果表中id设置的是自增的话在data.sql中的数据id可能会和本地不一致。
在单元测试类中引用测试的配置文件,加上下面的注解

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@TestPropertySource(locations = "classpath:application-test.properties")

你可能感兴趣的:(Java,数据库,java)