我一直在愉快地使用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

在Spring中嵌入HSQLDB服务器实例相关推荐

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

    spring hsqldb 我一直在愉快地使用XAMPP进行开发,直到不得不将其托管在可通过Internet访问的某个地方,供客户端进行测试和使用. 我有一个仅具有384 RAM的VPS,并且需要快速 ...

  2. 218.94.78.76:20001/index.php,详解spring中使用Elasticsearch的实例教程

    本篇文章主要介绍了详解spring中使用Elasticsearch的代码实现,具有一定的参考价值,有兴趣的可以了解一下 在使用Elasticsearch之前,先给大家聊一点干货. 1. ES和solr ...

  3. Spring中jdbcTemplate的用法实例

    一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象.        第一种方式:我们可以在自己 ...

  4. Spring中IoC的入门实例

    Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如果来使用的. 数据模型 1.如下 ...

  5. Spring中IoC的入门实例[转]

    Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如果来使用的. 数据模型 1.如下 ...

  6. Spring中使用HSQLDB测试ibatis的dao

    项目是用Spring+ibatis+jsp开发,一直再看敏捷开发方面的文章,虽然没有做到TDD,也没有做到事后测试,和每个方法都测试,但是也是在一直向这个方向努力,也在努力构建可测试的系统而努力.以前 ...

  7. Groovy在Spring中的简单使用实例

    2019独角兽企业重金招聘Python工程师标准>>> 步骤一: 如果你使用的是Eclipse,则需先添加groovy插件,以便操作groovy文件. 可参:http://blog. ...

  8. Spring中ClassPathXmlApplicationContext类的简单使用

    2019独角兽企业重金招聘Python工程师标准>>> 一.简单的用ApplicationContext做测试的话,获得Spring中定义的Bean实例(对象).可以用: Appli ...

  9. (转)Spring中Singleton模式的线程安全

    不知道哪里的文章,总结性还是比较好的.但是代码凌乱,有的还没有图.如果找到原文了可以进行替换! spring中的单例 spring中管理的bean实例默认情况下是单例的[sigleton类型],就还有 ...

最新文章

  1. 平均获客成本_获客成本创新高,英语流利说(LAIX.US)获客难流利
  2. linux遍历文件的编码格式
  3. 「测评」酷炫“霸王龙”Miposaur机器人测评
  4. 百度大脑 EasyDL 专业版最新上线自研超大规模视觉预训练模型
  5. 在android 两个类之间 get,set方法传参使用
  6. 【纪中集训2019.3.25】礼物
  7. 【Django 2021年最新版教程1】windows10+python3.9.5+pycharm2021.1.1+Django3.2.3新建一个web项目 教程
  8. 小程序block标签配合if和else 和 动态修改标题栏
  9. [ISA]部署ISA防火墙策略的十六条守则
  10. 伪原创内容来源的八个渠道
  11. php干啥,php是什么意思?php能干啥?
  12. c++ 箭头符号怎么打_C++编程基础知识二
  13. Fiddler is trying to download some required files to continue with the installation之解决方法
  14. 注意力机制--CBAM的研究
  15. QQ音乐客户端Web页面通用性能优化实践
  16. STM32掌机教程2,掌机的原理
  17. 私人定制(附源码):弹出框统一样式一个JS文件就可以解决!
  18. R语言结构方程SEM中的power analysis 效能检验分析
  19. 【转载】迅雷应用开发(调用迅雷自…
  20. 基于Leaflet实现图标旋转角度的效果(附源代码下载)

热门文章

  1. java本地连接zk集群
  2. aws dynamodb_使用适用于Java 2的AWS开发工具包的AWS DynamoDB版本字段
  3. aws生态系统集成商_通过通用数据访问扩展AWS生态系统
  4. vue中生产模式和调试模式_为什么在生产中进行调试是如此诱人?
  5. 工业互联网二级节点建设_建设者还是二传手?
  6. 什么是openstack_您在OpenStack Summit 2016上错过了什么
  7. 单例嵌套 ios_嵌套类型的前5个用例
  8. swagger api文档_带有Swagger的Spring Rest API –创建文档
  9. 可变对象 不可变对象区别_对象应该是不可变的
  10. 游戏ai 行为树_游戏AI –行为树简介