`

数据源配置

阅读更多
对于不同的数据库存取需求,我们使用JDBC来解决这个问题,对于不同的数据连接来源需求,Spring则提供了DataSource注入,更换数据来源只要在Bean定义文件中修改配置,而不用修改任何一行程序。

因应不同的系统,应用程序可能使用不同的数据来源,但如纯綷的使用 JDBC、透过连接池、或是透过JNDI等等,数据来源的更动是底层的行为,不应影响到上层的业务逻辑,为此,您可以在需要取得连接来源的Bean上保留一个数据来源注入的接口,让依赖的数据来源由该接口注入。例如我们来写一个简单的Bean:

DataBean.java

package  onlyfun.caterpillar;
                                                                            
import  javax.sql.DataSource;

import  java.sql.Connection;

public   class  DataBean {

     private  DataSource dataSource;
                                                                               
     public   void  setDataSource(DataSource dataSource) {

         this .dataSource  =  dataSource;

    }
                                                                            
     public   void  testDataSource() {

         try  {

            Connection connection  =  dataSource.getConnection();

             if (connection  !=   null )

                System.out.println( " test ok! " );

        }

         catch  (Exception e) {

            e.printStackTrace();

        }

    }

}

这是一个简单的测试Spring DataSource注入的程序,我们透过javax.sql.DataSource接口来注入数据来源,Spring提供了 org.springframework.jdbc.datasource.DriverManagerDataSource来取得 DataSource,它实作了javax.sql.DataSource,您将之当作一个Bean,之后再注入DataBean中即可,Bean定义档可以这么撰写:

<? xml version = " 1.0 "  encoding = " UTF-8 " ?> 

<! DOCTYPE beans PUBLIC  " -//SPRING/DTD BEAN/EN "   " http://www.springframework.org/dtd/spring-beans.dtd " > 

< beans > 

     < bean id = " dataSource "   class = " org.springframework.jdbc.datasource.DriverManagerDataSource " > 

         < property name = " driverClassName " > 

             < value > com.mysql.jdbc.Driver </ value > 

         </ property > 

         < property name = " url " > 

             < value > jdbc:mysql: // localhost:3306/TestDB</value>

         </ property > 

         < property name = " username " > 

             < value > caterpillar </ value > 

         </ property > 

         < property name = " password " > 

             < value > 123456 </ value > 

         </ property > 

     </ bean > 

                                                                               

     < bean id = " dataBean "   class = " onlyfun.caterpillar.DataBean " > 

         < property name = " dataSource " > 

             < ref bean = " dataSource " /> 

         </ property > 

     </ bean > 

</ beans >

如果您之前只使用spring -core.jar这个类别库,您还必须加入 spring-dao.jar, org.springframework.jdbc.datasource.DriverManagerDataSource是包括在这个类别库中,如果您使用的是spring.jar,当中已经包括了,无需加入任何的jar,当然,为了使用JDBC,您必须要有JDBC驱动程序的jar檔。

可以用下面这段程序简单的测试一下:

BeanDefinitionRegistry reg = new DefaultListableBeanFactory();

XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(reg);

                                                                               

reader.loadBeanDefinitions(new ClassPathResource("bean.xml"));;

                                                                              

BeanFactory bf = (BeanFactory) reg;

DataBean dataBean = (DataBean) bf.getBean("dataBean");

dataBean.testDataSource();


DriverManagerDataSource并没有提供连接池的功能,只能作作简单的单机连接测试,现在假设连接测试没有问题了,您想要换上DBCP以获得连接池的功能,则原程序不用更动,只要改改Bean定义档就可以了:

<? xml version = " 1.0 "  encoding = " UTF-8 " ?> 

<! DOCTYPE beans PUBLIC  " -//SPRING/DTD BEAN/EN "   " http://www.springframework.org/dtd/spring-beans.dtd " > 

< beans > 

     < bean id = " dataSource "   class = " org.apache.commons.dbcp.BasicDataSource "  destroy - method = " close " > 

         < property name = " driverClassName " > 

             < value > com.mysql.jdbc.Driver </ value > 

         </ property > 

         < property name = " url " > 

             < value > jdbc:mysql: // localhost:3306/TestDB</value>

         </ property > 

         < property name = " username " > 

             < value > caterpillar </ value > 

         </ property > 

         < property name = " password " > 

             < value > 123456 </ value > 

         </ property > 

     </ bean > 

     < bean id = " dataBean "   class = " onlyfun.caterpillar.DataBean " > 

         < property name = " dataSource " > 

             < ref bean = " dataSource " /> 

         </ property > 

     </ bean > 

</ beans >


现在我们使用的是org.apache.commons.dbcp.BasicDataSource作为注入的 DataSource源,为了使用DBCP的功能,您必须要将commons-dbcp.jar加入CLASSPATH中,另外您还需要commons- pool.jar与commons-collections.jar,这些都可以在Spring的相依版本中的lib目录下找到。

注意到我们在dataSource Bean上宣告了destroy-method,如此可以确保BeanFactory在关闭时也一并关闭BasicDataSource。

如果您要直接使用JDBC来进行数据存储,使用org.springframework.jdbc.datasource.DataSourceUtils来取得Connection会是更好的方式:

Connection conn = DataSourceUtils.getConnection(dataSource);


这样作的好处是,所有的SQLException都被Spring的DataAccessException子类CannotGetJdbcConnectionException包装起来。您可以获得更多的信息,并保证存储层的可移值性。

关闭Connection时,可以用下面的方式:

DataSourceUtils.closeConnectionIfNecessry(connection, dataSource);


如果您的Servlet容器提供了JNDI资料源,您也可以简单的换上这个数据源:

<? xml version = " 1.0 "  encoding = " UTF-8 " ?> 

<! DOCTYPE beans PUBLIC  " -//SPRING/DTD BEAN/EN "   " http://www.springframework.org/dtd/spring-beans.dtd " > 

< beans > 

     < bean id = " dataSource "   class = " org.springframework.indi.JndiObjectFactoryBean " > 

         < property name = " jndiName " > 

             < value > jdbc / TestDB </ value > 

         </ property > 

     </ bean > 

     < bean id = " dataBean "   class = " onlyfun.caterpillar.DataBean " > 

         < property name = " dataSource " > 

             < ref bean = " dataSource " /> 

         </ property > 

     </ bean > 

</ beans >


为了使用org.springframework.indi.JndiObjectFactoryBean,您必须加入 spring-context.jar这个类别库,jndiName实际上要根据您所设定的JNDI查询名称
分享到:
评论

相关推荐

    springboot多数据源配置

    在Spring Boot应用中,多数据源配置是一项重要的技术实践,特别是在大型系统中,可能需要连接到多个数据库以实现数据隔离、读写分离或是分布式事务管理。Spring Boot以其强大的自动化配置能力,使得设置多数据源变得...

    ODBC数据源配置以及数据导入导出

    ODBC 数据源配置是指配置 ODBC 连接数据库的过程,包括配置 Oracle 数据源和 SQL Server 数据源。数据导入导出是指从一个数据库中导出数据,然后将其导入到另一个数据库中。 在 ODBC 数据源配置中,首先需要在控制...

    spring数据源配置

    ### Spring 数据源配置详解 #### 一、Spring与数据源简介 在Java企业级应用开发中,数据库操作是必不可少的一部分。Spring框架作为一种流行的轻量级Java应用开发框架,提供了强大的数据库访问支持,其中包括对数据...

    spring boot多数据源配置

    在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...

    jeecg3.5多数据源配置说明

    Jeecg是一款强大的企业级快速开发平台,它支持多数据源配置,允许用户根据业务场景灵活切换和管理不同的数据库。在Jeecg 3.5版本中,实现多数据源配置是一项重要的功能,使得开发者可以更高效地处理多数据库环境下的...

    JNDI数据源配置(tomcat)

    "JNDI 数据源配置(tomcat)" JNDI(Java Naming and Directory Interface)是一种Java API,用于访问命名和目录服务。JNDI 数据源配置是 Java Web 应用程序中常用的数据库连接方式。Tomcat 是一个流行的 Java Web ...

    ssm实现多数据源配置

    在实际项目中,有时我们需要访问多个数据库,这时就需要实现多数据源配置。 在SSM框架中实现多数据源配置,主要涉及以下几个关键步骤和知识点: 1. **配置文件设置**:首先,你需要在`applicationContext.xml`或`...

    SSM(Spring+SpringMVC+MyBatis)多数据源配置框架

    在多数据源配置中,Spring能够帮助管理不同的数据源,通过配置bean来切换和控制数据源的使用。 **SpringMVC** 是Spring框架的一部分,专为Web开发设计。它简化了模型-视图-控制器(Model-View-Controller,MVC)的...

    mysql多数据源配置

    MySQL多数据源配置是数据库管理中的一个重要概念,它允许应用程序同时连接并操作多个数据库,以满足复杂的业务需求或实现数据的高效同步。这种配置在分布式系统、数据迁移、读写分离、故障切换等场景中非常常见。...

    Weblogic JDBC 数据源配置和详细参数说明

    Weblogic JDBC 数据源配置和详细参数说明 一、JDBC 概述 JDBC(Java Database Connectivity)是 Java 语言中的一种标准数据库连接技术,几乎所有需要访问数据库的 J2EE 应用程序都直接或间接地使用了它。JDBC 提供...

    Springboot+Mybatis+Druid多数据源配置

    在多数据源场景下,我们可以通过Spring Boot的@ConfigurationProperties特性来配置不同的数据源。每个数据源都需要定义一套包括URL、用户名、密码和驱动类名等属性。例如: ```java @Configuration @...

    Springboot+mybatis+druid多数据源配置(oracle+mybatis)

    总结,Spring Boot结合Mybatis和Druid实现多数据源配置的过程包括:配置数据源、配置Mybatis、创建数据源切换器、以及针对不同数据库的测试。这一过程涉及了Spring Boot的自动配置、依赖注入、配置属性绑定等多个...

    springmvc +shiro+querydsl+jpa框架多数据源配置详细说明

    Spring MVC + Shiro + QueryDSL + JPA 框架多数据源配置详细说明 Spring MVC + Shiro + QueryDSL + JPA 框架多数据源配置是当前 Web 应用程序中常见的技术栈组合。该技术栈组合可以提供强大的安全认证、数据查询和...

    springboot多数据源配置(sqlserver,mysql)

    在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们连接并操作多个数据库,例如MySQL和SQL Server。在本场景中,我们将探讨如何在Spring Boot中设置和管理这样的多数据源配置。 首先,我们需要了解`...

    java+hibernate双数据源配置

    双数据源配置是指在一个应用中同时管理两个或更多的数据源,每个数据源可以连接到不同的数据库。在SpringBoot框架中,我们通常会使用`@ConfigurationProperties`注解来配置数据源,并通过`@Primary`注解指定默认数据...

    spingboot多数据源配置实例

    在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时连接并操作多个数据库。这在诸如数据隔离、读写分离、分布式系统等场景下尤其有用。本实例将探讨如何在Spring Boot项目中实现多数据源配置,并...

    Springboot mybatis多数据源配置项目实例

    在多数据源配置中,我们将为每个数据源创建一个单独的数据源配置类,继承自 `AbstractRoutingDataSource`。`AbstractRoutingDataSource` 是 Spring 提供的一个抽象类,它可以根据当前的上下文动态地决定使用哪个数据...

Global site tag (gtag.js) - Google Analytics