h2database的集成和使用


placeholder image
admin 发布于:2023-03-25 18:03:13
阅读:loading

1.基本介绍

记得在学习研究Spring Session JDBC部分的知识时,从官网的示例中看到了引用了com.h2database坐标,当时的主要目的在于Spring Session JDBC部分,只是略微的注意到了有个在线操作数据库的组件,当时也只是在线登录访问了一下而已。本次则是浅浅的来整合一下该组件,将其整合在Spring Boot的项目环境的示例程序中(在查看该组件的源码时发现是面向JSP程序编写的,索性它并没有使用JPS模板引擎来渲染页面,否则就只能使用外部的Tomcat来运行了,因为Spring Boot默认不支持渲染JPS,打包方式需要为war,不能直接使用jar类型的应用程序访问JSP),在Java Servlet和Spring MVC类型的项目中也同样支持,可参见《摸索Spring Session之基于XML配置版的JDBC介绍》。

网上许多的Spring Boot整合h2database的教程中都在application.properties文件中增加了许多的参数配置,也包括了数据源的配置,那些教程应该是将h2database作为一个数据库去使用,本次示例只是借助这个工具来实现其他数据库的在线操作。同时借着上次示例的实践我并未单独的配置h2database的参数配置,所以本次的实践最终也似乎与Spring Boot关系不大,只是在Spring Boot环境下增加了一个Servlet的配置,具体可详见下文。

说了这么多来简单了解一下h2database,它是一款高性能的开源JDBC API数据库引擎,可以免费使用和分发,支持独立部署服务器模式和嵌入式在各种应用程序中,本文主要集成h2database的控制台应用程序来实现在web页面中实现数据库的在线(增删改查)操作,因其使用JDBC所以支持的数据库范围非常多,由于该数据库是用Java编写的,用Java 8和11进行测试的,因此可以在许多不同的平台上运行。支持所有主要操作系统(Windows, Mac OS X, Linux,…),一些特性如下:

(1)非常快,开源的JDBC API;

(2)嵌入式和服务器模式;基于磁盘或内存中的数据库;

(3)事务支持,多版本并发;

(4)基于浏览器的控制台应用程序;

(5)加密的数据库;

(6)全文搜索;

(7)占用空间小的纯Java:大约2.5 MB jar文件大小;

(8)ODBC驱动程序;

2.代码集成

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.1.214</version>
</dependency>

配置servlet

package cn.chendd.h2console.config;
import ...;
import org.h2.server.web.WebServlet;


/**
 * H2Console 配置类
 *
 * @author chendd
 * @date 2023/3/25 19:09
 */
@Configuration
public class H2ConsoleConfiguration {

    @Bean
    public ServletRegistrationBean<WebServlet> h2ConsoleServlet() {
        ServletRegistrationBean<WebServlet> servletRegistration = new ServletRegistrationBean<>(new WebServlet());
        servletRegistration.addUrlMappings("/h2-console/*");
        servletRegistration.addInitParameter("-webAdminPassword" , "www.chendd.cn");
        return servletRegistration;
    }

}

3.运行示例

配置.gif

(操作界面)

image.png

(操作界面)

4.注意事项

(1)用户信息存储在http session范围内,包含当前页面执行的Connection,所以最好在执行完毕后,点击退出按钮,释放资源;

(2)设置事务的手动提交,特别是在执行一些修改、删除语句时,防止操作可逆;

(3)设置合理的查询最大行数,限制查询行数,放置查询表数据时有Clob、Blob等类型的大字段;

(4)程序内部启动8082端口,放置端口被其它应用程序所占用;

(5)慎用、慎用、慎用;事务回滚、事务回滚、事务回滚;用户退出、用户退出、用户退出;

5.补充说明

(1)目前只在Oracle和MySQL两种数据库版本下实践过,当前文字截图是MySQL数据库,可以看到登录后它展示了所有用户的所有表名称,点击表名称可以给出表的查询语句和展开显示表的所有字段;

(2)在Oracle环境下也是显示所有的用户,默认显示当前的用户schema,其它用户的表或视图均被折叠展示,本例MySQL显示本用户的所有数据库下的表和视图;

(3)最新版本2.1.214的源码中对于Oracle的查询存在问题,集成后发现提示表或视图不存在的问题,经过分析后发现有一段SQL查询逻辑面向的是非Oracle的写法,后来换成1.4.200版本时无此问题;

(4)当表少于100个时显示表的索引结构,见org.h2.engine.SysProperties类,该类定义了许多的配置参数;

(5)WebServlet类中初始化了许多的参数,使用过滤器的方式来增加参数,如增加管理配置的密码参数,详见上文;

(6)项目源码参见:https://gitee.com/88911006/chendd-examples/tree/master/h2console


 点赞


 发表评论

当前回复:作者

 评论列表


留言区