springjdbc:数据源
Posted zs-book1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springjdbc:数据源相关的知识,希望对你有一定的参考价值。
在项目中经常会需要连接数据库,可以使用的数据库有很多,平时我们还用连接池来管理数据库,现在学习了spring,我们知道了,spring的核心功能就是对象创建依赖注入
而我们在使用连接池时,连接对象也是通过DataSource接口获取的,那么怎样使用spring来注入数据库连接信息呢?
学习了spring之后,我们可以将数据库连接对象Connection的创建和关闭交给spring来管理
在spring中默认提供了很多种数据库连接
1.DriverMangerDataSource spring自带数据源
2.DBCP数据源
3.C3P0数据源
4.JNDI数据源
这四种都是spring默认的数据库连接,不过我们平时使用的比较多的还是阿里的druid连接池
下面依次介绍这几种数据源
为了方便我们使用.properties文件来配置连接池信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///test
jdbc.username=root
jdbc.password=123456
1.DriverMangerDataSource
这是spring自带的数据源,它与之前我们使用jdbc创建连接对象时使用的DriverManger一样,只能创建一个对象,不支持连接池
2.DBCP数据源
dbcp数据源依赖两个jar包:
<!--配置dbcp连接池--> <!--BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性, 以便Spring容器关闭时,数据源能够正常关闭。--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="$jdbc.driver"/> <property name="url" value="$jdbc.url"/> <property name="username" value="$jdbc.username"/> <property name="password" value="$jdbc.password"/> <!--设置连接池属性--> <!--设置初始连接数--> <property name="initialSize" value="10"/> <!--最大连接数--> <property name="maxActive" value="15"/> <!--maxActive:最大连接数据库连接数,设置为0时,表示没有限制;--> <property name="maxWait" value="60000"/> <!--defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true;--> <property name="defaultAutoCommit" value="true"/> <!--defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false;--> <property name="defaultReadOnly" value="false"/> <!--maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;--> <property name="maxIdle" value="15"/> <!--validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据, 如你可以简单地设置为:“select count(*) from emp”;--> <property name="validationQuery" value="select count(*) from emp"/> <!--removeAbandoned:是否自我中断,默认是 false;--> <property name="removeAbandoned" value="false"/> <!--removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值;--> <!--<property name="removeAbandonedTimeout" value=""/>--> <!--logAbandoned:是否记录中断事件, 默认为 false;--> <property name="logAbandoned" value="false"/> </bean>
3.C3P0数据源
c3p0是一个开源的jdbc数据源实现项目,依赖于c3p0.jar
<bean id="dataSource" class="com.mchange.v2.c3p0.jboss.C3P0PooledDataSource" destroy-method="close"> <!--内部属性与dbcp一样--> </bean>
4.JNDI数据源
JNDI:Java命名和目录的服务接口
作用:将一些资源(数据源),以目录的形式提供给程序访问
如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源 使用JNDI开放调用者用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。
<bean id="" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="资源路径"/> </bean>
5.Druid连接池
druid可以做什么?
1.替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
2.可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
3.数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和 DruidDataSource都支持PasswordCallback。
4.SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
5.扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。
<!-- 阿里 druid 数据库连接池 --> < bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource"destroy-method = "close" > <!-- 数据库基本信息配置 --> < property name = "url" value = "$url" /> < property name = "username" value = "$username" /> < property name = "password" value = "$password" /> < property name = "driverClassName" value = "$driverClassName" /> < property name = "filters" value = "$filters" /> <!-- 最大并发连接数 --> < property name = "maxActive" value = "$maxActive" /> <!-- 初始化连接数量 --> < property name = "initialSize" value = "$initialSize" /> <!-- 配置获取连接等待超时的时间 --> < property name = "maxWait" value = "$maxWait" /> <!-- 最小空闲连接数 --> < property name = "minIdle" value = "$minIdle" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> < property name = "timeBetweenEvictionRunsMillis" value ="$timeBetweenEvictionRunsMillis" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> < property name = "minEvictableIdleTimeMillis" value ="$minEvictableIdleTimeMillis" /> < property name = "validationQuery" value = "$validationQuery" /> < property name = "testWhileIdle" value = "$testWhileIdle" /> < property name = "testOnBorrow" value = "$testOnBorrow" /> < property name = "testOnReturn" value = "$testOnReturn" /> < property name = "maxOpenPreparedStatements" value ="$maxOpenPreparedStatements" /> <!-- 打开 removeAbandoned 功能 --> < property name = "removeAbandoned" value = "$removeAbandoned" /> <!-- 1800 秒,也就是 30 分钟 --> < property name = "removeAbandonedTimeout" value ="$removeAbandonedTimeout" /> <!-- 关闭 abanded 连接时输出错误日志 --> < property name = "logAbandoned" value = "$logAbandoned" /> </ bean >
平时练习可以只要前四条,用在项目上时建议全写
以上是关于springjdbc:数据源的主要内容,如果未能解决你的问题,请参考以下文章