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

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) {
   ;
  }
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值