spring_02_在中間層的使用

一、Spring管理數據源:
  1. 不帶連接池DataSource:
  2. 帶C3P0連接池的DataSource:
  3. 帶C3P0連接池,把連接參數配置在獨立的屬性中的DataSource:




二、Spring對JDBC的支持:
  1. 提供了兩種封裝方式:模板類,DAO支持類
  2. 模板類:SimpleJdbcTemplate---> CRUD
  3. DAO支持類:SimpleJdbcDaoSupport,不推薦使用。


三、Spring的事務管理:Spring提供了針對不同持久化機制的事務管理器。(AOP中的切面類,定義了很多通知)
  如:hibernate有org.springframework.orm.hibernate3.HibernateTransactionManager
 1、事務的參數:
   1) 事務的傳播行爲:
    a) PROPAGATION_REQUIRED:當前方法必須在一個事務中運行。如果一個事務正在運行,該方法將會在那個事務中運行。否則就要開始一個新事務。Spring的TransactionDefinition的默認傳播行爲。
    b) PROPAGATION_SUPPORTS:當前方法不需要事務性上下文。如果有一個事務正在進行,它也可以在這個事務裏運行。
    c) PROPAGATION_MANDATORY:當前方法必須在一個事務中運行。如果有一個事務正在進行,該方法將會在那個事務中運行。如果沒有一個活動的事務,則拋出異常。
    d) PROPAGATION_REQUIRES_NEW:當前方法必須在它自己的事務裏運行。總是開啓一個新的事務,如果有一個事務正在運行,則將在這個方法的運行期間被掛起。
    e) PROPAGATION_NOT_SUPPORTED:當前方法總是非事務地執行。如果有一個事務正在運行,它將在這個方法的運行期間被掛起。
    f) PROPAGATION_NEVER:當前方法不能在一個事務上下文中。如果有一個事務正在運行,則拋出異常。
    g) PROPAGATION_NESTED:如果當前有一事務正在運行,則該方法運行在一個嵌套式事務中。如果沒有活動事務, 則按ROPAGATION_REQUIRED 屬性執行。


  2) 隔離級別:
    a) ISOLATION_DEFAULT:使用數據庫默認的事務隔離級別。Spring的PlatfromTransactionManager的默認隔離級別.
    b) ISOLATION_READ_UNCOMMITTED:它充許另一個事務可以看到這個事務未提交的數據。隔離級別最低。這種隔離級別會產生髒讀,不可重複讀和幻讀。
    c) ISOLATION_READ_COMMITTED: 保證一個事務修改的數據提交後才能被另外一個事務讀取。可能出現不可重複讀和幻讀。
    d) ISOLATION_REPEATABLE_READ: 這種事務隔離級別可以防止髒讀,不可重複讀。
可能出現幻像讀。
    e) ISOLATION_SERIALIZABLE:事務被處理爲順序執行。可以防止髒讀、不可重複讀、幻讀。隔離級別最高。


  3) 只讀狀態:只讀事務只對後端數據庫執行讀操作,後端數據庫可以採用一些優化措施來提高效率。
  4) 事務超時:指定事務在特定秒數後自動回滾,不必等它自己結束。事務超時默認是依賴於事務系統的,或者事務超時沒有被支持。
  5) 回滾規則:定義哪些異常引起事務回滾,哪些不引起。
      默認情況下只在出現RuntimeException纔會回滾,而在出現受檢異常時不回滾。(跟EJB中的回滾行爲一致)
      你可以聲明一個事務在出現特定的受檢異常時能回滾。也可以聲明一個事務在出現特定的非受檢異常時不回滾。


 2、聲明式事務管理
  1) 配置Spring提供的對應持久化技術的事務管理器。
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>


  2) 配置事務參數(配置通知)
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" />
<tx:method name="find*" read-only="true"/>
</tx:attributes>
</tx:advice>


  3) AOP的配置: 
<aop:config>
<!-- 通知者 -->
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.qiujy.service.*.*(..))"/>
</aop:config>


 3.基於註解的事務管理配置:
    1) 配置事務管理器。
    2) 啓用Spring對事務註解的支持:<tx:annotation-driven transaction-manager="transactionManager"/>
    3) 使用@Transactional對相應的類或方法添加事務配置:事務參數的配置參看Spring reference。


四、Spring整合hibernate:
  1. 添加hibernate所需要的包:
  2. 在classpath上添加Hibernate的配置文件。
  3. 在Spring配置文件中添加sessionFactory的配置:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>


  4.爲了解耦。我們給Hibernate的DAO類注入的是SessionFactory。
    如果不考慮侵入性,可以使用Spring提供的HibernateTemplate類,和HibernateDaoSupport類。
  5.hibernate的編碼跟以前沒有區別,事務的管理也是通過Spring的事務管理機制來管理。


五、Spring提供的郵件抽象層


六、Spring提供定時任務調度,整合Quratz框架。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章