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);}}

相关内容

热门资讯

造假泛滥、虫入车间、产能拉胯:... 订阅 快刀财经 ▲ 做您的私人商学院世界药房的致命短板。作者:朱末来源:快刀财经(ID:kuai...
影石创新股价“脚踝斩”,刘靖康... 出品|达摩财经近日,第三方数据公司IDC发布了2026年一季度全球手持智能相机行业报告。报告数据显示...
美股半导体股,集体上涨 美股半... 6月29日,美股三大指数集体高开,道指涨0.29%,纳指涨0.96%,标普500指数涨0.55%。 ...
三只*ST股,将摘星脱帽 st... 6月29日晚间,A股三家*ST公司公告称将“摘星脱帽”。 具体来看,*ST艾艾发布关于撤销退市风险警...
【就业创业典型】大棚逐梦人:一... 编者按:近年来,延安市残疾人工作坚持以习近平新时代中国特色社会主义思想为指导,以促进残疾人事业全面高...
公募基金锚定新质生产力,多维赋... 6月22日消息,中国证监会主席吴清近日在2026陆家嘴论坛上表示,资本市场与新质生产力双向奔赴、相互...
液冷服务器概念震荡走强,冰轮环... 6月22日消息,午后液冷服务器概念震荡走强,冰轮环境9天5板,此前康盛股份涨停,大元泵业、川润股份、...
涉留神峪煤矿事故,国家矿山安全... 6月22日消息,国家矿山安全监察局山西局监察执法八处三级调研员耿青禄涉嫌严重违法,涉通洲集团留神峪煤...
周立成拟任中国投资协会秘书长 6月22日消息,中国投资协会发布关于中国投资协会第五届理事会届中调整负责人人选的公示:周立成,男,汉...
以防长称以军已做好对伊采取独立... 据央视新闻,以色列国防部长卡茨日前在与军事记者的闭门谈话中,阐述了以色列在黎巴嫩、伊朗及加沙地带等多...