|
|
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) { ; } }} |
|