一个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、付费专栏及课程。

余额充值