Spring中dateSource的配置

本文详细介绍了如何在Spring框架中整合Hibernate,重点讲解了在applicationContext.xml中配置dataSourceBean的过程及各属性的作用。

一句话,Spring对Hibernate的整合,是在applicationContext.xml中配置sessionFactory来实现的,其中sessionFactory中要装配dataSource。下面就详细介绍dataSource Bean的配置。

先上代码(比较齐全的属性)

[html]  view plain copy
  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  2.     destroy-method="close">  
  3.     <property name="driverClassName" value="${driverClassName}" />  
  4.     <property name="url" value="${url}" />  
  5.     <property name="username" value="${username}" />  
  6.     <property name="password" value="${password}" />  
  7.     <!-- 连接初始值,连接池启动时创建的连接数量的初始值 -->  
  8.     <property name="initialSize" value="${initialSize}" />  
  9.     <!-- 连接池的最大值,同一时间可以从池分配的最多连接数量,0时无限制 -->  
  10.     <property name="maxActive" value="${maxActive}" />  
  11.     <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 ,0时无限制-->  
  12.     <property name="maxIdle" value="${maxIdle}" />  
  13.     <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->  
  14.     <property name="minIdle" value="${minIdle}" />  
  15.     <!-- 是否对已备语句进行池管理(布尔值),是否对PreparedStatement进行缓存 -->  
  16.     <property name="poolPreparedStatements" value="true" />  
  17.     <!-- 是否对sql进行自动提交 -->  
  18.     <property name="defaultAutoCommit" value="true" />  
  19. </bean>  

1.Bean的id为dataSource,对应的java类是BasicDataSource,这个类适用于配置基本类型的数据库连接,如果要想进行多数据源,那么该Bean对应的java类就得用DynamicDataSource。

2.destroy-method,表示当该连接销毁时候,会调用BasicDataSource类中的close方法。

3.driverClassName,url,username,password都是基本配置,这些属性的value值是通过外部的属性配置文件引入,具体怎么引入请参见http://blog.youkuaiyun.com/dreamrealised/article/details/9123199中的第三点propertyConfigurer。

4.接下来的属性与数据库连接池有关,数据库连接池的有关基础知识请参见http://blog.youkuaiyun.com/dreamrealised/article/details/9127563

1)initialSize,连接初始值,连接池启动时创建的连接数量的初始值

2)maxActive,连接池的最大值,同一时间可以从池分配的最多连接数量,0时无限制

3)maxIdle,最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 ,0时无限制

4)minIdle,最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请

5)poolPreparedStatements,是否对已备语句进行池管理(布尔值),是否对PreparedStatement进行缓存

6)defaultAutoCommit,是否对sql进行自动提交,进行事务管理的时候往往要关闭jdbc的自动提交功能,事务管理详见http://blog.youkuaiyun.com/dreamrealised/article/details/9123173

### 解决 dataSource.getDriverClass 报错的原因及方法 #### 错误原因分析 `dataSource.getDriverClass()` 出现报错可能有以下几个常见原因: 1. **属性不存在**:如果 `DataSourceService` 或其他数据源配置类中未定义 `getDriverClass` 方法,则调用该方法会引发编译错误[^1]。 2. **依赖库版本不匹配**:某些情况下,使用的第三方库(如 Druid 数据源)可能存在版本差异,导致其 API 不支持 `getDriverClass` 属性或方法[^3]。 3. **拼写错误**:检查是否存在大小写敏感或其他命名约定上的问题。Java 是区分大小写的语言,因此任何细微的拼写错误都会导致无法识别的方法名。 --- #### 解决方案 ##### 方案一:确认并补充缺失的 getter 方法 如果 `DataSourceService` 类确实缺少 `getDriverClass` 方法,可以手动为其添加对应的 getter 方法。以下是示例代码片段: ```java public class DataSourceService { private String driverClass; // 添加 getter 方法 public String getDriverClass() { return this.driverClass; } // 如果需要设置驱动程序名称,还需提供 setter 方法 public void setDriverClass(String driverClass) { this.driverClass = driverClass; } } ``` 通过此方式,确保 `getDriverClass` 方法存在且可被正常调用。 --- ##### 方案二:检查应用配置文件中的参数映射 在 Spring Boot 应用中,通常会在 `application.properties` 文件中指定数据库连接的相关参数。这些参数会被自动注入到相应的 Bean 中。然而,如果配置项名称与实际需求不符,可能导致注入失败。例如,在引用 [3] 的配置中,应确保以下字段已正确定义: ```properties druid.driver-class-name=org.postgresql.Driver ``` 注意这里的键名为 `driver-class-name` 而非 `driverClass`。Spring Boot 默认遵循驼峰命名法转换规则,但如果自定义了 Bean 配置逻辑,则需特别关注这一细节。 --- ##### 方案三:升级或调整依赖版本 当使用外部框架(如 Druid 连接池)时,不同版本间可能会引入兼容性问题。建议查看当前项目的 Maven/Gradle 构建文件,验证所使用的 Druid 版本是否满足功能需求。例如,对于较新的 Druid 版本,推荐如下依赖声明: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency> ``` 同时,查阅官方文档以了解最新版中关于 `driverClassName` 参数的支持情况[^3]。 --- ##### 方案四:调试运行时环境变量冲突 有时即使代码层面无明显问题,仍可能出现因运行时环境变量覆盖而导致的行为异常。可以通过打印日志的方式排查具体加载的值: ```java System.out.println(dataSource.getDriverClassName()); ``` 或者借助 AOP 工具拦截相关方法执行路径,进一步定位潜在隐患。 --- ### 总结 针对 `dataSource.getDriverClass` 报错的情况,可以从以上四个方面逐一排查问题根源,并采取相应措施加以修复。优先级较高的操作包括补全必要的 getter 方法以及核对配置文件的关键字一致性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值