• [spring]数据库的连接配置


    使用druid数据源 ,并支持事务处理。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
    
        <!--配置数据源-->
        <!--<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">-->
            <!--<property name="driverClass" value="${jdbc.driver}" />  &lt;!&ndash;数据库连接驱动&ndash;&gt;-->
            <!--<property name="jdbcUrl" value="${jdbc.url}" />     &lt;!&ndash;数据库地址&ndash;&gt;-->
            <!--<property name="user" value="${jdbc.username}" />   &lt;!&ndash;用户名&ndash;&gt;-->
            <!--<property name="password" value="${jdbc.password}" />   &lt;!&ndash;密码&ndash;&gt;-->
            <!--<property name="maxPoolSize" value="40" />      &lt;!&ndash;最大连接数&ndash;&gt;-->
            <!--<property name="minPoolSize" value="1" />       &lt;!&ndash;最小连接数&ndash;&gt;-->
            <!--<property name="initialPoolSize" value="10" />      &lt;!&ndash;初始化连接池内的数据库连接&ndash;&gt;-->
            <!--<property name="maxIdleTime" value="20" />  &lt;!&ndash;最大空闲时间&ndash;&gt;-->
        <!--</bean>-->
    
        <!-- Druid连接池 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
            <!-- 基本属性 url、user、password -->
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
            <property name="driverClassName" value="${jdbc.driver}" />
    
            <!-- 配置初始化大小、最小、最大 -->
            <property name="initialSize" value="3" />
            <property name="minIdle" value="3" />
            <property name="maxActive" value="20" />
    
            <!-- 配置获取连接等待超时的时间 -->
            <property name="maxWait" value="60000" />
    
            <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
            <property name="timeBetweenEvictionRunsMillis" value="60000" />
    
            <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis" value="300000" />
    
            <property name="validationQuery" value="SELECT 1" />
            <property name="testWhileIdle" value="true" />
            <property name="testOnBorrow" value="false" />
            <property name="testOnReturn" value="false" />
    
            <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
            <property name="poolPreparedStatements" value="true" />
            <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
        </bean>
    
        <!--配置session工厂-->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="packagesToScan" value="com.fo.repository.entity" />
            <property name="hibernateProperties">
                <!--<props>-->
                    <!--<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> &lt;!&ndash;hibernate根据实体自动生成数据库表&ndash;&gt;-->
                    <!--<prop key="hibernate.dialect">${hibernate.dialect}</prop>   &lt;!&ndash;指定数据库方言&ndash;&gt;-->
                    <!--<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>     &lt;!&ndash;在控制台显示执行的数据库操作语句&ndash;&gt;-->
                    <!--<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>     &lt;!&ndash;在控制台显示执行的数据哭操作语句(格式)&ndash;&gt;-->
                <!--</props>-->
                <value><!--和上面的props方法是两种设置形式-->
                    hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto}
                    hibernate.dialect=${hibernate.dialect}
                    hibernate.show_sql=${hibernate.show_sql}
                    hibernate.format_sql=${hibernate.format_sql}
                </value>
            </property>
        </bean>
    
        <!-- 事务管理器配置  -->
        <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
    
        <!-- enables scanning for @Transactional annotations -->
        <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" order="2"/>
    </beans>

    关于<tx:annotation-driven>

    一、

    在使用SpringMvc的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx、mvc 等也能很直白的理解出来分别的作用。<tx:annotation-driven/> 就是支持事务注解的(@Transactional) 、<mvc:annotation-driven> 就是支持mvc注解的,说白了就是使Controller中可以使用MVC的各种注解。

    首先,<tx:annotation-driven/> 会有一个属性来指定使用哪个事务管理器,如:<tx:annotation-driven transaction-manager="transactionManager" />。然后事务管理器 transactionManager 会引用 dataSource (如果我们使用JPA或hibernate,也需要指定一个 entityManagerFactory ),dataSouce 肯定就是直接对数据库的了。

    二、

    <tx:annotation-driven>一共有四个属性如下,
    mode:指定Spring事务管理框架创建通知bean的方式。可用的值有proxy和aspectj。前者是默认值,表示通知对象是个JDK代理;后者表示Spring AOP会使用AspectJ创建代理
    proxy-target-class:如果为true,Spring将创建子类来代理业务类;如果为false,则使用基于接口的代理。(如果使用子类代理,需要在类路径中添加CGLib.jar类库)
    order:如果业务类除事务切面外,还需要织入其他的切面,通过该属性可以控制事务切面在目标连接点的织入顺序。
    transaction-manager:指定到现有的PlatformTransaction Manager bean的引用,通知会使用该引用

    三、

    @Transactional标注的位置
    @Transactional注解可以标注在类和方法上,也可以标注在定义的接口和接口方法上。
    如果我们在接口上标注@Transactional注解,会留下这样的隐患:因为注解不能被继承,所以业务接口中标注的@Transactional注解不会被业务实现类继承。所以可能会出现不启动事务的情况。所以,Spring建议我们将@Transaction注解在实现类上。
    在方法上的@Transactional注解会覆盖掉类上的@Transactional。

  • 相关阅读:
    maven的安装教程
    webstorm的中文教程和技巧分享
    WebStorm
    grunt配置任务
    grunt快速入门
    CSS简介
    浅介HTML DOM
    【转】计算机是如何启动的?
    【转】深入理解C++中public、protected及private用法
    【转】VS2013动态库文件的创建及其使用详解
  • 原文地址:https://www.cnblogs.com/afeng2010/p/10323329.html
Copyright © 2020-2023  润新知