zoukankan      html  css  js  c++  java
  • Spring数据源配置

    什么是数据源

    数据源(DataSource)是SUN公司制定的用于获取数据库连接的规范接口。它存在于 javax.sql包中,用来代替 DriverManager 的方式来获取连接。
    DataSource 与 DriverManager 获取连接的不同:
    a)、DriverManager是由SUN公司实现的,它只供了最基本的获取连接的方式;
    b)、DataSource是一个接口,不光SUN可以实现,很多第三方的中间件也可以实现
    DataSource一般有如下三种实现方式:
    a)、标准实现 -- 提供最基本的连接,也就是DriverManager的方式;
    b)、连接池的实现 -- 提供了连接池,是一种可以缓存及管理多个数据库连接的“容器”;
    c)、分布事务的实现 -- 提供了连接池,而且这个池中的连接是支持分布式事务的(Distribute Transaction)

    Spring提供了4种配置数据源的方式:

    • Spring自带的数据源(org.springframework.jdbc.datasource.DriverManagerDataSource)
    • DBCP数据源
    • C3P0数据源
    • JNDI数据源

    配置DriverManagerDataSource

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${jdbc.driverClassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
    </bean>
    
    <context:property-placeholder location="jdbc.properties"/>
    

    配置DBCP数据源

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">         
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />  
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:DEV" />  
        <property name="username" value="root" />     
        <property name="password" value="root" />        
    </bean>
    

    BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性, 以便Spring容器关闭时,数据源能够正常关闭

    配置C3P0数据源

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">        
        <property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/>        
        <property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:DEV"/>        
        <property name="user" value="root"/>        
        <property name="password" value="root"/>        
    </bean> 
    

    ComboPooledDataSource和BasicDataSource一样提供了一个用于关闭数据源的close()方法,这样我们就可以保证Spring容器关闭时数据源能够成功释放

    配置JNDI数据源

    <beans xmlns=http://www.springframework.org/schema/beans      
        xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance      
        xmlns:jee=http://www.springframework.org/schema/jee      
        xsi:schemaLocation="http://www.springframework.org/schema/beans       
        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd       
        http://www.springframework.org/schema/jee      
        http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"> 
        
           
        <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">        
            <property name="jndiName" value="java:comp/env/jdbc/orclight"/>        
        </bean>
        
        <jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/orclight"/>        
    </beans>
    

    如果在 <jee:jndi-lookup>元素里面添加resource-ref=true ,这样给定的jndi-name将会自动添加java:comp/env/前缀

    位于 jee 命名空间下的 jee:jndi-lookup 元素可以用于检索 JNDI 中的任何对象(包括数据源)并将其作为 Spring 的 bean。其中 jndi-name 属性用于指定 JNDI 中资源的名称,如果只设置了 jndi-name 属性,那么就会根据指定的名称查找数据源

    嵌入式数据库

    <jdbc:embedded-database id="dataSource" type="H2">
        <jdbc:script location="classpath:schema.sql" encoding="UTF-8"/>
        <jdbc:script location="classpath:data.sql" encoding="UTF-8"/>
    </jdbc:embedded-database>
    

    <jdbc:embedded-database>type属性设置为H2,表明嵌入式数据库应该是H2数据库,在 <jdbc:embedded-database>中,我们可以不配置也可以配置多个<jdbc:script>元素来搭建数据库

    根据环境装配bean

    <beans xmlns=http://www.springframework.org/schema/beans      
        xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance      
        xmlns:jee=http://www.springframework.org/schema/jee      
        xsi:schemaLocation="http://www.springframework.org/schema/beans       
        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd       
        http://www.springframework.org/schema/jee      
        http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"> 
        
        <beans profile="dev">
            <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">        
                <property name="jndiName" value="java:comp/env/jdbc/orclight"/>        
            </bean>
        
            <jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/orclight"/>
        </beans>
        
        <beans profile="other">
            <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property name="driverClassName" value="${jdbc.driverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </bean>
    
            <context:property-placeholder location="jdbc.properties"/>
        </beans>
        
    </beans>
    

    配置好profile之后,下一步则是激活profile,通过设置spring.profiles.active和spring.profiles.default属性,前者优先级会高于后者,且只会存在一个值

    有多种方式可以设置该属性:

    1. 作为DispatcherServlet的初始化参数

    2. 作为WEB应用上下文参数

    3. 作为JNDI条目

    4. 作为环境变量

    5. 作为JVM的系统属性

    6. 在集成测试类上,使用@ActiveProfiles注解(需要spring集成测试环境)

    • 作为DispatcherServlet的初始化参数
    <servlet>
            <servlet-name>scdp-dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>spring.profiles.default</param-name>
                <param-value>dev</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
    </servlet>
    
    • 作为WEB应用上下文参数
    <context-param>
            <param-name>spring.profiles.default</param-name>
            <param-value>dev</param-value>
    </context-param>
    

    参考

    Spring数据源
    根据环境装配你的bean——Spring中profile的应用
    spring中配置数据源DBCP:basicDataSource和spring提供的DriverManagerDataSource的区别

  • 相关阅读:
    python_django_分页
    python_django_中间件
    python_django_静态文件
    Django项目基础配置和基本使用
    python_django__验证码
    python_django_The requested URL /sunck/login/sunck/showmain/ was not found on this server.错误
    python_django_template_url反向解析
    python_django_template模块
    Andrew Ng机器学习算法入门(一):简介
    Vue.js 条件语句
  • 原文地址:https://www.cnblogs.com/weixia-blog/p/12301915.html
Copyright © 2011-2022 走看看