spring获取DataSource数据源从Tomcat中配置的数据源获取方法--jndi方式

1.配置目的:公司数据库提供内网与外网访问数据库,在家与公司都可以访问,这就需要分情况配置数据源信息,公司项目统一在tomcat中配置数据源信息,不同环境只需要更改tomcat数据源配置信息,不需要对项目配置信息进行修改,方便灵活

2.对于tomcat配置jndi数据源与spring做整合,目前理解不是很深,白天搭建了一下,成功获取数据源连接,目前只提供一种配置方式,至于tomcat配置虚拟目录还不是很了解

3.正式配置:目前这个是整合的c3p0连接池

3.1:\conf\Catalina\localhost目录下新建一个xml文件,文件名与项目名称保持一致(例如spring-02.xml),如果没有文件夹就创建

3.2:spring-02.xml文件配置信息如下

<Context path="/spring-02" displayName="mysql" docBase="${catalina.home}/webapps/spring-02"  reloadable="true" >
    <Resource auth="Container" name="jdbc/sb"
            factory="org.apache.naming.factory.BeanFactory"
            type="com.mchange.v2.c3p0.ComboPooledDataSource"
            driverClass="com.mysql.jdbc.Driver"
            user="root"
            password="123" 
            jdbcUrl="jdbc:mysql:///sb" 
            />
</Context>

其中 path="/..."与项目名保持一致,docBase="${catalina.home}/webapps/spring-02"表示项目部署在webapps包下面,项目名称是spring-02  ,其他信息就是数据库连接信息,注意连接池是c3p0,不同连接池配置不相同  name属性随便配,但要与后面spring的主配置文件中名称一致  tomcat中配置就完成了

3.3:spring的主配置文件配置如下

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName">
                <value>java:comp/env/jdbc/sb</value>
            </property>
</bean>

其中value标签值java:comp/env固定写法,jdbc/sb与tomcat中配置的name属性一致(上面提到)

3.4最后在web.xml中配置jndi引用

<resource-ref>
      <description>mysql</description>
      <res-ref-name>jdbc/spring-02</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-auth>
   </resource-ref>

这一步测试后不用配置也可以访问到数据库,如果访问不到可以加上,如果出现错误信息,则在tomcat的lib文件夹加入相应的jar

c3p0,mysql驱动等相应的jar包

猜你喜欢

转载自blog.csdn.net/csdnbeyoung/article/details/83281170