Hsqldb与Spring集成
sumary
分别在服务端和客户端进行配置。由于要与Spring集成作为内置数据库,此处以Server模式运行。
Hsql Server模式配置
在类路径下防止hsqldb服务器端配置文件:
例如 resources/properties/hsqldb.properties
server.database.0=test
server.dbname.0=test
server.remote_open=true
hsqldb.reconfig_logging=false
server.port=8082
代码示例:
package com.xanthus.plugin;
import org.hsqldb.Server;
import org.hsqldb.persist.HsqlProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.SmartLifecycle;
import java.io.InputStream;
import java.util.Properties;
public class InternalDb implements SmartLifecycle {
private final Logger logger = LoggerFactory.getLogger(InternalDb.class);
private Server server;
private boolean running = false;
@Override
public boolean isRunning()
{
if(server != null)
server.checkRunning(running);
return running;
}
@Override
public void start()
{
if(server == null)
{
logger.info("Starting HSQL server...");
server = new Server();
try
{
Properties prop=new Properties();
InputStream is = this.getClass().getResourceAsStream("/properties/hsqldb.properties");
prop.load(is);
HsqlProperties properties=new HsqlProperties(prop);
server.setProperties(properties);
server.start();
running = true;
}catch (Exception e)
{
logger.error("Error starting HSQL server.", e);
stop();
}
}
}
@Override
public void stop()
{
logger.info("Stopping HSQL server...");
if(server != null)
{
server.stop();
running = false;
}
}
@Override
public int getPhase()
{
return 0;
}
@Override
public boolean isAutoStartup()
{
return true;
}
@Override
public void stop(Runnable runnable)
{
stop();
runnable.run();
}
}
由于实现了SmartLifecycle接口,此类会被加入到tomcat的生命周期管理。启动过程中,启动hsqldb服务器。作为嵌入式服务器使用。
在Spring中配置jdbc连接信息
在配置文件中加入以下数据源配置信息
srping.datasource.druid.driver=org.hsqldb.jdbcDriver
srping.datasource.druid.url=jdbc:hsqldb:hsql://localhost:8082/test
srping.datasource.druid.user=sa
srping.datasource.druid.password=
srping.datasource.druid.version=2.4.1
tomcat驱动容器过程中,会看到如下日志打印,表示hsqldb与Spring集成成功。
[Server@2c52d89e]: Initiating startup sequence...
[Server@2c52d89e]: Server socket opened successfully in 2 ms.
[Server@2c52d89e]: Database [index=0, id=0, db=file:test, alias=test] opened successfully in 441 ms.
[Server@2c52d89e]: Startup sequence completed in 446 ms.
[Server@2c52d89e]: 2020-11-22 10:56:20.076 HSQLDB server 2.4.1 is online on port 8082
[Server@2c52d89e]: To close normally, connect and execute SHUTDOWN SQL
[Server@2c52d89e]: From command line, use [Ctrl]+[C] to abort abruptly
需要注意的是,此处有个version配置,也就是hsqldb坐标的版本信息。建议配置上,在调试过程中有出现报错.不明所以(需要查看源码自行研究)。
HSQLDB server version is '2.4.1' \ client version '175.-14.26.18' is not compatible.
连接服务器,写入sql,创建表和数据
找到hsqldb jar包所在的路径。运行指令启用可视化界面.也可以参照官方文档创建批处理指令runmanager.bat或者runManager.sh。启用之后看到如下界面:
java -cp ./hsqldb-2.4.1.jar org.hsqldb.util.DatabaseManager
经过几次尝试,用户名只能用超级用户sa或者SA,不区分大小写。密码为空,点击OK登录。创建新用户也登录不进去,算了就这样吧。
进去之后看到控制台的界面,坐标是表信息,点击可以看到字段基本信息。其他的就没有了。右边文本框用于数据sql,点击execute执行。sql中的字段和表需要用双引号引起来,不然用mybatis驱动去查数据找不到。(默认不引起来,会变成大写,建议还是引用起来)
create table "student" (
"id" int IDENTITY,
"name" varchar(64),
"age" int,
"class_id" int,
primary key("id")
);
comment on column "student"."class_id" is '所在班级id';
insert into "student" ("name","age","class_id") values ('李斯',12,14);
insert into "student" ("name","age","class_id") values ('高渐离',16,13);
insert into "student" ("name","age","class_id") values ('胜七',18,12);
项目搭建与一般的mvc并无区别。写个Controller去访问一把,看看效果。我用的@pathvariable,根据个人爱好可以自己选择传参方式。
DONE。