- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
让Hsqldb随WebAPP一起启动
首先说一下hsqldb几个优点轻巧,只有600多K,运行速度非常快。结合Hibernate数据库无关的特性,非常适合在项目开发的时候使用。 作为单元测试数据库。单元测试的时候,启动HSQLDB的file模式,数据不存盘,可以保证测试原子性。 来回复制,随身携带。 不需要安装,使用非常方便。 稳定,而且支持的数据量足够大。 小型项目作为现场数据库使用,不需要安装Oracle之类的大型DB,减轻了维护成本,并且,HSQLDB非常容易备份。??????? Hsqldb的各种好处就不再多说了,今天我们谈谈如何让它在我们日常开发中给我们带来更多的便捷。就像标题所说的,让Hsqldb随WebAPP一起启动。比平时用的DB2、Oracle、SQLServer... ...都要简洁方便许多,更重要从开发角度考虑Hsqldb的性能已经足够了。springside也是这么做的。?????? 废话不多说了,现在开始: ?????? 我们借助Listener来实现此功能。?????? 先给出一段该Listener的配置信息吧,*^_^*是存在web.xml里的。xml 代码context-param????????param-namehsql.dbPath/param-name????????param-valueD:/db/param-value????/context-param??????context-param???????param-namehsql.dbName/param-name???????param-valuemydb/param-value????/context-param??????context-param????????param-namehsql.port/param-name????????param-value9002/param-value????/context-param??? ????listener???????listener-class???????????mon.HsqlStartListener ???????/listener-class????/listener??简单解释一下: hsql.dbPath: 采用绝对路径,且是固定的[D:/db]。而在实际应用中在这里我们更需要的是变量[或者说是相对路径],嘻嘻*^_^*不要着急,写这篇文章是为了让大家了解一下。在我们的systop-base项目中就采用了相对路径的方法,在那里你会有惊喜发现。 hsql.dbName:需要说明的是在D:/db目录下确认有mydb.script和perties两个文件. hsql.port:设置hsqldb的端口,默认是9001,防止冲出使用9002。 接下来我们看看Listener是如何实现的:java 代码package?mon; ????import?org.hsqldb.Server; ??import?org.springframework.util.FileCopyUtils; ????import?javax.servlet.ServletContextEvent; ??import?javax.servlet.ServletContextListener; ??import?java.io.File; ??import?java.io.FileOutputStream; ??import?java.io.IOException; ??import?java.sql.Connection; ??import?java.sql.DriverManager; ??import?java.sql.Statement; ?????/** ??*?该类的职责是在WebApp启动时自动开启HSQL服务.?依然使用Server方式,不受AppServer的影响. ??*/??public?class?HsqlListener?implements?ServletContextListener?{ ???? ?/** ?? *?Listener?初始化方法. ?? */???? public?void?contextInitialized(ServletContextEvent?sce)?{ ???? String?dbName?=?sce.getServletContext().getInitParameter(hsql.dbName); ?? String?path?=?sce.getServletContext().getInitParameter(hsql.dbPath); ?? int?port?=?-1; ???? try?{ ?? port?=?Integer
文档评论(0)