在Spring中嵌入HSQLDB服务器实例

我一直在愉快地使用XAMPP进行开发,直到不得不将其托管在可通过Internet访问的某个地方,供客户端进行测试和使用。 我有一个仅具有384 RAM的VPS,并且需要快速找到一种方法,因此决定将XAMPP安装到VPS中。 由于内存不足,因此当MySQL运行时,即使初始Java堆大小设置为64m,Tomcat也无法启动。 在移至OpenShift之前,我设法将网站临时托管在Jelastic中。

我玩弄了将数据库和应用程序服务器实例合并在1个JVM中的想法,以减少RAM使用(与运行MySQL + Tomcat相比)。 搜索Internet之后,我发现了与Tomcat一起运行HSQL服务器实例的几篇文章。 毫无疑问,我必须先更新站点以使其与HSQL兼容,但是作为POC(概念验证)尝试,我决定探索在Spring容器中运行HSQL服务器实例的可行性。

像在Spring中的bean一样运行HSQL服务器有几个原因:

1.多合一配置。 所需配置的一切都在Spring中完成。 Net中有一些示例可以与Tomcat一起运行HSQL实例,但这需要向Tomcat中添加内容(请参见下面的链接)。

2.应用程序服务器独立性。 “理论上”(用引号表示,因为我仅在Tomcat中成功对其进行了测试),由于一切都在Spring中完成,因此不需要或几乎不需要在应用服务器中进行配置。

HSQL服务器“ bean”还旨在以网络模式(不是进程内(例如,mem或文件))启动实例。 原因如下:

1.“ mem”进程内访问是最快的,但不是持久的。 还有其他一些方法可以使用Spring的spring-jdbc标签来启动“ mem”数据源,这是一种更好的方法。

2.“文件”进程内访问是持久性的,但与“内存”一样,它只能在Java进程内访问。

3.网络模式(hsql)是持久性的,并且可以使用外部JDBC客户端工具访问。 这对于故障排除和验证很有用。

阅读HSQLDB的文档后,下面是执行HSQL服务器实例bean生命周期管理的代码:

package org.gizmo.hsql.spring;import java.io.IOException;
import java.util.Properties;import org.hsqldb.Server;
import org.hsqldb.persist.HsqlProperties;
import org.hsqldb.server.ServerAcl.AclFormatException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.SmartLifecycle;public class HyperSqlDbServer implements SmartLifecycle
{private final Logger logger = LoggerFactory.getLogger(HyperSqlDbServer.class);private HsqlProperties properties;private Server server;private boolean running = false;public HyperSqlDbServer(Properties props){properties = new HsqlProperties(props);}@Overridepublic boolean isRunning(){if(server != null)server.checkRunning(running);return running;}@Overridepublic void start(){if(server == null){logger.info('Starting HSQL server...');server = new Server();try{server.setProperties(properties);server.start();running = true;}catch(AclFormatException afe){logger.error('Error starting HSQL server.', afe);}catch (IOException e){logger.error('Error starting HSQL server.', e);}}}@Overridepublic void stop(){logger.info('Stopping HSQL server...');if(server != null){server.stop();running = false;}}@Overridepublic int getPhase(){return 0;}@Overridepublic boolean isAutoStartup(){return true;}@Overridepublic void stop(Runnable runnable){stop();runnable.run();}
}

简化的Spring配置:

server.database.0=file:d:/hsqldb/demobaseserver.dbname.0=demobaseserver.remote_open=truehsqldb.reconfig_logging=false


在Tomcat中启动Spring时的示例输出:

[Server@1e893ae]: [Thread[pool-2-thread-1,5,main]]: checkRunning(false) entered
[Server@1e893ae]: [Thread[pool-2-thread-1,5,main]]: checkRunning(false) exited
[Server@1e893ae]: Initiating startup sequence...
[Server@1e893ae]: Server socket opened successfully in 7 ms.
Sep 27, 2012 9:26:23 AM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose start
Sep 27, 2012 9:26:23 AM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose end
[Server@1e893ae]: Database [index=0, id=0, db=file:d:/hsqldb/demo
base, alias=demobase] opened sucessfully in 442 ms.
[Server@1e893ae]: Startup sequence completed in 451 ms.
[Server@1e893ae]: 2012-09-27 09:26:23.395 HSQLDB server 2.2.8 is online on port
9001
[Server@1e893ae]: To close normally, connect and execute SHUTDOWN SQL
[Server@1e893ae]: From command line, use [Ctrl]+[C] to abort abruptly


相关链接

  • http://hsqldb.org/doc/2.0/guide/index.html
  • http://dkuntze.wordpress.com/2009/01/28/hsql-on-tomcat/
  • http://www.ibm.com/developerworks/data/library/techarticle/dm-0508bader/


参考: YK的Workshop博客中的JCG合作伙伴 Allen Julia 在Spring中嵌入了HSQLDB服务器实例 。

翻译自: https://www.javacodegeeks.com/2012/11/embedding-hsqldb-server-instance-in-spring.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python与材料计算公式_《从问题到程序:用Python学编程和计算》——2.11 补充材料-阿里云开发者社区...

本节书摘来自华章计算机《从问题到程序:用Python学编程和计算》一书中的第2章,第2.11节,作者 裘宗燕,更多章节内容可以访问云栖社区“华章计算机”公众号查看。2.11 补充材料本书各章的主要内容将围绕着怎样通过编程解决计算问题…

centos 6.9 NTP基准时间服务器配置

时间服务器端 yum install ntp -y vim /etc/ntp.conf 增加允许客户端访问 restrict 192.168.0.0 mask 255.255.0.0 nomodify 配置成自启动 chkconfig ntpd on service ntpd start 客户端配置 每天对时一次 crontab -e * 2 * * * ntpdate 192.168.139.130 转载于:https://www.cn…

hsdfz -- 6.16 -- day1

恩这回不写游记了 按照老师要求记录今天的心里路程:这题似乎可做期望得分150->日部分分似乎不是很显然->a题似乎是结论题,大力猜一波结论->过不了样例,先看b题->b题动态树,似乎可以肝lct->不会维护重链&#xff0c…

课时39.细线表格(理解)

请你设计出以下图片里的这个样式的表格 步骤: 我先来制作一个两行两列的表格 2.将table里的cellspacing设置成0 外边距是不见了,但是和我们想要完成的图片有一定的差距,我们发现这样做出来的图片好像是两条线合并到了一起一样,实…

强制Tomcat通过SLF4J / Logback登录

因此,您将JAR可执行Web应用程序与Tomcat捆绑在一起 (请务必先阅读其中一个)。 但是,开头有这些烦人的Tomcat日志,与我们的应用程序日志无关,并且不可自定义: Nov 24, 2012 11:44:02 PM org.apa…

matlab拼碎纸片过程,碎纸片拼接复原模型

1. 引言破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。企事业、机关、院校和军队基于保密的需要,使用碎纸机对重要文件,单据以及材料进行销毁。一些重要的文件随着时间流逝,残破不全,因此&…

python实现贝叶斯分类器_python实现简单的朴素贝叶斯分类器

本文使用的测试问题是“皮马印第安人糖尿病问题”这个问题包括768个对于皮马印第安患者的医疗观测细节,记录所描述的瞬时测量取自患者的年龄,怀孕和血液检查的次数。所有患者都是21岁以上的女性,所有属性都是数值型,而且属性的单位…

VC++编译MPIR 2.7.0

目录 第1章编译 2 1.1 简介 2 1.2 下载 3 1.3 解决方案 4 1.4 创建项目 5 1.5 复制文件树 6 1.6 不使用预编译头文件 8 1.7 包含目录 9 1.8 定义宏 10 1.9 编译前事件 11 1.10 修改 obj 的位置 13 1.11 编译yasm 14 1.12 编译汇编代码 …

PHP大数据处理【转】

1:硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的。主要影响服务器的速度 有:网络-硬盘读写速度-内存大小-cpu处理速度…

http1.X与2.0

HTTP HTTP 1.X HTTP是建立在TCP协议上的,HTTP协议的瓶颈及优化都是基于TCP协议本身的特性。TCP建立连接时有三次握手 会有1.5RTT的延迟,为了避免每次请求都经历握手待来的延迟,应用层会选择不同策略的http长连接。 HTTP 1.0 连接不能复用以…

php代码清除空格注解,去除php注释和去除空格函数分享

虽然php5中已有php_strip_whitespace方法可以返回删除注释和空格后的PHP源码的功能,为了学习,这里为大家提供一个自己的方法,也可以去除代码中的空白和注释,代码如下:. 代码如下:/*** 去除代码中的空白和注释* param s…

包装的重要性

我记得大约15年前开始学习Java的时候。 我读了很多有关“包装”和“命名空间”的东西,但我完全不了解。 可悲的是:虽然包装的某些方面几乎为业内每个人所了解,但其他方面却并非如此。 因此,让我们看一下哪些软件包最适合。 命名空…

我的python学习笔记全集_我的python学习笔记

(此文是在实际工程中遇到的一些小问题,给予解决和整理。解决方法大多来自网上零散的文章。)1——如下代码,a[1,2,3]bab也是[1,2,3]了,接着a[0]4a[1]5a[2]6此时a变成[4,5,6]了,再看b,a变了之后没有对b进行新的引用&…

课时28.假链接(掌握)

什么是假链接? 就是点击之后不会跳转的链接我们称之为假链接。 假链接存在的意义? 在企业开发前期,其他界面都没有写出来,那么,我们就不知道应该跳转到什么地方,所以就只能使用假链接来代替,…

笔记45 | 代码性能优化建议[转]

地址 笔记45 | 代码性能优化建议[转] 目录 前言避免创建不必要的对象选择Static而不是Virtual常量声明为Static Final避免内部的Getters/Setters使用增强的For循环使用包级访问而不是内部类的私有访问避免使用float类型使用库函数谨慎使用native函数关于性能的误区前言 通常来说…

导弹拦截

链接 分析:经典DP题,最长不下降子序列的变种,同时需要记录路径,用pre[]数组记录当前结点的前一个结点的方法很妙 1 #include "iostream"2 #include "cstdio"3 #include "cstring"4 #include "…

JUnit4参数化和理论示例

我始终依靠TestNG将参数传递给测试方法,以便为我的测试或套件提供一些灵活性。 但是,使用JUnit4可以实现相同的灵活性。 要使用它很简单: package com.marco.test;import java.util.Arrays;import java.util.Collection;import junit.fram…

杨杰matlab神经网络30例,MATLAB神经网络30例

实例1 BP神经网络在非线性函数拟合中的应用11.1 理论基础11.1.1 BP网络概述11.1.2 BP神经网络的MATLAB函数21.2 非线性函数拟合方法6实例2 主元BP神经网络在股票价格预测中的应用122.1 理论基础122.1.1 主成分分析的原理122.1.2 主元神经网络与股票预测142.2 股票价格的预测方法…

HTMLCSS 问题

1.子div使用浮动&#xff0c;父div高度自适应(个人感觉好用) 方法&#xff1a; css: <style> .clear{ clear:both} </style> html&#xff1a;在父div关闭之前添加<div class"clear"></div> 本文转载于:猿2048⇛https://www.mk2048.com/…

python matplotlib数据可视化教程_matplotlib的Python数据可视化和探索——入门指南

matplotlib——最受欢迎的Python库&#xff0c;用于数据可视化和探索我喜欢在Python中使用matplotlib。这是我学会掌握的第一个可视化库&#xff0c;此后一直存在。matplotlib是最受欢迎的用于数据可视化和探索的Python库&#xff0c;这是有原因的——它提供的灵活性和敏捷性是…