• 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中怎样设置事务,请参见博文:

    差不多了,就这些,以后再补充

  • 相关阅读:
    Python中的生成器与yield
    【爬虫系列】(一)最简单的爬虫
    【刷题笔记】--lintcode木头加工(java)
    使用TaskManager爬取2万条代理IP实现自动投票功能
    开源任务管理平台TaskManager介绍
    数据字典生成工具之旅系列文章导航
    使用工具安装,运行,停止,卸载Window服务
    Quartz Cron表达式 在线生成器
    Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle
    .net core2.0下Ioc容器Autofac使用
  • 原文地址:https://www.cnblogs.com/binggu/p/4608000.html
Copyright © 2020-2023  润新知