1.導入其餘的配置文件。在ssh項目中能夠導入其餘的配置文件,導入的格式爲:spring
<import resource="classpath:**/applicationContext-bms-sendxml-quartz.xml"/>
這個是導入一個spring的定時任務的配置文件。sql
2.配置掃描類包並將相應註解歸入spring bean容器,,以及啓動註解自動注入:數據庫
<context:component-scan base-package="com.XX" />
3.spring本身的事務管理:session
<tx:annotation-driven />app
4.配置配置文件路徑(.properties):ssh
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> <value>classpath:sysconfig.properties</value> </list> </property> </bean>
5.配置數據源:ui
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>${c3p0.jdbc.driverClass}</value> </property> <property name="jdbcUrl"> <value>${c3p0.jdbc.url}</value> </property> <property name="user"> <value>${c3p0.jdbc.username}</value> </property> <property name="password"> <value>${c3p0.jdbc.password}</value> </property> <!--初始化時獲取的鏈接數,取值應在minPoolSize與maxPoolSize之間。Default: 3 --> <property name="initialPoolSize"> <value>${c3p0.jdbc.initialPoolSize}</value> </property> <!--鏈接池中保留的最小鏈接數。 --> <property name="minPoolSize"> <value>${c3p0.jdbc.minPoolSize}</value> </property> <!--鏈接池中保留的最大鏈接數。Default: 15 --> <property name="maxPoolSize"> <value>${c3p0.jdbc.maxPoolSize}</value> </property> <!--最大空閒時間,60秒內未使用則鏈接被丟棄。若爲0則永不丟棄。Default: 0 --> <property name="maxIdleTime"> <value>${c3p0.jdbc.maxIdleTime}</value> </property> <!--當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數。Default: 3 --> <property name="acquireIncrement"> <value>${c3p0.jdbc.acquireIncrement}</value> </property> <!--每60秒檢查全部鏈接池中的空閒鏈接。Default: 0 --> <property name="idleConnectionTestPeriod"> <value>${c3p0.jdbc.idleConnectionTestPeriod}</value> </property> </bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <!-- 數據庫方言 --> <prop key="hibernate.dialect"> ${hibernate.dialect} </prop> <!-- 顯示Hibernate持久化操做所生成的SQL語句 --> <prop key="hibernate.show_sql">false</prop> <!-- 將SQL腳本進行格式化後再輸出 --> <prop key="hibernate.format_sql">false</prop> </props> </property> <property name="packagesToScan"> <list> <value>com.avit</value> </list> </property> </bean>
6.spring集成hibernate事務管理配置url
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean>
上面是事務管理器,下面配置事務:spa
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes>
<!-- 方法對應的傳播屬性 --> <tx:method name="get*" read-only="true" /> <tx:method name="query*" read-only="true" /> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="find*" read-only="true" /> <tx:method name="*" /> </tx:attributes> </tx:advice>
<!-- 事務控制位置,一哪些類的那些方法參與事務,通常在業務層service -->
<aop:config proxy-target-class="true"> <aop:advisor pointcut="execution(* com.avit.mmsp.padapter.services.*.*(..))" advice-ref="txAdvice" /> <aop:advisor pointcut="execution(* com.avit.mmsp.common.message.service.*.*(..))" advice-ref="txAdvice" /> </aop:config>
上面的代碼表示這個事務的事務管理器爲transactionManager,這個advice中規定save的方法的傳輸方式爲required,也就是說沒有sessionfactory的時候回自動創建,又得時候就不會創建了。規定了advice的同時還須要指定一個aop:pointcut去引用它,這樣這個advice就被聯繫到這兩個pointcut上了。hibernate
關於read-only屬性的理解:
表示該事物爲只讀事務,在將事務設置成只讀後,至關於將數據庫設置成只讀數據庫,此時若要進行寫的操做,會出現錯誤。
read-only的應用場合:
若是你一次執行單條查詢語句,則沒有必要啓用事務支持,數據庫默認支持SQL執行期間的讀一致性;
若是你一次執行多條查詢語句,例如統計查詢,報表查詢,在這種場景下,多條查詢SQL必須保證總體的讀一致性,不然,在前條SQL查詢以後,後條SQL查詢以前,數據被其餘用戶改變,則該次總體的統計查詢將會出現讀數據不一致的狀態,此時,應該啓用事務支持。
ps:注意是一次執行屢次查詢來統計某些信息,這時爲了保證數據總體的一致性,要用只讀事務,關於spring和jdbc中怎樣設置事務,請參見博文:
差很少了,就這些,之後再補充