设为首页 收藏本站
查看: 944|回复: 0

[经验分享] Tomcat Jdbc数据源初始化过程以及错误Cannot resolve reference to bean 'dataSource' while setti

[复制链接]

尚未签到

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

DSC0001.jpg

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

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

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

DSC0004.jpg

  然后我们再看看DataSource类:里面两个构造函数:
  其中一个构造函数接收一个参数,从参数的命名我们就可以知道这是一个properties文件对象。可以想到这就是我们在之前定义的那个xxx.properties文件:
DSC0005.jpg

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

  到这里数据源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下载
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-339534-1-1.html 上篇帖子: 如何配置tomcat项目的默认页面为.action或其他后缀名的方法(文件) 下篇帖子: 测试jdk,tomcat一切正常,可就是用不了web app,为什么?汗!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表