hsql listener

java 代码


package com.b2b.common.web.listener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.Logger;
import org.hsqldb.Server;
import com.cpic.b2b.common.util.StringUtils;

public class HsqlDBlistener implements ServletContextListener {

protected Logger logger = Logger.getLogger(getClass());

private Server server=new Server();
private String path;
private String dbName;
private int port=-1;
public void contextInitialized(ServletContextEvent sce) {
logger.info(" ============= HsqlListener initialize...");
getInitParam(sce);
// 启动数据库
startServer();
}


/**
* 得到数据库路径
* @param sce
* @return
*/
private String getDbPath(ServletContextEvent sce) {
path = sce.getServletContext().getInitParameter("hsql.dbPath");
if (path.startsWith("{user.home}")) {
path = path.replaceFirst("\\{user.home\\}", System.getProperty("user.home").replace('\\', '/'));
}
if (path.startsWith("{webapp.root}")) {
path = path.replaceFirst("\\{webapp.root\\}", sce.getServletContext().getRealPath("/").replace('\\', '/'));
}
return path;
}


/**
* 启动服务
* @param dbPath
* @param dbName
* @param port
*/
private void startServer() {
getServer();
server.start();
logger.info(" ============= hsqldb started...");
// 等待Server启动
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

/**
* 停止服务
*/
private void stopServer() {
getServer();
server.stop();
logger.info(" ============= hsqldb stopped...");
// 等待Server关闭
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
}


/**
* 得到服务
* @param dbPath
* @param dbName
* @param port
*/
private void getServer() {
server.setDatabaseName(0, dbName);
server.setDatabasePath(0, path + dbName);
if (port != -1)
server.setPort(port);
server.setSilent(true);
server.setTrace(true);
}

/**
* 得到初始化的参数
* @param sce
*/
private void getInitParam(ServletContextEvent sce) {
//得到路径
getDPath(sce);
//得到数据库名称
getDName(sce);
// 数据库访问端口
getDPort(sce);
}


private int getDPort(ServletContextEvent sce) {
try {
port = Integer.parseInt(sce.getServletContext().getInitParameter("hsql.port"));
} catch (Exception e) {
e.printStackTrace();
}
return port;
}


/**
* 获取数据库名称
* @param sce
*/
private String getDName(ServletContextEvent sce) {
// 数据库文件名
dbName = sce.getServletContext().getInitParameter("hsql.dbName");
if (StringUtils.isEmpty(dbName)) {
logger.info(" ============= Can't get hsqldb.dbName from web.xml Context Param");
return "";
}
return dbName;
}


/**
* 获取路径
* @param sce
* @return
*/
private String getDPath(ServletContextEvent sce) {
// 获得数据库文件访问路径
path = getDbPath(sce);
if (!path.endsWith("/"))
path = path + "/";
if (StringUtils.isEmpty(path)) {
logger.info(" ============= Can't get hsqldb.path from web.xml Context Param");
logger.debug("hsqldb_path:" + path);
return "";
}
return path;
}



public void contextDestroyed(ServletContextEvent sce) {
logger.info(" ============= HsqlListener destroyed...");
getInitParam(sce);
Connection conn = null;
try {
Class.forName("org.hsqldb.jdbcDriver");
conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:"+port+"/"+dbName+"", "sa", "");
Statement stmt = conn.createStatement();
stmt.executeUpdate("SHUTDOWN;");
logger.info(" ============= hsqldb shutdown...");
} catch (Exception e) {
e.printStackTrace();
}
stopServer();
}


}




web.xml


<context-param>
<param-name>hsql.dbPath</param-name>
<param-value>{webapp.root}/WEB-INF/dbms/db</param-value>
</context-param>
<context-param>
<param-name>hsql.dbName</param-name>
<param-value>message</param-value>
</context-param>
<context-param>
<param-name>hsql.port</param-name>
<param-value>9898</param-value>
</context-param>
<listener>
<listener-class>com.b2b.common.web.listener.HsqlDBlistener</listener-class>
</listener>


spring 数据库配置

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}">
</property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>


jdbc.properties

jdbc.driverClassName=org.hsqldb.jdbcDriver
#jdbc.url=jdbc:hsqldb:hsql:src/DB/message;shutdown=true
jdbc.url=jdbc:hsqldb:hsql://localhost:9898/message
#jdbc.url=jdbc:hsqldb:res:/DB/message
jdbc.username=sa
jdbc.password=

</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值