六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 202|回复: 0

一个java嵌入数据库hsql 的web自启动部署

[复制链接]

升级  26%

21

主题

21

主题

21

主题

秀才

Rank: 2

积分
89
 楼主| 发表于 2013-1-14 23:43:07 | 显示全部楼层 |阅读模式
web.xml
============================================
<context-param>
  <param-name>hsql.dbPath</param-name>
  <param-value>/apps/db/</param-value>
</context-param>
<context-param>
  <param-name>hsql.dbName</param-name>
  <param-value>mydb</param-value>
</context-param>
<context-param>
  <param-name>hsql.port</param-name>
  <param-value>9999</param-value>
</context-param>
<listener>
  <listener-class>
   cn.scorpionsoft.distributor.HSQLDBStartListener
  </listener-class>
</listener>
============================================
HSQLDBStartListener.java
package cn.scorpionsoft.distributor;import org.hsqldb.Server;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;/** * 自动开启 HSQLDB 服务 *  * @author 抽支烟 *  */public class HSQLDBStartListener implements ServletContextListener { /**  * 初始化  */ 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.parseInt(sce.getServletContext().getInitParameter(     "hsql.port"));  } catch (Exception e) {   port = 9999;  }  if (dbName == null || dbName.equals("")) {   System.out     .println("Cant' get hsqldb.dbName from web.xml Context Param");   return;  }  File dbDir = new File(path);  if (!dbDir.exists()) {   if (!dbDir.mkdirs()) {    System.out.println("Can not create DB Dir for Hsql:" + dbDir);    return;   }  }  if (!path.endsWith("/")) {   path = path + "/";  }  File scriptFile = new File(path + dbName + ".script");  File propertiesFile = new File(path + dbName + ".properties");  if (propertiesFile.exists()) {   this.startServer(path, dbName, port);     } else {   System.out     .println("Connect failed:Connect Hsqldb error or database files not exits!");  }     } /**  * 启动 Hsqldb 服务的方法。  *   * @param dbPath  *            数据库路径  * @param dbName  *            数据库名称  * @param port  *            端口号  */ private void startServer(String dbPath, String dbName, int port) {  Server server = new Server();// 它可是hsqldb.jar里面的类啊。  server.setDatabaseName(0, dbName);  server.setDatabasePath(0, dbPath + dbName);  if (port != -1) {   server.setPort(port);  }  server.setSilent(true);  server.start();  System.out.println("HSQLDB started...");    }/**  * Listener 销毁方法,在 Web 应用终止的时候执行"shutdown"命令关闭数据库.  */ public void contextDestroyed(ServletContextEvent arg0) {    Connection conn = null;  try {   Class.forName("org.hsqldb.jdbcDriver");   conn = DriverManager.getConnection(     "jdbc:hsqldb:hsql://localhost:9999/mydb", "sa", "");   Statement stmt = conn.createStatement();   stmt.executeUpdate("SHUTDOWN;");  } catch (Exception e) {   ;  } }}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表