Hibernate H2 数据库连接配置 URL 解读
H2 是我们常使用的一个内存数据库,通常这个数据库能够帮助我们在测试的时候进行逻辑测试。
如果你使用了 Hibernate 的话,首先需要设置数据库的连接,因为 H2 可以支持内存模式,也可以支持文件模式,我们下面分别对这 2 种模式的配置参数进行一些解读。
内存模式
我们可以使用下面的配置的字符串来进行内存模式的配置:
hibernate.connection.url=jdbc:h2:mem:test;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;INIT=RUNSCRIPT FROM 'classpath:schema/h2.sql'
针对内存模式,需要了解下面的重点,在 JVM 进程启动后,将会在内存中创建一个数据库,当 JVM 内存释放后,你的程序将会关闭最后的连接,当 H2 直到最后的连接被关闭后,H2 数据库将会自动从内存中删除。
jdbc:h2:mem:test
上面的命令将会在内存中创建一个 test 的数据库,这个参数中的 mem 表示的是内存中创建。
MODE=MySQL
创建的数据库使用 MySQL 兼容模式,这样如果你需要对数据库迁移到基于服务器的 MySQL 数据库上的话,你不需要对你的逻辑代码和实体进行修改。
DB_CLOSE_DELAY=-1
在默认情况下,H2 将会在最后的连接退出的时候关闭数据库。针对基于内存的数据库配置的情况下,如果在这个情况下还进行数据库连接的话,很有可能程序将会得到连接丢失的错误,如果你使用了连接池的话,通常在 JVM 退出之前,连接池都会保持有数据库连接,因此这个问题针对使用连接池的情况可能不存在。
如果你没有使用连接池的话,建议将这个参数设置为: ;DB_CLOSE_DELAY=-1
这样能够保证在虚拟机退出之前 H2 数据库不关闭连接。
DB_CLOSE_ON_EXIT=FALSE
这个参数的默认配置为 TRUE。 在默认情况下,H2 将会在最后的连接退出的时候关闭数据库,如果在这个情况下数据库没有被关闭的话,H2 将会在虚拟机退出的时候关闭数据库。
但是在一些特殊的情况下,我们并不希望虚拟机在退出的时候关闭数据库,比如说你还需要使用数据库写入一些虚拟机的情况,或者写入虚拟机的关闭过程等。
因此,在这个情况下,你需要讲这个参数配置为 TRUE。
INIT=RUNSCRIPT FROM ‘classpath:schema/h2.sql’
初始化 SQL 脚本。
通常我们会在这里配置一个初始化的脚本,因为内存数据库在初始化成功后是不会创建数据表和初始化数据的,因此我们需要让第一个链接在链接数据库后直接运行一个脚本来创建数据库,表,同时插入一些数据。
这个配置是在这里设置,classpath:
就是你当前项目的 resources 目录中。
如果下图所示的目录结构。
文件模式
文件模式的情况能够让你的测试数据在文件系统中持久化。
这种模式通常能够让有机会在程序退出的时候检查数据处理是否准确,存储和更新是否有问题。
hibernate.connection.url=jdbc:h2:file:~/h2/test;MODE=MySQL;AUTO_SERVER=TRUE
请参考上面的配置参数,和下面的一些解读。
jdbc:h2:file:~/h2/test
这个配置参数会告诉 H2 在文件系统中创建一个数据库,创建的路径为 ~/h2/test
具体来说,如果你使用的是 Windows 系统,并且当前登录的用户名为 huyuc,那么创建的数据库文件的路径为:C:Usershuyuch2
AUTO_SERVER=TRUE
这个配置模式为 Automatic Mixed Mode。
用土话说就是允许多个进程同时访问数据库。
举例来说,如你运行一个测试环境,但是又想用一个 UI 工具来查看数据库中的数据情况,这个时候你需要讲这个配置参数设置为 TRUE。
因为这里是 2 个进程同时访问数据库,否则你将会得到数据库文件被占用的错误。
相关文章
- 从本体论开始说起——运营商关系图谱的构建及应用
- 如何成为一名数据科学家?
- 从未见过的堂兄杀了人,你的DNA是关键证据
- 20个安全可靠的免费数据源,各领域数据任你挑
- 20个安全可靠的免费数据源,各领域数据任你挑
- 阿里云李飞飞:All in Cloud时代,云原生数据库优势明显
- 基于Hadoop生态系统的一高性能数据存储格式CarbonData(性能篇)
- 大数据告诉你:10年漫威,到底有多少角色
- TigerGraph:实时图数据库助力金融风控升级
- Splunk利用Splunk Connected Experiences和Splunk Business Flow 扩大数据访问
- 大数据开发常见的9种数据分析手段
- 以免在景区看人,我爬了5W条全国景点门票数据...
- 【实战解析】基于HBase的大数据存储在京东的应用场景
- 数据科学家告诉你哪些计算机科学书籍是你应该看的
- Kafka作为大数据的核心技术,你了解多少?
- Spring Boot 整合 Redis 实现缓存操作
- 大数据学习必须掌握的五大核心技术有哪些?
- 基于Antlr在Apache Flink中实现监控规则DSL化的探索实践
- 甲骨文再次被Gartner评为分析型数据管理解决方案魔力象限领导者
- 爬取吴亦凡微博102118条转发数据,扒一扒流量的真假