基于Redis的Session共享示例
原文地址: 基于Redis的Session共享示例
閱讀之前,腦補(bǔ)的畫(huà)面是:在負(fù)載均衡的場(chǎng)景下,各個(gè)單機(jī)統(tǒng)一通過(guò)在業(yè)務(wù)代碼中通過(guò)redis客戶(hù)端存取session。
本文中提到的思路是,在Tomcat中,通過(guò)配置Session-Manager來(lái)實(shí)現(xiàn)。這里會(huì)用到j(luò)edis客戶(hù)端jar包,common-pool2,以及tomcat-redis-session-manager的包。完全是通過(guò)配置的方式就實(shí)現(xiàn)了多個(gè)Tomcat的session共享。
所以本文的重點(diǎn)在于配置:如何配置在一臺(tái)機(jī)器上啟動(dòng)多個(gè)Tomcat(通過(guò)指定不同的端口),如何安裝和啟動(dòng)redis,如何配置Session-Manager。
Spring的事務(wù)管理機(jī)制
原文地址: Spring的事務(wù)管理機(jī)制
本文首先提到spring是通過(guò)內(nèi)置的事務(wù)管理器來(lái)實(shí)現(xiàn)事務(wù)管理的。比如下面的列表:
- DataSourceTransactionManager 數(shù)據(jù)源事務(wù)管理器,提供對(duì)單個(gè)javax.sql.DataSource事務(wù)管理,用于Spring JDBC抽象框架、iBATIS或MyBatis框架的事務(wù)管理;
- HibernateTransactionManager 提供對(duì)單個(gè)org.hibernate.SessionFactory事務(wù)支持,用于集成Hibernate框架時(shí)的事務(wù)管理
- .....
事務(wù)管理器是我們?cè)趕pring的配置文件中來(lái)定義的:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
spring支持編碼式事務(wù)和聲明式事務(wù)。
編碼式事務(wù)其實(shí)就是在程序內(nèi)部硬編碼,最常見(jiàn)的例子就是在JDBC中手動(dòng)開(kāi)啟事務(wù),手動(dòng)提交。這個(gè)不再贅言。
聲明式事務(wù)基于AOP,允許通過(guò)配置的方式(配置文件或者注解)來(lái)實(shí)現(xiàn)事務(wù)的管理。
聲明式事務(wù)涉及到的一些屬性:
- 傳播行為:Propagation 定義了當(dāng)存在多個(gè)事務(wù)的時(shí)候的一些處理機(jī)制。或者定義是否啟用事務(wù)等等。
- 隔離級(jí)別 定義了一個(gè)事務(wù)可能受其他并發(fā)事務(wù)影響的程度
- 回滾規(guī)則
- 事務(wù)超時(shí)
- 是否只讀
這篇文章算是對(duì)之前spring一些零散知識(shí)的小匯總,感覺(jué)有些收獲。因?yàn)樵谌粘i_(kāi)發(fā)中,經(jīng)常會(huì)忽略上面提到的這些概念。
Java對(duì)象的序列化與反序列化
原文地址: Java對(duì)象的序列化與反序列化
按照以往的知識(shí)積累,在Java中這個(gè)話(huà)題主要涉及到Serializable接口、幾個(gè)對(duì)象流(比如ObjectOutputStream)、Transient關(guān)鍵字、序列化ID。
這些知識(shí)點(diǎn)在本文中都有介紹,現(xiàn)粗略整理一下個(gè)人感覺(jué)不錯(cuò)的點(diǎn)。
- Transient 關(guān)鍵字的作用是阻止被修飾的變量被序列化到文件中。
- 虛擬機(jī)是否允許反序列化,不僅要求類(lèi)路徑一致,還要求兩個(gè)類(lèi)的序列化ID一致。通常我們?cè)贗DE中會(huì)自動(dòng)生成隨機(jī)的序列化ID。 可以考慮用固定的1L。