Spring通过JNDI获取在Tomcat容器中配置的C3P0数据源

开始直接使用Spring通过JNDI获取在Tomcat容器中配置的数据源,Tomcat默认的应该是DBCP连接池,没问题,一切OK,由于Hibernate和Spring都推荐使用C3P0连接池,所以就尝试配置一下,没想到整了半下午,才搞定配置,惭愧!网上的内容眼花缭乱,鱼龙混杂,不如自己靠谱!直接上代码,后面附出现的问题!

配置两个地方:

1.Tomcat\conf下的context.xml

2.Spring的配置文件

提示:

1.如果要优化连接池的性能,要对参数进行设置,具体的要看官网!官网最靠谱!官网是王道!

C3P0:http://www.mchange.com/projects/c3p0/

DBCP:http://commons.apache.org/proper/commons-dbcp/

2.C3P0的jar包要放在WEB-INF\lib中,也要放到Tomcat\lib包中

3.通过JNDI配置可以使项目与不同数据库的配置达到解耦的目的

context.xml






1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<!-- DBCP连接池 -->

    <Resource name="jdbc/gdDB" auth="Container" type="javax.sql.DataSource"

    username="scott" password="tiger" driverClassName="oracle.jdbc.driver.OracleDriver"

    url="jdbc:oracle:thin:@localhost:1521:orcl"

    testOnBorrow="true"

    testOnReturn="true"

    testWhileIdle="true"

    validationQuery="SELECT COUNT(*) FROM DUAL"

    maxIdle="30"

    maxWait="5000"

    maxActive="100"

    initialSize="10"/>

                                                                                                                                                                                                                                          

    <!-- C3P0连接池 -->

    <Resource name="jdbc/DB" auth="Container"

    user="scott" password="tiger" driverClass="oracle.jdbc.driver.OracleDriver"

    jdbcUrl="jdbc:oracle:thin:@localhost:1521:orcl"

    maxPoolSize="30"

    minPoolSize="1"

    initialPoolSize="5"

    acquireIncrement="2"

    idleConnectionTestPeriod="60"

    maxIdleTime="60"

    factory="org.apache.naming.factory.BeanFactory"

    type="com.mchange.v2.c3p0.ComboPooledDataSource"/>

applicationContext.xml






1

2

3

4

5

6

7

8

9

10

11

12

13

<!-- 配置JNDI数据源 -->

   <bean id="dataSource"

       class="org.springframework.jndi.JndiObjectFactoryBean">

       <property name="jndiName">

          <!--  <value>java:comp/env/jdbc/c3p0DB</value> -->

          <value>java:comp/env/jdbc/DB</value>

       </property>

   </bean>

   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

       <property name="dataSource">

           <ref bean="dataSource" />

       </property>

   </bean>

出现的问题:

1.javax.naming.NamingException: No set method found for property: username

解决方法:

context.xml中,C3P0连接池的配置参数不正确,开始直接Copy上面的DBCP的配置,后来发现DBCP与C3P0的参数名字是不一样的,包括大小写一定要注意!

2.org.springframework.beans.ConversionNotSupportedException:
Failed to convert property value of type
‘com.mchange.v2.c3p0.mbean.C3P0PooledDataSource‘ to

required type
‘javax.sql.DataSource‘ for property ‘dataSource‘

解决方法:

context.xml中,C3P0连接池的type值配置错误,配置成type="com.mchange.v2.c3p0.ComboPooledDataSource"就OK了!

其它问题就记不太清了!能用就好,有时间再研究优化配置及内部实现原理!

另:发现网上好多贴子说,要配置三处,还有一处是web.xml,但我可检测不需要配置web.xml文件,难道我错了吗?如果有朋友有好的见解,欢迎交流指正,互相学习!

时间: 2024-12-28 00:29:19

Spring通过JNDI获取在Tomcat容器中配置的C3P0数据源的相关文章

源码跟读,Spring是如何解析和加载xml中配置的beans

Spring版本基于: 跟踪代码源码基于: https://github.com/deng-cc/KeepLearning commit id:c009ce47bd19e1faf9e07f12086cd440b7799a63 1.配置启动Spring所需的监听器 web.xml中配置监听器 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-cla

多个Spring Boot项目部署在一个Tomcat容器无法启动

Tomxin7 Simple, Interesting | 简单,有趣 本文将花费您五分钟时间 业务介绍 最近用Spring Boot开发了一个翻译的小项目,但是服务器上还跑着其他项目,包括一个同样用Spring Boot开发的微信后端服务,本次业务需要在阿里云的Linux使用同一个Tomcat容器部署多个项目. 部署环境:JDK8.Tomcat8.Centos7 遇到的问题 我多个项目一直都是部署在同一个Tomcat下,共用80端口,之前使用的MVC或者Servlet项目都没有问题,但是今天把

Spring注解驱动第八讲--容器中bean的生命周期

bean的生命周期指的就是bean在容器中的: 创建-->初始化-->销毁; 以上的过程都是由容器来进行管理. 我们可以自定义初始化和销毁方法,的那个进行到当前bean的生命周期的时候,调用我们自己定义的初始化方法和销毁方法.那么自定义初始化和销毁方法有以下四种方式: 1,指定初始化和销毁方法: 在以往使用xml配置文件的时候可以在<bean>标签中加上"init-method"和"destory-method"属性来指定自定义的初始化和销毁

Tomcat 【中配置连接池和数据源】

四.Tomcat 中配置连接池和数据源   1.DataSource接口介绍   (1)DataSource 概述 JDBC1.0原来是用DriverManager类来产生一个对数据源的连接.JDBC2.0用一种替代的方法,使用DataSource的实现,代码变的更小巧精致,也更容易控制. 一个DataSource对象代表了一个真正的数据源.根据DataSource的实现方法,数据源既可以是从关系数据库,也电子表格,还可以是一个表格形式的文件.当一个DataSource对象注册到名字服务中(JN

Tomcat容器https配置之双向认证

在上一篇https单向认证基础上(如果没看过的,请先移步:http://www.cnblogs.com/leafsunday/p/6885568.html),开始https双向认证之旅. 生成客户端keystore(PKCS12格式,便于导入浏览器) C:\Users\Administrator>keytool -genkeypair -alias client -keyalg RSA -keysize 1024 -keypass changeit -keystore d:/client.p12

Tomcat容器https配置之单向认证

测试环境 Windows 7 IE 11 Intellij IDEA 2017 JDK 1.8.0_25 Tomcat 6.0.36 httpcore 4.4.6 httpclient 4.5.3 keytool:证书生成工具,在JDK 1.4以后的版本中都包含了这一工具,它的位置为<JAVA_HOME>\bin\keytool.exe 单向认证 生成服务端keystore C:\Users\Administrator>keytool -genkeypair -alias server

String框架搭建的基本步骤,及从IOC容器中获取Bean

Spring框架的插件springsource-tool-suite-3.4.0.RELEASE-e4.3.1-updatesite(是一个压缩包)导入步骤: eclipse->help->Instal New Software->点击add,找到该压缩包->选择 Name下面选择带有 /Spring IDC 的多选框->取消最下边的选框  contact all...->next...->finish: 建立一个java project,在工程目录下(day-1

Spring核心技术(一)——IoC容器和Bean简介

IoC容器和Bean简介 这章包括了Spring框架对于IoC规则的实现.Ioc也同DI(依赖注入).而对象是通过构造函数,工厂方法,或者一些Set方法来定义对象之间的依赖的.容器在创建这些Bean对象的时候同时就会注入这些依赖.这个过程是根本上的反转了,不再由Bean本身来控制实例化和定位依赖,而是通过服务定位来控制这个过程,也是IoC(控制反转)的由来. org.springframework.beans和org.springframework.context包是Spring框架IoC容器的

eclipse中配置的tomcat 启动正常 但是访问报404错误

问题描述: 在eclipse中配置的Tomcat,启动是正常的,控制台显示启动成功,也没有报任何错误信息,但是访问的时候就报404错误,然后直接在bin目录下启动startup.bat的方式就是正常的.然后就很纳闷,之后在网上搜了下资料,说是Eclipse的配置出了问题. 解决方案: 1.如果Server里的tomcat启动了,需要先停掉.然后再移除添加的项目 2.之后双击server中配置的tomcat服务器,会弹出如下界面. 3.在Server Locations配置中选择第二个选项,use