在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.pswp.cn/news/370308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370308.shtml
英文地址,請注明出處:http://en.pswp.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;這是有原因的——它提供的靈活性和敏捷性是…