不管通过何种持久化技术
都必须通过数据连接访问数据库
在Spring中
数据连接是通过数据源获得的
在以往的应用中
数据源一般是 Web应用服务器提供的
在Spring中
你不但可以通过JNDI获取应用服务器的数据源
也可以直接在Spring容器中配置数据源
此外
你还可以通过代码的方式创建一个数据源
以便进行无依赖的单元测试
配置一个数据源
Spring在第三方依赖包中包含了两个数据源的实现类包其一是Apache的DBCP其二是 CP在此重点讲讲CP的配置此后会更新DBCP
<cpconfig>
<defaultconfig>
<!当连接池中的连接耗尽的时候cp一次同时获取的连接数Default: >
<property name=acquireIncrement></property>
<!定义在从数据库获取新连接失败后重复尝试的次数Default: >
<property name=acquireRetryAttempts></property>
<!两次连接中间隔时间单位毫秒Default: >
<property name=acquireRetryDelay></property>
<!连接关闭时默认将所有未提交的操作回滚Default: false >
<property name=autoCommitOnClose>false</property>
<!cp将建一张名为Test的空表并使用其自带的查询语句进行测试如果定义了这个参数那么属性preferredTestQuery将被忽略你不能在这张Test表上进行任何操作它将只供cp测试 使用Default: null>
<property name=automaticTestTable>Test</property>
<!获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常但是数据源仍有效 保留并在下次调用getConnection()的时候继续尝试获取连接如果设为true那么在尝试 获取连接失败后该数据源将申明已断开并永久关闭Default: false>
<property name=breakAfterAcquireFailure>false</property>
<!当连接池用完时客户端调用getConnection()后等待获取新连接的时间超时后将抛出 SQLException如设为则无限期等待单位毫秒Default: >
<property name=checkoutTimeout></property>
<!通过实现ConnectionTester或QueryConnectionTester的类来测试连接类名需制定全路径
Default: commchangevcpimplDefaultConnectionTester>
<property name=connectionTesterClassName></property>
<!指定cp libraries的路径如果(通常都是这样)在本地即可获得那么无需设置默认null即可 Default: null>
<property name=factoryClassLocation>null</property>
<!Strongly disrecommended
Setting this to true may lead to subtle and bizarre bugs
(文档原文)作者强烈建议不使用的一个属性>
<property name=forceIgnoreUnresolvedTransactions>false</property>
<!每秒检查所有连接池中的空闲连接Default: >
<property name=idleConnectionTestPeriod></property>
<!初始化时获取三个连接取值应在minPoolSize与maxPoolSize之间Default: >
<property name=initialPoolSize></property>
<!最大空闲时间秒内未使用则连接被丢弃若为则永不丢弃Default: >
<property name=maxIdleTime></property>
<!连接池中保留的最大连接数Default: >
<property name=maxPoolSize></property>
<!JDBC的标准参数用以控制数据源内加载的PreparedStatements数量但由于预缓存的statements 属于单个connection而不是整个连接池所以设置这个参数需要考虑到多方面的因素
如果maxStatements与maxStatementsPerConnection均为则缓存被关闭Default: >
<property name=maxStatements></property>
<!maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数Default: >
<property name=maxStatementsPerConnection></property>
<!cp是异步操作的缓慢的JDBC操作通过帮助进程完成扩展这些操作可以有效的提升性能
通过多线程实现多个操作同时被执行Default: >
<property name=numHelperThreads></property>
<!当用户调用getConnection()时使root用户成为去获取连接的用户主要用于连接池连接非cp 的数据源时Default: null>
<property name=overrideDefaultUser>root</property>
<!与overrideDefaultUser参数对应使用的一个参数Default: null>
<property name=overrideDefaultPassword>password</property>
<!密码Default: null>
<property name=password></property>
<!定义所有连接测试都执行的测试语句在使用连接测试的情况下这个一显着提高测试速度注意 测试的表必须在初始数据源的时候就存在Default: null>
<property name=preferredTestQuery>select id from test where id=</property>
<!用户修改系统配置参数执行前最多等待秒Default: >
<property name=propertyCycle></property>
<!因性能消耗大请只在需要的时候使用它如果设为true那么在每个connection提交的 时候都将校验其有效性建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能Default: false >
<property name=testConnectionOnCheckout>false</property>
<!如果设为true那么在取得连接的同时将校验连接的有效性Default: false >
<property name=testConnectionOnCheckin>true</property>
<!用户名Default: null>
<property name=user>root</property>
在Hibernate(spring管理)中的配置
<bean id=dataSource class=commchangevcpComboPooledDataSource destroymethod=close>
<property name=driverClass><value>oraclejdbcdriverOracleDriver</value></property>
<property name=jdbcUrl><value>jdbc:oracle:thin:@localhost::Test</value></property>
<property name=user><value>Kay</value></property>
<property name=password><value>root</value></property>
<!连接池中保留的最小连接数>
<property name=minPoolSize value= />
<!连接池中保留的最大连接数Default: >
<property name=maxPoolSize value= />
<!最大空闲时间秒内未使用则连接被丢弃若为则永不丢弃Default: >
<property name=maxIdleTime value= />
<!当连接池中的连接耗尽的时候cp一次同时获取的连接数Default: >
<property name=acquireIncrement value= />
<property name=maxStatements value= />
<property name=initialPoolSize value= />
<!每秒检查所有连接池中的空闲连接Default: >
<property name=idleConnectionTestPeriod value= />
<!定义在从数据库获取新连接失败后重复尝试的次数Default: >
<property name=acquireRetryAttempts value= />
<property name=breakAfterAcquireFailure value=true />
<property name=testConnectionOnCheckout value=false />
</bean>