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模式。
相關文章
- 專案實戰之gradle在實際專案中的使用Gradle
- JWT 在專案中的實際使用JWT
- 專案實戰之Rxjava、RxBinding在實際專案中的使用RxJava
- 在spring boot專案(maven)中引入其他 spring boot專案Spring BootMaven
- 【主流技術】ElasticSearch 在 Spring 專案中的實踐ElasticsearchSpring
- 人工智慧在專案管理中的三大用途人工智慧專案管理
- Spring Boot實際專案用簡單的AOPSpring Boot
- Spring在開發專案中起的作用Spring
- 專案管理軟體在實際工作中怎麼應用?專案管理
- Vue合理配置axios並在專案中進行實際應用?VueiOS
- 實際專案中遇到的問題
- 關於MVP分層架構在專案中的實際運用MVP架構
- 在實際的專案需求中瞭解技術架構的演進架構
- TypeScript在react專案中的實踐TypeScriptReact
- TypeScript在node專案中的實踐TypeScript
- 在Docker中部署Spring Boot專案DockerSpring Boot
- 在Spring專案中如何處理R2DBC的實體關係? - sipiosSpringiOS
- vue-ssr在專案中的實踐Vue
- Spring AOP 在 XML檔案中實現 AspectJ 攔截SpringXML
- 在Spring Boot實現國際化的案例Spring Boot
- DevOps 在企業專案中的實踐落地dev
- SpringBoot專案在IntelliJ IDEA中實現熱部署Spring BootIntelliJIdea熱部署
- Spring Data JPA專案實戰(下)Spring
- 【轉】從 Spring 專案中禁用 nacosSpring
- 使用Jasypt在Spring Boot專案中加密配置檔案中任何密碼 - Aanchal SharmaSpring Boot加密密碼
- Spring 原始碼(4)在Spring配置檔案中自定義標籤如何實現?Spring原始碼
- Git在專案中的那些實操(持續更新...)Git
- 在 SpringBoot 專案中簡單實現 JWT 驗證Spring BootJWT
- 如何實現在react現有專案中嵌入Blazor?ReactBlazor
- 在專案管理中,什麼是可實現的?專案管理
- Redis在Web專案中的應用與實踐RedisWeb
- Redis 在 Web 專案中的應用與實踐RedisWeb
- 從概念到實際專案__vuex指北Vue
- Linux在實際中的應用Linux
- Zoho Projects專案管理軟體有哪些用途?Project專案管理
- 【夯實Spring Cloud】Spring Cloud中基於maven的分散式專案框架的搭建SpringCloudMaven分散式框架
- 非同步復位同步釋放在實際專案中的應用非同步
- Flutter實際專案開發中踩坑大合集(持續更新..)Flutter
- 正規表示式中的“環視”及實際專案應用