这篇文章主要介绍了Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)自己实现数据源实现代码的相关资料,需要的朋友可以参考下
java 自己实现DataSource实现代码
数据源对象所表示的物理数据源的连接。作为驾驶员管理器工具的替代项数据源能提供最高性能的对数据库的并发访问,数据源技术是Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。
数据源提供了一种简单获取数据库连接的方式,并能在内部通过一个池的机制来复用数据库连接,这样就大大减少了创建数据库连接的次数,提高了系统性能。下面,我们自己动手实现个精简的数据源,代码如下:
公共类我的数据源{
私有链接列表连接连接池=new linked listconnection();
公共MyDataSource() {
for(int I=0;i 10i ) {
连接池。add(新建我的连接(creat connection(),this));
}
}
专用连接创建连接(){
尝试{
返回DriverManager.getConnection(
JDBC:MySQL://localhost:3306/test ',' root ',' root ');
} catch (SQLException e) {
//TODO自动生成的捕捉块
抛出新的exceptioniniinitializerror();
}
}
公共连接getConnection(){
系统。出去。println(连接池。size());
返回连接池。首先删除();
}
公共无效自由连接(连接连接){
System.out.println("数据源关闭连接");
connectionPool.addLast(康涅狄格州);
}
}
Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)代码
公共类我的连接实现连接{
私接连接;
私有我的数据源数据源;
公共连接getConnection() {
返回连接;
}
公共void setConnection(连接连接){
this.connection=连接;
}
公共我的连接(连接真实连接,我的数据源数据源){
这个。连接=真实连接;
这个。数据源=数据源;
}
@覆盖
公共无效关闭()引发SQLException {
//TODO自动生成的方法存根
系统。出去。println("我的连接关闭");
数据来源。自由连接(这个);
}
.
}
我们通过数据源获得的关系是经过包裹后的对象,这里应用到了代理模式。下面我们使用jdk的动态代理来改写我的数据源:
Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)代码
公共类我的数据源{
私有链接列表连接连接池=new linked listconnection();
公共MyDataSource() {
for(int I=0;i 10i ) {
连接池。add(get proxy(creat connection()));
}
}
专用连接GetProxy(最终连接连接){
//TODO自动生成的方法存根
返回(连接)代理。newproxyinstance(this。getclass().getClassLoader(),新类[]{Connection.class},新InvocationHandler(){
@覆盖
公共对象调用(对象代理、方法方法、对象[]参数)
可投掷的
//TODO自动生成的方法存根
对象值;
if(method.getName().equalsIgnoreCase(' close '){
connectionPool.addLast(连接)代理);
系统。出去。println(连接池。size());
返回空
}否则{
值=方法.调用(连接,参数);
}
系统。出去。println(连接池。size());
返回值;
}
});
}
专用连接创建连接(){
尝试{
返回DriverManager.getConnection(
JDBC:MySQL://localhost:3306/test ',' root ',' root ');
} catch (SQLException e) {
//TODO自动生成的捕捉块
抛出新的exceptioniniinitializerror();
}
}
公共连接getConnection(){
系统。出去。println(连接池。size());
返回连接池。首先删除();
}
公共无效自由连接(连接连接){
System.out.println(“数据源关闭连接”);
connectionPool.addLast(康涅狄格州);
}
}
通过这种方式获得的连接是由jdk的动态代理生成的代理对象,它实现了连接接口。
以上两种方式都实现了我们自己的DataSource,我们通过DataSource获得的Connection对象的close方法也被重写了。当连接对象调用close方法时,它将被放入缓存池,而不是关闭对象。
感谢您的阅读,希望能帮到您,也感谢您对本站的支持!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。