记得在学习研究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驱动程序;
pom.xml
org.springframework.boot
spring-boot-starter-web
2.2.7.RELEASE
mysql
mysql-connector-java
8.0.16
com.h2database
h2
2.1.214
配置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 h2ConsoleServlet() {
ServletRegistrationBean servletRegistration = new ServletRegistrationBean<>(new WebServlet());
servletRegistration.addUrlMappings("/h2-console/*");
servletRegistration.addInitParameter("-webAdminPassword" , "www.chendd.cn");
return servletRegistration;
}
}
(操作界面)
(操作界面)
(1)用户信息存储在http session范围内,包含当前页面执行的Connection,所以最好在执行完毕后,点击退出按钮,释放资源;
(2)设置事务的手动提交,特别是在执行一些修改、删除语句时,防止操作可逆;
(3)设置合理的查询最大行数,限制查询行数,放置查询表数据时有Clob、Blob等类型的大字段;
(4)程序内部启动8082端口,放置端口被其它应用程序所占用;
(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://www.chendd.cn/blog/article/1639568610137288706.html;