1. 程式人生 > >[spring]數據庫的連接配置

[spring]數據庫的連接配置

關閉 中標 格式 mil epo mtr spec 文件 .org

使用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。

[spring]數據庫的連接配置