Tomcat Jdbc数据源初始化过程以及错误Cannot resolve reference to bean 'dataSource' while setting bean property 'da...

今天在做项目的时候,开始一直没有出现问题,后面突然之间出现数据连接数超过某值的问题,因为之前项目使用的数据源是C3P0,上网找了一下关于C3P0的资料,发现很多的人也遇到过同样的问题,这样让我有了改变数据源的想法,通过网上资料对比了现在比较流行的几种数据源,最终我打算使用Tomcat Jdbc数据源。因为Tomcat Jdbc数据源基本和C3P0数据源相同,配置信息也基本相同。并且Jdbc数据源还兼容dbcp数据源。我就参照网上对jdbc数据源的配置进行配置,配置好之后可以正常启动工程。但是,我对比了一下C3P0和jdbc配置,发现其中有些属性的名不相同。

C3P0和JDBC数据源配置信息如下:



那这底层是怎样实现的呢?并且你将属性的名字换成和C3P0的一样的话,启动Tomcat就会报错,报错信息如下:


首先,我只是猜想了一下,因为这些配置信息是在xxx.properties文件中定义的,那底层应该是先读取这个xxx.properties然后通过get方法来获取这些值。但这只是猜想而已,要想知道真正的答案,那就只有看源代码了。因为Tomcat Jdbc数据源需要依赖于tomcat-jdbc.jar这个包,所以要想知道答案,肯定就是看这个jar包了。我用jd-gui.exe将这个jar包反编译了一下,打开目录结构如下:


发现我们很眼熟的两个DataSource和DataSourceFactory打开DataSourceFactory就会发现为什么我们在配置文件中配置的属性名字都是固定的了。如下:


然后我们再看看DataSource类:里面两个构造函数:

其中一个构造函数接收一个参数,从参数的命名我们就可以知道这是一个properties文件对象。可以想到这就是我们在之前定义的那个xxx.properties文件:


我们顺着构造函数进入PoolConfiguration发现这只是一个接口,但是这并不影响我们流程的进行,因为这里面定义了我们所需要的方法,从这里面的方法我们就可以知道这是用来读取xxx.propertie文件的一些get/set方法。


到这里数据源DataSource的创建过程也基本上知晓了,并且我们在配置文件中定义的那些参数名是怎么来的也见分晓了。

PS:如果大家遇到了向上面我错误截图类似的错误信息,首先先检查数据源配置属性的名是否正确。

需要注意的是:jdbc数据源是Tomcat 7.0才有的,如果你使用的是Tomcat6.0及以下,需要导入tomcat-jdbc.jar和tomcat-juli.jar如果你使用的Tomcat 7.0应该就不需要导入这两个jar包了。因为Tomcat目录lib下就已经有这两个jar包了。

tomcat-jdbc.jar和tomcat-juli.jar下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值