<!--Web依赖,用于H2 Web Console--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--H2数据库依赖--> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> <!--如果需要执行初始化脚本,则需要该依赖,并且会传递依赖HikariCP数据库连接池--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
DataSourceInitializationConfiguration
是初始化脚本的自动配置类,配置条件之一是@ConditionalOnClass(DatabasePopulator.class)
,该类存在于spring-jdbc
,spring-boot-starter-jdbc
传递依赖spring-jdbc
# 可执行程序的当前路径 spring.datasource.url = jdbc:h2:file:./dbh2/dbc2m;AUTO_SERVER=TRUE # 数据库连接设置 spring.datasource.type = com.zaxxer.hikari.HikariDataSource spring.datasource.driverClassName = org.h2.Driver spring.datasource.username = root spring.datasource.password = 123 # 进行该配置后,每次启动程序,程序都会运行初始化脚本文件文件,对数据库的结构进行操作 spring.sql.init.mode = always # 初始化脚本 spring.sql.init.schema-locations = classpath:db/schema.sql spring.sql.init.data-locations = classpath:db/data.sql # 表明使用的数据库平台是H2 spring.sql.init.platform = H2 # 进行该配置后,H2 Web Consloe就可以在远程访问了,否则只能在本机访问 spring.h2.console.settings.web-allow-others = true # 进行该配置,你就可以通过YOUR_URL/h2访问H2 Web Consloe,YOUR_URL是你程序的访问URl spring.h2.console.path = /h2 # 进行该配置,程序开启时就会启动H2 Web Consloe,默认值false spring.h2.console.enabled = true
spring.sql.init.mode
属性的值embedded
只对:h2:mem
格式的URL有效(其他数据库见EmbeddedDatabaseConnection
),也就是说只有内存数据库才会在embedded模式下运行初始化脚本(原理:AbstractScriptDatabaseInitializer类106行向下debug)
CREATE TABLE USER_INF(id INTEGER PRIMARY KEY,name VARCHAR(100),sex VARCHAR(2));
INSERT INTO USER_INF VALUES(1, 'tom', '男'); INSERT INTO USER_INF VALUES(2, 'jack', '女'); INSERT INTO USER_INF VALUES(3, 'marry', '男'); INSERT INTO USER_INF VALUES(4, 'lucy', '男');
如果在
application.properties
中没有配置数据库连接池,还需要配置数据库连接池,见参考资料SpringBoot + H2 内置数据库
启动 SpringApplication,会在当前目录下创建H2数据库,如下:
登录 H2 Web Console http://localhost:8080/h2
,按照 application.properties 中的配置来填写访问参数,如下:
登录后,可以对 H2 数据库进行操作:
在Web Console连接时报错mem:test
或者mem:YOUR_DBNAME
数据库不存在,H2数据库因为安全原因,不允许在Web Console连接时自动创建不存在的数据库(可以配置成自动创建,自行百度),但也说明在应用程序中配置的数据库没有在应用程序启动时自动创建,这种情况下检查数据库连接池是否配置正确,查看IOC中是否有DataSource相关的Bean(IDEA的Run窗口—>Actuator—>Beans)
查看spring.sql.init.mode
和spring.datasource.url
是否对应上,embedded
模式下只能使用包含:h2:mem
的URL才会初始化
H2数据库在内嵌模式下运行时只能有一个客户端连接,在连接之后,数据库会加锁,可以在application.properties
的URL后加AUTO_SERVER=TRUE
启动混合模式(注意分号隔开),允许开启多个连接,但该参数不支持在内存中运行模式
在应用开发时,可能想使用IDEA的Database窗口查看数据库,但在内嵌模式下,同一时刻只能有应用程序和Database窗口之一连接
使用上述方法配置AUTO_SERVER=TRUE
启动混合模式
Connection type选择Embedded
IDEA的Database窗口连接时使用的是内嵌方式连接(严格来说也不是内嵌),而不是TCP/IP远程连接,网上好多TCP/IP远程连接,试了没成功,启动混合模式时,其他应用连接时使用的URL和配置文件中一样,只不过要改绝对路径
Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库
u/article/details/51858086)