java中DriverManager跟DataSource获取getConnection有什么不同

java中DriverManager跟DataSource获取getConnection有什么不同,第1张

java中DriverManager获得连接是直接获取,DataSource获取getConnection是事先通过DriverManager获取了一组连接保存在一个集合中!然后调用getConnection获取连接是直接从该集合中获取而不是去数据获取连接,当关闭连接时,也不是将连接真的关闭,而是将连接再放回DataSource保存连接的集合中!

有JAVA的容器,才方便使用

基于Tomcat利用DataSource

1)JDBC驱动配置

直接利用JDBC编程的话,JDBC驱动放在Web app的WEB-INF/lib下就可以了。

利用DataSource的话,JDBC需要放在app服务器的类目录下:

<Tomcat安装目录>/lib

2)修改contextxml文件

在Tomcat登录DataSource有很多办法,在contextxml里追加<Resource>是最简单的。

文件: <Tomcat安装目录>/conf/Catalina/localhost/<ProjectNamexml>

内容: 追加<Resource>要素

Resource要素

- name,名字。用这个名字取得DataResource

- type,类名。一般javaxsqlDataSource

- auth,认证种类,Application或Container。Application的话,需要写认证代码。

- username

- password

- driverClassName,JDBC驱动的类名

- url,JDBC的URL

例如:

<Context>

。。。。。。。。

<Resource name="jdbc/myds" auth="Container"

type="javaxsqlDataSource"

username="sa" password=""

driverClassName="orghsqldbjdbcDriver"

url="jdbc:hsqldb:hsql://localhost"/>

。。。。。。。。

</Context>

3)使用DataSource

例子:

public void doGet(>

如何创建 DataSource???

 

先看看JDK中对DataSource的描述:

作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。

基本实现 - 生成标准的 Connection 对象

连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。

简单来说,就是获取数据库连接的一个通用接口, 常见的dbcp,c3p0,druid,bonecp都是DataSource的实现

NutDao也选用DataSource作为获取数据库连接的方式, 且只调用其无参数的getConnection()方法, 也是大部分数据库连接池唯一支持的方法

这篇文档该怎么用

直接书写 Java 代码

如果你只是在main方法中尝试一下NutDao的功能,那么请选取Java

通过 NutzIoc 的 JSON 配置文件

Nutz项目中最常见的配置方式, 由NutIoc来管理DataSource和NutDao实例

特别强调, NutDao与NutIoc没有任何依赖关系, NutDao在NutIoc看来,只是普通的bean

通过 NutzIoc 的 XML 配置文件

满足XML强迫症的程序猿, 功能与JSON配置文件类似

再特别特别强调

NutDao几乎不需要任何配置文件(只有一个nutz_jdbc_expertsjs 绝大部分时间你不会遇到它!)

本文说到的js/xml文件,都是NutIoc的文件,不是NutDao的配置文件!!

不要重复创建DataSource,不要重复创建NutDao!!!!!!!

务必参考本小节末尾的提醒!!

内置的SimpleDataSource

Nutz内置,非常适合新手!!无需额外下载其他连接池,方便尝试NutDao的功能

不要生产环境中使用这个DataSource!!

不要用它来测试NutDao的性能!!

自动加载NutDao所支持的数据库的驱动(说白了就是我们认识那几款,不就ClassforName一下嘛)

无额外依赖,适合新手试用

非连接池,配置简单

1b43开始提供,旧版本的Nutz可通过拷贝源文件的方式添加这个类

SimpleDataSource: 直接书写 Java 代码

import orgnutzdaoimplSimpleDataSource;

SimpleDataSource ds = new SimpleDataSource();

//dssetDriverClassName("orgpostgresqlDriver"); //默认加载了大部分数据库的驱动!!

dssetJdbcUrl("jdbc:postgresql://localhost:5432/mydatabase");

dssetUsername("demo");

dssetPassword("123456");

//dsclose(); // 这个DataSource不是一个连接池,所以关不关都行

SimpleDataSource: 通过 NutzIoc 的 JSON 配置文件

{

dataSource : {

type : "orgnutzdaoimplSimpleDataSource",

fields : {

jdbcUrl : 'jdbc:postgresql://localhost:5432/mydatabase',

username : 'demo',

password : '123456'

}

}

}

SimpleDataSource: 通过 NutzIoc 的 XML 配置文件

<ioc xsi:noNamespaceSchemaLocation="nutz-ioc-01xsd">

<obj name="dataSource" type="orgnutzdaoimplSimpleDataSource">

<field name="jdbcUrl"><str>jdbc:postgresql://localhost:5432/mydatabase</str></field>

<field name="username"><str>demo</str></field>

<field name="password"><str>123456</str></field>

</obj>

</ioc>

附送一个完整的NutDao配置js文件

var ioc = {

dao : {

type : "orgnutzdaoimplNutDao",

args : [{refer:"dataSource"}]

},

dataSource : {

type : "orgnutzdaoimplSimpleDataSource",

fields : {

jdbcUrl : 'jdbc:postgresql://localhost:5432/mydatabase',

username : 'demo',

password : '123456'

}

}

}

如何使用这些配置 请看文章末尾

Druid

国产精品连接池,淘宝温少诚意出品,带强大的监控功能哦

druid : 直接书写 Java 代码

import comalibabadruidpoolDruidDataSource;

DruidDataSource dds = new DruidDataSource();

ddssetDriverClassName("orgpostgresqlDriver");

ddssetUrl("jdbc:postgresql://localhost:5432/mydatabase");

ddssetUsername("enzozhong");

ddssetPassword("123");

ddsclose(); // 关闭池内所有连接

druid : 通过 NutzIoc 的 JSON 配置文件

{

dataSource : {

type : "comalibabadruidpoolDruidDataSource",

events : {

depose : 'close'

},

fields : {

driverClassName : "orgpostgresqlDriver",

url : "jdbc:postgresql://localhost:5432/mydatabase",

username : "enzozhong",

password : "123"

}

}

}

druid: 通过 NutzIoc 的 XML 配置文件

<ioc xsi:noNamespaceSchemaLocation="nutz-ioc-01xsd">

<obj name="dataSource" type="comalibabadruidpoolDruidDataSource">

<events>

<depose>close</depose>

</events>

<field name="driverClassName"><str>orgpostgresqlDriver</str></field>

<field name="url"><str>jdbc:postgresql://localhost:5432/mydatabase</str></field>

<field name="username"><str>enzozhong</str></field>

<field name="password"><str>123</str></field>

</obj>

</ioc>

注册了 depose 事件,当整个 Ioc 容器注销时,将 真正 关闭所有池内连接

更多配置

Apache Tomcat 7 连接池

这里使用的是tomcat7新的自带连接,但是,请把其2个jar移到项目的lib中!!

直接书写 Java 代码

import orgapachetomcatjdbcpoolDataSource;

DataSource ds = new DataSource();

dssetDriverClassName("orgpostgresqlDriver");

dssetUrl("jdbc:postgresql://localhost:5432/mydatabase");

dssetUsername("demo");

dssetPassword("123456");

dsclose(); // 关闭池内所有连接

通过 NutzIoc 的 JSON 配置文件

{

dataSource : {

type : "orgapachetomcatjdbcpoolDataSource",

events : {

depose : 'close'

},

fields : {

driverClassName : 'orgpostgresqlDriver',

url : 'jdbc:postgresql://localhost:5432/mydatabase',

username : 'demo',

password : '123456'

}

}

}

通过 NutzIoc 的 XML 配置文件

<ioc xsi:noNamespaceSchemaLocation="nutz-ioc-01xsd">

<obj name="dataSource" type="orgapachetomcatjdbcpoolDataSource">

<events>

<depose>close</depose>

</events>

<field name="driverClassName"><str>orgpostgresqlDriver</str></field>

<field name="url"><str>jdbc:postgresql://localhost:5432/mydatabase</str></field>

<field name="username"><str>demo</str></field>

<field name="password"><str>123456</str></field>

</obj>

</ioc>

注册了 depose 事件,当整个 Ioc 容器注销时,将 真正 关闭所有池内连接

关于 depose 事件,更多详情请参看 事件监听

我把mybatis32的源码下载之后,把里面PooledDataSource类的log输出部分,换成logwarn之后,重新打jar包,放到项目中,日志级别改为info,如:

Java代码

log4jrootLogger=info, stdout, R

log4jappenderstdout=orgapachelog4jConsoleAppender

log4jappenderstdoutlayout=orgapachelog4jPatternLayout

log4jappenderstdoutlayoutConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4jappenderR=orgapachelog4jDailyRollingFileAppender

log4jappenderRFile=/logs/servicelog

log4jappenderRlayout=orgapachelog4jPatternLayout

log4jappenderRlayoutConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4jloggercomibatis = debug

log4jloggercomibatiscommonjdbcSimpleDataSource = debug

log4jloggercomibatiscommonjdbcScriptRunner = debug

log4jloggercomibatissqlmapengineimplSqlMapClientDelegate = debug

log4jloggerjavasqlConnection = debug

log4jloggerjavasqlStatement = debug

log4jloggerjavasqlPreparedStatement = debug

log4jloggerjavasqlResultSet =debug

此时,info级别能够输出warn级别的日志,我的日志显示如下:

Java代码

[service] 2013-04-19 10:30:57,982 - orgapacheibatisdatasourcepooledPooledDataSource -0 [main] WARN orgapacheibatisdatasourcepooledPooledDataSource - PooledDataSource forcefully closed/removed all connections

[service] 2013-04-19 10:30:57,985 - orgapacheibatisdatasourcepooledPooledDataSource -3 [main] WARN orgapacheibatisdatasourcepooledPooledDataSource - PooledDataSource forcefully closed/removed all connections

[service] 2013-04-19 10:30:57,986 - orgapacheibatisdatasourcepooledPooledDataSource -4 [main] WARN orgapacheibatisdatasourcepooledPooledDataSource - PooledDataSource forcefully closed/removed all connections

[service] 2013-04-19 10:30:57,996 - orgapacheibatisdatasourcepooledPooledDataSource -14 [main] WARN orgapacheibatisdatasourcepooledPooledDataSource - PooledDataSource forcefully closed/removed all connections

[service] 2013-04-19 10:30:59,025 - orgapacheibatisdatasourcepooledPooledDataSource -1043 [main] WARN orgapacheibatisdatasourcepooledPooledDataSource - Created connection 22323092

[service] 2013-04-19 10:30:59,076 - orgapacheibatisdatasourcepooledPooledDataSource -1094 [main] WARN orgapacheibatisdatasourcepooledPooledDataSource - Returned connection 22323092 to pool

很明显,这是显示warn的日志信息了。说明mybatis3只是打印了debug级别的日志。

以上就是关于java中DriverManager跟DataSource获取getConnection有什么不同全部的内容,包括:java中DriverManager跟DataSource获取getConnection有什么不同、DataSource是Connection类型,可以调用DataSource的什么方法获得数据库连接、如何创建 DataSource等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9318808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存