1.spring事務管理:
<!-- 事務管理器 -->
<bean id="txM" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 事務管理器的進一步包裝:指定事務屬性
ACID:原子性 一緻性 隔離性 持久性
隔離性:1.讀未送出 并發性最好, 導緻髒讀
2.讀送出 并發性較好 可防止髒讀,但不能防止不可重複讀
3.可重複讀 并發性不好 可防止髒讀和不可重複讀,不可防治幻影讀
4.序列化讀 并發性極差 可防止髒讀和不可重複讀和幻影讀
傳播性:REQUIRED==必須要有事務環境,如果已經處于事務環境,則融入目前事務,如果沒有事務環境,則開始事務
SUPPORTS==不強制要求有事務環境,有則融入,沒有則在非事務環境下運作
隻讀屬性:
復原規則:
-->
<tx:advice id="txManager" transaction-manager="txM">
<tx:attributes>
<!-- 以業務方法為機關,設定事務屬性 -->
<tx:method name="insertUser" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="deleteUser" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="updateUser" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="query*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="true" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
===============================================================================================
2.ssh整合
1.spring+hibernate
*DataSource
*LocalSessionFactoryBean
*HibernateTemplate
*HibernateTransactionManager
2.spring+struts
*導入 spring-struts-plugin.jar
*添加ContextLoaderListener 負責建立工廠
<!-- 負責建立spring工廠 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
*添加配置檔案位置的context-param
<!-- spring配置檔案位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- <param-value>classpath:com/c35/config/applicationContext,classpath:xx/xx/xx/xx,</param-value> -->
<param-value>classpath:com/c35/config/applicationContext.xml</param-value>
</context-param>
*在struts.xml中配置Action時
<!--
class="action 在spring工廠中對應bean的ID"
-->
<action name="ssh_*" method="{1}" class="userAction">
<result name="queryok">/users.jsp</result>
<result name="insertok">/index.jsp</result>
<result name="deleteok">/index.jsp</result>
<result name="error">/error.jsp</result>
<result name="querypageok">/users_page.jsp</result>
</action>
=============================================================================================
3.小配置資訊的分離:
*定義 小配置檔案:
c35.url=jdbc:oracle:thin:@localhost:1521:xe
c35.driverclass=oracle.jdbc.OracleDriver
c35.username=hr
c35.password=hr
c35.max=2
c35.min=1
c35.wait=2000
*在spring的配置檔案中引入小配置檔案:(context命名空間)
<context:property-placeholder location="classpath:com/c35/config/db.properties"/>
*使用:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="url" value="${c35.url}"></property>
<property name="driverClassName" value="${c35.driverclass}"></property>
<property name="username" value="${c35.username}"></property>
<property name="password" value="${c35.password}"></property>
<property name="maxActive" value="${c35.max}"></property>
<property name="initialSize" value="${c35.min}"></property>
<property name="maxWait" value="${c35.wait}"></property>
</bean>
=============================================================================================