java:如何用代码控制H2 Database启动
1、纯手动start/stop
package com.cnblogs.yjmyzz.h2; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import org.h2.tools.Server;
import org.junit.Test; public class H2ServerTest { @Test
public void h2Test() {
start();
crudTest();
stop();
} private Server server; public void start() {
try {
System.out.println("正在启动h2...");
server = Server.createTcpServer(
new String[] { "-tcp", "-tcpAllowOthers", "-tcpPort",
"8043" }).start();
System.out.println("启动成功:" + server.getStatus());
} catch (SQLException e) {
System.out.println("启动h2出错:" + e.toString()); e.printStackTrace();
throw new RuntimeException(e);
}
} public void stop() {
if (server != null) {
System.out.println("正在关闭h2...");
server.stop();
System.out.println("关闭成功.");
}
} public void crudTest() {
try {
Class.forName("org.h2.Driver"); // connect to h2
Connection conn = DriverManager.getConnection(
"jdbc:h2:./h2db/sxaz42b4", "sa", "sa"); Statement stat = conn.createStatement(); // create table
stat.execute("CREATE TABLE TEST(NAME VARCHAR)"); // insert table
stat.execute("INSERT INTO TEST VALUES('菩提树下的杨过')");
stat.execute("INSERT INTO TEST VALUES('http://yjmyzz.cnblogs.com/')"); // retrive data
ResultSet result = stat.executeQuery("select name from test ");
int i = 1;
while (result.next()) {
System.out.println(i++ + ":" + result.getString("name"));
} // drop table
stat.execute("DROP TABLE TEST"); result.close();
stat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
} }
输出:
正在启动h2...
启动成功:TCP server running at tcp://192.168.1.100:8043 (others can connect)
1:菩提树下的杨过
2:http://yjmyzz.cnblogs.com/
正在关闭h2...
关闭成功.
2、借助Spring
<bean id="h2Server" class="org.h2.tools.Server"
factory-method="createTcpServer" init-method="start" destroy-method="stop">
<constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,8043" />
</bean>
示例代码:
package com.cnblogs.yjmyzz.h2; import java.sql.SQLException; import org.h2.tools.Server;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) throws SQLException,
ClassNotFoundException { ApplicationContext context = new ClassPathXmlApplicationContext(
"spring-context.xml"); Server h2Server = context.getBean(Server.class);
System.out.println(h2Server.getStatus()); H2ServerTest test = new H2ServerTest();
test.crudTest(); ((AbstractApplicationContext) context).close(); } }
输出:
TCP server running at tcp://192.168.1.100:8043 (others can connect)
1:菩提树下的杨过
2:http://yjmyzz.cnblogs.com/
注:用Spring注入的方式,不用刻意手动处理h2Server的start/stop
3、随webApp启动时,自动启动h2 server
a) 在web.xml最开头加入下面这段
<!-- h2 -->
<listener>
<listener-class>org.h2.server.web.DbStarter</listener-class>
</listener>
<context-param>
<param-name>db.url</param-name>
<param-value>jdbc:h2:r:/h2db/awbprint/x4z5gjb3</param-value>
</context-param>
<context-param>
<param-name>db.user</param-name>
<param-value>sa</param-value>
</context-param>
<context-param>
<param-name>db.password</param-name>
<param-value>sa</param-value>
</context-param>
<context-param>
<param-name>db.tcpServer</param-name>
<param-value>-tcpAllowOthers</param-value>
</context-param>
注:具体的文件位置及用户名、密码请自行修改,如果只允许本机连接,把
<context-param>
<param-name>db.tcpServer</param-name>
<param-value>-tcpAllowOthers</param-value>
</context-param>
去掉即可.
b) 然后在spring配置中参考下面的内容
<bean id="dataSource" class="org.h2.jdbcx.JdbcConnectionPool"
destroy-method="dispose">
<constructor-arg>
<bean class="org.h2.jdbcx.JdbcDataSource">
<!-- 文件方式:必须与web.xml中配置的h2db文件名一致 -->
<property name="URL" value="jdbc:h2:r:/h2db/awbprint/x4z5gjb3" />
<property name="user" value="sa" />
<property name="password" value="sa" />
</bean>
</constructor-arg>
</bean>
这样,webapp启动时,会先启动h2 server,后面的代码就能连接到h2了。其它应用也可以用 jdbc:h2:tcp://172.21.129.181/r:/h2db/awbprint/x4z5gjb3 的方式连接到该h2 server (中间加粗的红色IP地址,为web server对应的IP地址)
java:如何用代码控制H2 Database启动的更多相关文章
- iOS如何用代码控制以不同屏幕方向打开新页面?
转载:http://blogread.cn/it/article/7765?f=wb#original 代码示例:https://github.com/johnlui/Swift-On-iOS/tre ...
- 使用XML文件和Java代码控制UI界面
Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller,是模型(model)-视图(view)-控制 ...
- java I/O进程控制,重定向 演示样例代码
java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...
- Android学习笔记(9):使用XML文件和Java代码控制UI界面
Android推荐使用XML文件设置UI界面.然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller.是模型(model)-视图(view)-控制 ...
- H2 Database入门
H2 Database做为轻量级的内嵌数据库,功能十分强大,而且运行时只需要一个jar包即可,下表是官网的描述: 更详细的对比见官网页面: http://www.h2database.com/html ...
- H2 database 操作操作内存表
本例开发工具为 NetBeans,使用b2前提安装jdk. 第一步:在官网下载驱动包 :http://www.h2database.com ,本例版本为: h2-1.4.192.jar 第二步:安装开 ...
- 使用Jacoco获取 Java 程序的代码执行覆盖率
Jacoco是Java Code Coverage的缩写,顾名思义,它是获取Java代码执行覆盖率的一个工具,通常用它来获取单元测试覆盖率.它通过分析Java字节码来得到代码执行覆盖率,因此它还可以分 ...
- Spring Boot + Mybatis + H2 database数据库
H2 Database H2 由纯 Java 编写的开源关系数据库,可以直接嵌入到应用程序中,不受平台约束,便于测试. h2数据库特点 (1)性能.小巧 (2)同时支持网络版和嵌入式版本,另外还提供了 ...
- 利用Java Agent进行代码植入
利用Java Agent进行代码植入 Java Agent 又叫做 Java 探针,是在 JDK1.5 引入的一种可以动态修改 Java 字节码的技术.可以把javaagent理解成一种代码注入的方式 ...
随机推荐
- Asp.net MVC的Model Binder工作流程以及扩展方法(3) - DefaultModelBinder
Default Binder是MVC中的清道夫,把守着Model Binder中的最后一道防线.如果我们没有使用Custom Model Binder等特殊处理,那么Model的绑定都是有Defaul ...
- Mongodb源代码阅读笔记:Journal机制
Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODAT ...
- Linux简介及常用命令使用1--linux环境搭建
1.先安装:VMWare10软件 VMware Workstation是一款功能强大的虚拟机软件,可以使你在一台机器上同时运行二个或更多Windows.DOS.LINUX系统,并进行开发.测试.部署新 ...
- SQL SERVER 并发【2015.12.16】
并发控制模型 1.悲观并发控制: A.默认冲突存在,当前进程通过获取当前数据的锁阻止其他进程的访问. B.读与写之间是相互阻塞. 2.乐观并发控制: A.使用行版本控制保持数据被操作前的状态. B ...
- MySQL入门(三)
写了两篇<MySQL入门>以后我发现,写书的人还是都挺有本事的,起码人家知道怎么编排自己想讲的知识点,我实在是不知道该先说那里后说哪里,那我就想到什么讲什么吧. 一 写SQL 其实我是不想 ...
- CentOS下安装Mysql数据库
其实,安装mysql数据库还是比较容易的,安装方式可以分为源码安装和二进制包安装.安装简单,只需要 yum安装几个包就可以搞定,安装后续其实还需要简单做些工作,才可以使用. 环境:CentOS 6.5 ...
- Linux命令总结【待续】
1.打包: tar -czf small.tar.gz small(目录名) ;压缩并打包目录 2.解包: tar zxvf 文件名 date -s 2015 2 12 修改时间 cp name ...
- vsftpd 配置:chroot_local_user与chroot_list_enable详解
chroot_local_user,chroot_list_enable,chroot_list_file三个配置项的解释: chroot_local_user #是否将所有用户限制在主目录,YES为 ...
- C# RGB和HSB相互转换
背景 最近做的项目中有这样一个场景,设置任意一种颜色,得到这种颜色偏深和偏浅的两种颜色.也就是说取该颜色同色系的深浅两种颜色.首先想到的是调节透明度,但效果不理想.后来尝试调节颜色亮度,发现这才是正解 ...
- OpenStack Austin 峰会观察:OpenStack as IaaS 已是过去,Solutions on OpenStack 才是未来
虽然搞 OpenStack 前后也有几年,但是今年在美国 Austin 举办的 OpenStack Summit 我还是第一次参加.回来之后,一直还在回味,觉得要写点东西,将我在这次峰会上的观察和思考 ...