derby数据库使用2例

最近由于接手老项目使用了java自带的derby数据库,本来想从网上找些derby的资料看看,但发现网上少的可怜,所以自己试图写2个例子,来说明derby使用中问题和如何改进。

首先第一个例子是基于老项目使用的例子,我在这里把它贴出来:

private static EmbeddedDataSource dataSource = null;

/**
* 初始化数据库连接类
* @Title: init
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param 设定文件
* @return void 返回类型
* @throws
*/
public void init(){
dataSource = new EmbeddedDataSource();
dataSource.setDatabaseName("D:\\springsource\\sts-2.6.0.RELEASE\\DerbyDemo;create=true");
}

public static Connection getConnection() throws SQLException{
return dataSource.getConnection();
}

大家可以看到这种方式的调用是基于内嵌式的调用。但这种调用我发现可能有内存泄漏的问题。我用20个线程每个线程每隔100ms去insert和select一条数据,通过dump下来文件经过MAT分析,发觉org.apache.derby.impl.services.cache.CacheEntry 占用大量内存。如图:

我用的derby已经是10.6.1版本了。所以我怀疑apache为了兼容老版本的方法,所以一直在api中保留这个方法,但内存泄漏问题一直没解决。

然后,我用现在最新的jdbc-pool做了一个例子,没有发现有内存泄漏的问题。这个方法是用网络连接形式。代码如下:

PoolProperties p = new PoolProperties();

//p.setUrl("jdbc:derby:D:\\springsource\\sts-2.6.0.RELEASE\\DerbyDemo;create=true");
/*derby驱动*/
p.setDriverClassName("org.apache.derby.jdbc.ClientDriver");
/*derby URL*/
p.setUrl("jdbc:derby://localhost:1527/DerbyDemo;create=true");
/*用户名*/
//p.setUsername("");
/*密码*/
//p.setPassword("");
/*是否支持JMX*/
p.setJmxEnabled(true);
/*空闲对象回收器开启状态*/
p.setTestWhileIdle(false);
/*取回连接对链接有效性进行检查*/
p.setTestOnBorrow(true);
/*测试连接语句*/
p.setValidationQuery("SELECT 1");
/*测试连接是否有返回*/
p.setTestOnReturn(true);
/*链接测试间隔时间*/
p.setValidationInterval(30000);
/*检查空闲连接的时间间隔*/
p.setTimeBetweenEvictionRunsMillis(30000);
/*最大线程数*/
p.setMaxActive(100);
/*初始线程数*/
p.setInitialSize(10);
/*最大等待时间*/
p.setMaxWait(10000);
/*回收超时连接的时长*/
p.setRemoveAbandonedTimeout(60);
/*逐出空闲时间*/
p.setMinEvictableIdleTimeMillis(30000);
/*最小空闲连接数*/
p.setMinIdle(10);
/*是否自动回收超时链接*/
p.setLogAbandoned(true);
/*是否自动逐出超时链接*/
p.setRemoveAbandoned(true);

p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" + "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");

DataSource datasource = new DataSource();

datasource.setPoolProperties(p);
}

总结:derby作为唯一和jdk1.6捆绑的数据库有着得天独厚的优势,但是用不当也会有很大麻烦,所以是用derby个人感觉最稳妥方法还是是用网络连接方式,内嵌方式很可能造成内存泄漏问题。而且今后数据库连接池是用jdbc-pool也是不错的选择。用例代码不知道如何上传。先不传了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值