spring在專案中實際用途
1、資料庫連線池的託管、自動事務管理(不用在手動關閉session,和開啟事務、持久化操作、提交事務)
2、aop的事務代理
spring管理事務一共有兩種方式:
1、
<!-- 配置session工廠 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:Hibernate.cfg.xml</value>
</property>
</bean>
<!-- 配置hibernateTemplate -->
<bean name="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<!-- 讀取sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 宣告事務 -->
<bean name="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 讀取sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 開啟註解事務 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*"/>
<tx:method name="query*" read-only="true"/>
</tx:attributes>
</bean>
<!--註解可以被繼承,可以新增到介面上
如果不配置<tx:advice transaction-manager="txManager"><!-- 通知註解事務管理-->
<tx:attributes>
<tx:method name="*"/>
<tx:method name="query*" read-only="true"/>
</tx:attributes>
則上圖中@Transactional註解也不會起作用
-->
2、為單個bean配置事務(aop事務代理進行自動事務管理,自動資料庫連線關閉)
<!-- 配置一個業務邏輯Bean -->
<bean id="test" class="com.spring.tranProxy.PersonDaoImpl">
<property name="ds" ref="dataSource" />
</bean>
<!-- 為業務邏輯Bean配置事務代理 -->
<bean id="testTrans"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 為事務代理工廠Bean注入事務管理器 -->
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="test" />
<!-- 指定事務屬性 -->
<property name="transactionAttributes">
<props>
<prop key="*">readOnly</prop>
</props>
</property>
</bean>
spring對資料庫session的管理
觀點:
1.使用getSession()返回session有兩種情況。
a.當前執行緒有存在session,就直接返回。
b.當前執行緒中不存在session就重新建立一個。
如果spring配置了事務,那麼session就不必關閉,在事務完成之後將被自動關閉。如果沒有參與事務那就要呼叫session.close()關閉。
2.getSession()拿到的Session無論是否參與事務,Spring都不負責關閉,除非使用OpenSessionInView模式。
相關文章
- JWT 在專案中的實際使用JWT
- 專案實戰之gradle在實際專案中的使用Gradle
- 專案實戰之Rxjava、RxBinding在實際專案中的使用RxJava
- 人工智慧在專案管理中的三大用途人工智慧專案管理
- 在spring boot專案(maven)中引入其他 spring boot專案Spring BootMaven
- 【主流技術】ElasticSearch 在 Spring 專案中的實踐ElasticsearchSpring
- 常見演算法在實際專案中的應用演算法
- 在小型專案中實行專案管理最佳實踐專案管理
- 專案管理軟體在實際工作中怎麼應用?專案管理
- 實際專案中遇到的問題
- Spring Boot實際專案用簡單的AOPSpring Boot
- Spring在開發專案中起的作用Spring
- Vue合理配置axios並在專案中進行實際應用?VueiOS
- 關於MVP分層架構在專案中的實際運用MVP架構
- junit的實際意義。各位老兄在專案中會用到junit嗎?
- 把JBPM運用到實際專案中(1)
- 在實際的專案需求中瞭解技術架構的演進架構
- TypeScript在react專案中的實踐TypeScriptReact
- TypeScript在node專案中的實踐TypeScript
- 實際專案中的常見演算法演算法
- MVVM+RAC實際專案中的運用MVVM
- 實際專案中的 MVVM(積木)模式–序章MVVM模式
- 專案管理在HIS專案實施中的應用(轉)專案管理
- vue-ssr在專案中的實踐Vue
- 在專案中獲取Spring的Bean的幾種方式SpringBean
- MVP+Retrofit+Rxjava在專案中實戰解析MVPRxJava
- 在瀑布式專案中實現敏捷開發敏捷
- 在Docker中部署Spring Boot專案DockerSpring Boot
- 在專案中成長
- Spring AOP 在 XML檔案中實現 AspectJ 攔截SpringXML
- 在Spring專案中如何處理R2DBC的實體關係? - sipiosSpringiOS
- DevOps 在企業專案中的實踐落地dev
- Redis 在 Web 專案中的應用與實踐RedisWeb
- Redis在Web專案中的應用與實踐RedisWeb
- Git在專案中的那些實操(持續更新...)Git
- 在專案管理中,什麼是可實現的?專案管理
- 如何實現在react現有專案中嵌入Blazor?ReactBlazor
- MVP 在專案中的最佳實戰(封裝篇)MVP封裝