SpringBoot:集成H2数据库并持久化,url中mem、file有什么区别?
admin
2024-03-02 22:27:28
0

H2依赖

com.h2databaseh22.1.214

持久化配置

SpringBoot版本是2.3.12.RELEASE,下面有些配置看SpringBoot版本的,比如spring.datasource.schema是这个版本以下的,spring.sql.init.data是更高版本的

./dbfile 是把持久文件生成到程序启动路径下,你也可以自定义其他路径

# 数据源配置
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.schema=classpath:db/h2-schema.sql
spring.datasource.url=jdbc:h2:file:./dbfile
spring.datasource.username=root
spring.datasource.password=root
# 下面是控制台的配置
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

H2 url的含义

先看以下两个常量,代表url开头与后半段,后半段的类型有mem内存模式、file本地文件模式、tcp|ssl远程模式,含义如下(参考http://www.h2database.com/html/features.html#embedded_databases)

TopicURL Format and Examples
Embedded (local) connectionjdbc:h2:[file:][] jdbc:h2:~/test jdbc:h2:file:/data/sample jdbc:h2:file:C:/data/sample (Windows only)
In-memory (private)jdbc:h2:mem:
In-memory (named)jdbc:h2:mem: jdbc:h2:mem:test_mem
Server mode (remote connections) using TCP/IPjdbc:h2:tcp://[:]/[] jdbc:h2:tcp://localhost/~/test jdbc:h2:tcp://dbserv:8084/~/sample jdbc:h2:tcp://localhost/mem:test
Server mode (remote connections) using TLSjdbc:h2:ssl://[:]/[] jdbc:h2:ssl://localhost:8085/~/sample;

org.h2.engine.Constants

	/*** The database URL prefix of this database.*/public static final String START_URL = "jdbc:h2:";/*** The database URL format in simplified Backus-Naur form.*/public static final String URL_FORMAT = START_URL +"{ {.|mem:}[name] | [file:]fileName | " +"{tcp|ssl}:[//]server[:port][,server2[:port]]/name }[;key=value...]";

去驱动里查看,ConnectionInfo里把url截取,然后判断类型,当是file时,把持久化标识persistent标位了true,后续数据库启动和运行都会用到这个标识判断是否持久化

org.h2.engine.ConnectionInfo

	/*** Create a connection info object.** @param u the database URL (must start with jdbc:h2:)* @param info the connection properties or {@code null}* @param user the user name or {@code null}* @param password*            the password as {@code String} or {@code char[]}, or*            {@code null}*/public ConnectionInfo(String u, Properties info, String user, Object password) {u = remapURL(u);originalURL = url = u;if (!u.startsWith(Constants.START_URL)) {throw getFormatException();}if (info != null) {readProperties(info);}if (user != null) {prop.put("USER", user);}if (password != null) {prop.put("PASSWORD", password);}readSettingsFromURL();Object timeZoneName = prop.remove("TIME ZONE");if (timeZoneName != null) {timeZone = TimeZoneProvider.ofId(timeZoneName.toString());}setUserName(removeProperty("USER", ""));name = url.substring(Constants.START_URL.length());parseName();convertPasswords();String recoverTest = removeProperty("RECOVER_TEST", null);if (recoverTest != null) {FilePathRec.register();try {Utils.callStaticMethod("org.h2.store.RecoverTester.init", recoverTest);} catch (Exception e) {throw DbException.convert(e);}name = "rec:" + name;}}	private void parseName() {if (".".equals(name)) {name = "mem:";}if (name.startsWith("tcp:")) {remote = true;name = name.substring("tcp:".length());} else if (name.startsWith("ssl:")) {remote = true;ssl = true;name = name.substring("ssl:".length());} else if (name.startsWith("mem:")) {persistent = false;if ("mem:".equals(name)) {unnamed = true;}} else if (name.startsWith("file:")) {name = name.substring("file:".length());persistent = true;} else {persistent = true;}if (persistent && !remote) {name = IOUtils.nameSeparatorsToNative(name);}}

相关内容

热门资讯

光伏板块突然大跌,晶澳科技澄清... 11月12日,晶澳科技晚间公告,近日,网络上流传关于晶澳太阳能科技股份有限公司的不实言论,引发部分关...
一竿子戳到3000年了 一竿子... 10月23日下午15点05分,黑龙江省自然和生态资源交易中心里,工作人员沈立言拿起电话,通知齐齐哈尔...
鸿海三季度营收净利均创同期新高... 鸿海三季度营收、净利润均创下历年同期新高。其中,消费智能产品因进入传统旺季增幅最大,而AI服务器的强...
买基金像“开盲盒”?监管层出手... 为落实公募基金高质量发展行动方案要求,进一步规范公募基金的主题投资风格管理,近日,中基协起草了《公开...
再加仓!中信证券三季度增持东北... 日前,东北证券股价出现了一定的波动,在上涨多日后,出现了回调。其间,东北证券于11月10日收获了一个...
六氟磷酸锂疯涨,带飞了谁的股价... 每隔几年,六氟磷酸锂的价格就会在资本市场掀起一阵狂潮。11月11日,六氟磷酸锂的价格已涨到12.85...
11月12日这些公告有看头 1... 2025.11.12以下是第一财经对一些重要公告的汇总,供投资者参考。【品大事】北大医药:董事长徐晰...
意外清仓英伟达,软银藏更大野心... 南方财经 21世纪经济报道记者 赖镇桃 报道All in AI后,“赌徒”孙正义正在翻身。当地时间1...
中信证券首席信息官于新利:金融... 红星资本局11月12日消息 今日,在中信证券2026年资本市场年会上,中信证券首席信息官、信息技术中...
亿纬锂能董事长刘金成:质量和技... 红星资本局11月12日消息 今日,2025世界动力电池大会在四川宜宾举办。亿纬锂能(300014.S...