spring hsqldb_在Spring中嵌入HSQLDB服务器实例

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中完成,因此无需在appserver中进行任何配置。

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

spring hsqldb

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

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

相关文章

线性回归,logistic回归和一般回归

http://www.cnblogs.com/riskyer/p/3217601.html转载于:https://www.cnblogs.com/focus-z/p/10822757.html

double小数点后最多几位_基金理财买入后,不断亏损,是最多本金亏光,还是会出现负值...

投资基金不会把本金亏光,更不会倒贴钱,基金是一篮子股票,个别股票或许有黑天鹅事件,不可能全部同时出现,持续亏损的话,可能最后面临清盘,有结算流程,会将剩下的份额折算到投资者的账…

tf.layers.flatten

flatten( inputs, nameNone) 参数说明如下: inputs:必需,即输入数据。name:可选,默认为 None,即该层的名称。

JUnit 5 –参数化测试

JUnit 5令人印象深刻,尤其是当您深入研究扩展模型和体系结构时 。 但是从表面上讲,编写测试的地方,开发的过程比革命的过程更具进化性 – JUnit 4上没有杀手级功能吗? 幸运的是,至少有一个:参数化测试。 JU…

RMQ问题-ST表倍增处理静态区间最值

简介 ST表是利用倍增思想处理RMQ问题(区间最值问题)的一种工具。 它能够做到O(nlogn)预处理,O(1)查询的时间复杂度,效率相当不错。 算法 1.预处理 ST表利用倍增的思想。以洛谷的P3865作为例子。我们需要查询某一区间的最大值。 我…

tf.layers.dropout

dropout 是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃, 可以用来防止过拟合,layers 模块中提供了 tf.layers.dropout() 方法来实现这一操作,定义在 tensorflow/python/layers…

nginx是干嘛用的_nginx小技巧 -非root身份运行nginx

简直罪过,写这篇文章完全是一场毫无意义的口水仗引起的,我这人就这样,喜欢拿事实说话,而不是一句话说的让人摸不着头脑!下载源码文件:wget http://nginx.org/download/nginx-1.16.1.tar.gz解压:…

pooling池化

pooling,即池化,layers 模块提供了多个池化方法,这几个池化方法都是类似的,包括 tf.layers.max_pooling1d()、tf.layers.max_pooling2d()、tf.layers.max_pooling3d()、tf.layers.average_pooling1d()、tf.layers.average_pooling…

mysql 数据迁移_MySQL海量数据迁移

数据库迁移本主前一段时间写毕业设计主要使用MySQL,紧锣密鼓的开发了将近一个多月,项目数据层、接口层、数据采集层已经开发完成,算法还在不断的优化提速,由于请了几位大佬帮我做Code Review,所以不得已购买了一个阿里…

数组中重复的数字

解决问题思路1. 代码实现: package j2;import java.util.Arrays;/*** Created by admin on 2019/5/8.*/ public class FindDuplicate {public static void duplicate(int[] numbers,int length,int[]duplication){//边界条件的判断if (numbers null || length0) {r…

eclipse中junit_在Eclipse中有效使用JUnit

eclipse中junit最近,我被卷入了讨论1和一些受感染的同伴2,他们关于我们如何在Eclipse IDE中使用JUnit 。 令人惊讶的是,对话带来了并非所有人都知道的一些“技巧”。 这使我有了写这篇文章的想法,总结了我们的演讲。 谁知道–也许…

BFS迷宫问题模型(具体模拟过程见《啊哈算法》)

题目描述与DFS模型走迷宫那篇一样。小哈被困在迷宫里,小哼解救小哈。 这里用BFS来写。BFS(广搜)与DFS(深搜)的区别就在于,DFS是“不撞南墙不回头”,一条路走到不能再走之后才会回到起始点&#…

Spring Batch可重启性

首先,我要非常感谢Spring的优秀人员,他们花了无数时间来确保Spring Batch作业的可行性,以及发出重新启动作业的神奇能力! 感谢您提供的这个优雅的工具集,它使我们能够浏览大量数据集,同时使我们在跌倒时能够…

tf.clip_by_value()

tf.clip_by_value(A, min, max) 输入一个张量A,把A中的每一个元素的值都压缩在min和max之间。 小于min的让它等于min,大于max的元素的值等于max。

python如何导入seaborn_Seaborn - 导入数据集和库

教 程 目 录 在本章中,我们将讨论如何导入数据集和库.让我们首先了解如何导入库. 导入库 让我们从导入Pandas开始,这是一个管理关系的好库(表格式)数据集. Seaborn在处理DataFrames时非常方便,DataFrames是用于数据分析的最广泛使用的数据结构…

Windows安装Redis(转!)

转自https://www.cnblogs.com/wxjnew/p/9160855.html “现在我已经走到了人生的十字路口边了,我相信,在已走过的人生道路中,我一直知道其中哪一条是正确的,是的,我一直坚信我知道。但是我却从未选择那些正确的道路&…

弃用Java的终结器

JDK-8165641 (“ Deprecate Object.finalize”)已打开以“ deprecate Object.finalize() ”,因为“ finalizer本质上存在问题,使用finalizer可能会导致性能问题,死锁,挂起和其他问题…

python安装mysqlclient_Python-安装mysqlclient(MySQLdb)

mysqlclient(也就是Python3版本的MySQLdb),性能比pymysql好,速度更快及PyMySQL的应用场景;所以一般大项目建议使用MySQLdb 使用pip安装 pip install mysqlclient 安装过程中可能会出现如下问题:解决方法如下…

tesorflow 填充‘same’与‘valid’

源码: #codingutf-8import tensorflow as tf# case 2 input tf.Variable(tf.random_normal([1, 256, 256, 3]))op1 tf.layers.conv2d(inputsinput, filters164, kernel_size(7, 7), strides(2, 2), padding"same", activationtf.nn.relu)op2 tf.layer…

hadoop中两种上传文件方式

记录如何将本地文件上传至HDFS中 前提是已经启动了hadoop成功(nodedate都成功启动) ①先切换到HDFS用户 ②创建一个user件夹 bin/hdfs dfs -mkdir /user (hadoop目录下) 多级创建的时候 hdfs dfs -mkdir -p /wifi/classify 查看创…