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>
=============================================================================================