在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);
 }

 @Override
 public boolean isRunning()
 {
  if(server != null)
   server.checkRunning(running);
  return running;
 }

 @Override
 public 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);
   }
  }
 }

 @Override
 public void stop()
 {
  logger.info('Stopping HSQL server...');
  if(server != null)
  {
   server.stop();
   running = false;
  }
 }

 @Override
 public int getPhase()
 {
  return 0;
 }

 @Override
 public boolean isAutoStartup()
 {
  return true;
 }

 @Override
 public void stop(Runnable runnable)
 {
  stop();
  runnable.run();
 }
}

简化的Spring配置:

server.database.0=file:d:/hsqldb/demobase
    server.dbname.0=demobase
    server.remote_open=true
    hsqldb.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


相关链接


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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值