ssh2的application.xml配置文件配置詳解


1.導入其他的配置文件。在ssh項目中可以導入其他的配置文件,導入的格式為:

<import resource="classpath:**/applicationContext-bms-sendxml-quartz.xml"/>

這個是導入一個spring的定時任務的配置文件。

2.配置掃描類包並將相應注解納入spring bean容器,,以及啟動注解自動注入:

<context:component-scan base-package="com.XX" />

3.spring自己的事務管理:

<tx:annotation-driven />

4.配置配置文件路徑(.properties):

    <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.配置數據源:

<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事務管理配置

    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="sessionFactory" />
        </property>
    </bean>

上面是事務管理器,下面配置事務:

    <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上了。

 

關於read-only屬性的理解:

表示該事物為只讀事務,在將事務設置成只讀后,相當於將數據庫設置成只讀數據庫,此時若要進行寫的操作,會出現錯誤。

read-only的應用場合:

如果你一次執行單條查詢語句,則沒有必要啟用事務支持,數據庫默認支持SQL執行期間的讀一致性; 
如果你一次執行多條查詢語句,例如統計查詢,報表查詢,在這種場景下,多條查詢SQL必須保證整體的讀一致性,否則,在前條SQL查詢之后,后條SQL查詢之前,數據被其他用戶改變,則該次整體的統計查詢將會出現讀數據不一致的狀態,此時,應該啟用事務支持。

ps:注意是一次執行多次查詢來統計某些信息,這時為了保證數據整體的一致性,要用只讀事務,關於spring和jdbc中怎樣設置事務,請參見博文:

差不多了,就這些,以后再補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM