`
magic_agate
  • 浏览: 105381 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

hsql listener

    博客分类:
  • java
 
阅读更多
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>
分享到:
评论

相关推荐

    hsql查询语法

    HSQL查询语法 HSQL(Hibernate Query Language)是一种强大且灵活的查询语言,用于查询Hibernate应用程序中的数据。下面将对HSQL的基本语法和使用方法进行详细介绍。 1. 大小写敏感性问题 HSQL查询语句对大小写并...

    收集的全部HSQL DataBase资料(HSQL DataBase-关于Java 的纯数据库)

    HSQL Database,全称为HyperSQL Database,是一款轻量级、高性能、开源的SQL关系型数据库管理系统,特别适合于Java应用程序。这款数据库系统以其简洁的API、快速的性能和全面的SQL支持,在Java开发环境中得到了广泛...

    如何使用hsql数据库

    如何使用hsql数据库

    hsql可视化工具

    HSQL(HyperSQL)是一种轻量级、高性能的关系型数据库管理系统,它支持SQL标准并提供了多种运行模式,包括单用户模式、嵌入式模式和服务器模式。HSQL因其小巧、快速和易于使用而受到开发者们的青睐,尤其适用于开发...

    HSQL安装部署使用手册

    《HSQL数据库安装部署使用详解》 HSQL(HyperSQL)是一种轻量级、高性能的关系型数据库管理系统,常用于开发测试环境或者嵌入式应用。本文将详细介绍HSQL的安装、部署以及使用过程,帮助您顺利搭建并操作HSQL数据库...

    pentaho HSQL连接教程

    ### Pentaho HSQL连接教程 #### 一、前言 Pentaho BI Suite是一款非常强大的商业智能工具,它集成了数据集成、报表设计、仪表板展示等多种功能。本教程将详细介绍如何在Pentaho BI Suite中连接到HSQLDB(HyperSQL ...

    有关hsql处理文本数据库的笔记

    HSQL(HyperSQL)是一个开源的关系型数据库管理系统,它支持内存模式和文件模式,能够处理文本格式的数据,如CSV(逗号分隔值)文件。在本篇笔记中,我们将探讨如何使用HSQL处理文本数据库,特别是如何导入和操作CSV...

    HSQL源代码

    《深入理解HSQL源代码与Eclipse环境搭建》 HSQLDB,全称为HyperSQL Database,是一款开源的关系型数据库管理系统,特别适用于Java应用程序。它的源代码开放,使得开发者能够深入理解其内部工作原理,进行定制化开发...

    Spring数据库访问(HSQL)(三)

    在本篇博文中,我们将深入探讨Spring框架在数据库访问方面的应用,特别关注使用HSQL内存数据库的实践。HSQL数据库是一种轻量级的关系型数据库管理系统,适用于开发测试和快速原型设计,因为它不需要独立服务器进程,...

    Spring数据库访问(HSQL)(四)

    在本篇博文中,我们将深入探讨Spring框架在数据库访问方面的应用,特别关注使用HSQL内存数据库的实践。Spring是Java领域最广泛使用的轻量级框架之一,它为开发者提供了全面的事务管理、数据访问集成以及IoC...

    hsql-file数据库的java简单调用实现

    标题中的“hsql-file数据库的java简单调用实现”指的是使用Java编程语言与HSQLDB(HyperSQL数据库)进行交互,特别是在文件模式下操作数据库。HSQLDB是一种轻量级、开源的关系型数据库管理系统,它支持内存模式和...

    hsql数据库,体积最小的数据库,使用最方便的数据库

    hsql数据库,体积最小的数据库,使用最方便的数据库,不用安装,解压就能用,携带方便

    Hsql的完整demo

    首先说一下hsqldb几个优点 &lt;br&gt; 1. 轻巧,只有600多K,运行速度非常快。结合Hibernate数据库无关的特性,非常适合在项目开发的时候使用。 2. 作为单元测试数据库。单元测试的时候,启动HSQLDB的file模式,...

    HSQL数据库2.2.5

    《HSQL数据库2.2.5:轻量级数据库解决方案详解》 HSQL数据库,全称为HyperSQL Database,是一款开源的、轻量级的Java数据库管理系统,尤其适用于内存模式、单机模式以及分布式多机环境。HSQLDB 2.2.5是其一个重要的...

    hsql及其官方说明书

    **HSQldb详解** HSQldb,全称为HyperSQL Database,是一个完全用Java语言编写的开源关系型数据库管理系统。它的设计目标是提供一个轻量级、高性能、易于使用且完全符合SQL标准的数据库解决方案。...

    用maven构建SpringMVC+JPA+Hibernate+Hsql+jetty的web项目

    【标题】"用maven构建SpringMVC+JPA+Hibernate+Hsql+jetty的web项目"涉及了多个核心的Java Web开发技术,这里我们将深入探讨这些技术以及如何将它们整合到一起。 1. Maven:Maven是Apache的一个开源项目,它是一个...

    HSQL JDBC操作

    标题中的“HSQL JDBC操作”指的是使用Java的JDBC(Java Database Connectivity)接口与HSQLDB(HyperSQL数据库)进行交互。HSQLDB是一个轻量级、开源的关系型数据库管理系统,广泛用于测试和开发环境中,因为它启动...

Global site tag (gtag.js) - Google Analytics