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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)