xinyb
3 天以前 3b74e3df72726e188d36393ecfd7964d095ef7e8
src/applicationContext.xml
@@ -1,577 +1,152 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context.xsd"
      default-lazy-init="true"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-4.2.xsd"
       default-lazy-init="true"
>
    <description>Spring公共配置文件</description>
    <context:component-scan base-package="com.yc"/>
    <context:component-scan base-package="me.chanjar"/>
    <!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
    <context:annotation-config/>
    <import resource="spring-redis.xml"/>
    <!--
        <context:property-placeholder location="classpath:jdbc.properties"/>
    -->
   <description>Spring公共配置文件 </description>
   <context:component-scan base-package="com.yc" />
   <context:component-scan base-package="me.chanjar" />
   <!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
   <context:annotation-config />
   <!--
      <context:property-placeholder location="classpath:jdbc.properties"/>
   -->
   <!-- 数据源配置,使用应用c3po数据库连接池 -->
   <!--
      <bean id="dataSource"
      class="com.mchange.v2.c3p0.ComboPooledDataSource"
      destroy-method="close"> <property name="driverClass"
      value="${jdbc.driverClassName}"/> <property name="jdbcUrl"
      value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/>
      <property name="password" value="${jdbc.password}"/> <property
      name="initialPoolSize" value="${cop3.initialPoolSize}"/> <property
      name="minPoolSize" value="${cop3.minPoolSize}"/> <property
      name="maxPoolSize" value="${cop3.maxPoolSize}"/> <property
      name="acquireIncrement" value="${cop3.acquireIncrement}"/> <property
      name="maxIdleTime" value="${cop3.maxIdleTime}"/> <property
      name="idleConnectionTestPeriod"
      value="${cop3.idleConnectionTestPeriod}"/> <property
      name="maxStatements" value="${cop3.maxStatements}"/> </bean>
   -->
   <!--
      dbcp连接池 <bean id="dataSource"
      class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close"> <property name="driverClassName"
      value="${jdbc.driverClassName}" /> <property name="url"
      value="${jdbc.url}" /> <property name="username"
      value="${jdbc.username}" /> <property name="password"
      value="${jdbc.password}" /> <property name="maxActive"
      value="${jdbc.maxActive}" /> <property name="maxIdle"
      value="${jdbc.maxIdle}" /> <property name="maxWait"
      value="${jdbc.maxWait}" /> <property name="defaultAutoCommit"
      value="${jdbc.defaultAutoCommit}"/> <property name="removeAbandoned"
      value="${jdbc.removeAbandoned}"/> <property
      name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}"/>
      <property name="logAbandoned" value="${jdbc.logAbandoned}"/> </bean>
   -->
   <!--
      ****************************代理connection用当前线程记录执行sql配置start**********************************
   -->
   <!--配置统一数据源,将来系统中使用的数据源将从他当中获取-->
   <bean id="multiDataSource" class="com.yc.multiData.MultiDataSource"></bean>
   <!--封装dataSource 对当前线程所执行的sql进行记录-->
   <bean id="dataSource" class="com.yc.dataAccess.YCDataSource">
      <constructor-arg name="dataSource">
         <ref bean="multiDataSource" />
      </constructor-arg>
   </bean>
   <!--
      ****************************记录执行sql配置end**********************************
   -->
   <!--
      ****************************不使用代理connection(不记录执行sql配置start)**********************************
   -->
   <!--
      ****************************不记录执行sql配置end**********************************
   -->
   <!-- 配置defaultLobHandler -->
    <!--
        ****************************代理connection用当前线程记录执行sql配置start**********************************
    -->
    <!--配置统一数据源,将来系统中使用的数据源将从他当中获取-->
    <bean id="multiDataSource" class="com.yc.multiData.MultiDataSource"></bean>
    <!--封装dataSource 对当前线程所执行的sql进行记录-->
    <bean id="dataSource" class="com.yc.dataAccess.YCDataSource">
        <constructor-arg name="dataSource">
            <ref bean="multiDataSource"/>
        </constructor-arg>
    </bean>
    <!--
        ****************************记录执行sql配置end**********************************
    -->
    <!--
        ****************************不使用代理connection(不记录执行sql配置start)**********************************
    -->
    <!--
        ****************************不记录执行sql配置end**********************************
    -->
    <!-- 配置defaultLobHandler -->
    <bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"
        lazy-init="true" />
   <!-- 基本的JDBC操作类,在server层直接引用就可以使用 -->
   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
      <constructor-arg name="dataSource">
         <ref bean="dataSource" />
      </constructor-arg>
   </bean>
   <!-- 提供用javaBean作为对象进行参数传递给jdbc使用,在server层直接引用就可以使用 -->
   <bean id="simpleJdbcInsert" class="org.springframework.jdbc.core.simple.SimpleJdbcInsert">
      <constructor-arg name="dataSource">
         <ref bean="dataSource" />
      </constructor-arg>
   </bean>
   <!-- 提供用命令参数进行参数传递给jdbc使用,在server层直接引用就可以使用 -->
   <bean id="namedParameterJdbcTemplate"
      class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
      <constructor-arg name="dataSource">
         <ref bean="dataSource" />
      </constructor-arg>
   </bean>
   <!-- 提供调用存储过程功能给jdbc使用,在server层直接引用就可以使用 -->
   <bean id="simpleJdbcCall" class="org.springframework.jdbc.core.simple.SimpleJdbcCall">
      <constructor-arg name="dataSource">
         <ref bean="dataSource" />
      </constructor-arg>
   </bean>
   <!--19类型存储过程调用-->
   <bean id="simpleJdbcCallByProc" class="org.springframework.jdbc.core.simple.SimpleJdbcCall">
      <constructor-arg name="dataSource">
         <ref bean="dataSource" />
      </constructor-arg>
   </bean>
   <bean id="simpleJdbcCallShopping" class="org.springframework.jdbc.core.simple.SimpleJdbcCall"  scope="prototype">
      <constructor-arg name="dataSource">
         <ref bean="dataSource" />
      </constructor-arg>
   </bean>
   <!-- 事务管理 -->
   <bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource">
         <ref bean="dataSource" />
      </property>
   </bean>
   <!-- 定义事务通知-->
   <tx:advice id="txAdvice" transaction-manager="transactionManager">
      <tx:attributes>
         <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
         <tx:method name="new*" propagation="REQUIRED" rollback-for="Exception"/>
         <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>
         <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
         <tx:method name="create*" propagation="REQUIRED" rollback-for="Exception"/>
         <tx:method name="change*" propagation="REQUIRED" rollback-for="Exception"/>
         <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>
         <tx:method name="do*" propagation="REQUIRED" rollback-for="Exception"/>
         <tx:method name="addErrorLog" propagation="NOT_SUPPORTED" />
         <tx:method name="excelRecord" propagation="NOT_SUPPORTED" />
         <tx:method name="*" propagation="SUPPORTS" read-only="true" />
      </tx:attributes>
   </tx:advice>
   <!-- 事物,日志(拦截service包的所有执行sql函数对执行sql报错的保存到数据库)AOP配置-->
   <aop:config>
      <aop:pointcut id="bizMethods"
                 expression="execution(* com.yc.service..*.*(..)) or execution(* com.yc.sdk.shopping.service..*.*(..))  or execution(* com.yc.sdk.weixincp.service..*.*(..))  or execution(* com.yc.sdk.weixinmp.service..*.*(..)) or execution(* com.yc.api.service..*.*(..)) or execution(* com.yc.ionic.service..*.*(..))  or execution(* com.yc.sdk.oauth2.service..*.*(..)) or execution(* com.yc.im.service..*.*(..))  " />
      <aop:pointcut id="logger"
                 expression="(execution(* com.yc.service..*.*(..)) or execution(* com.yc.sdk.shopping.service..*.*(..))  or execution(* com.yc.sdk.weixincp.service..*.*(..))  or execution(* com.yc.sdk.weixinmp.service..*.*(..)) or execution(* com.yc.api.service..*.*(..)) or execution(* com.yc.ionic.service..*.*(..))  or execution(* com.yc.sdk.oauth2.service..*.*(..)) or execution(* com.yc.im.service..*.*(..))   ) and !execution(* com.yc.service.log.ErrorLogImpl.*(..))" />
      <aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />
      <aop:aspect id="loggerAspect" ref="genericLoggerBean">
         <aop:around pointcut-ref="logger" method="invoke" />
      </aop:aspect>
   </aop:config>
   <!-- 事物,日志AOP配置-->
   <!-- 事物,不进行日志AOP配置-->
   <!--
      <aop:config> <aop:pointcut id="bizMethods" expression="execution(*
      com.yc.service..*.*(..))" /> <aop:advisor advice-ref="txAdvice"
      pointcut-ref="bizMethods" /> </aop:config>
   -->
   <!-- 事物,不进行日志AOP配置-->
   <bean id="genericLoggerBean" class="com.yc.log.ErrorLoggerBean"></bean>
   <!-- 使用annotation定义事务 -->
   <tx:annotation-driven />
   <!--
      ****************************国际化**********************************
   -->
   <!-- 这个 bean的id是规定死的,只能为messageSource -->
   <bean id="messageSource"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
      <property name="basenames">
         <list>
            <value>messageSource/messages</value>
         </list>
      </property>
   </bean>
   <!--
      ****************************国际化**********************************
   -->
   <!--
      ****************************检查空间 和 数据库文件 的调度计划start**********************************
   -->
   <bean id="spaceCheckJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
      <property name="jobClass">
         <value>com.yc.schedule.SpaceCheckQuartzJob
         </value>
      </property>
   </bean>
   <!-- 调度计划触发器 -->
   <bean id="spaceCheckSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
      <property name="jobDetail">
         <ref bean="spaceCheckJobDetail" />
      </property>
      <property name="startDelay">
         <value>50000</value>  <!-- 启动服务器50秒后执行第一次 -->
      </property>
      <property name="repeatInterval">
         <value>86400000</value><!-- 每24小时后执行一次 -->
      </property>
   </bean>
   <bean id="spaceCheckCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
      <property name="jobDetail">
         <ref bean="spaceCheckJobDetail" />
      </property>
      <property name="cronExpression">
         <!-- 每天早上6点执行 -->
         <value>0 0 6 * * ?</value>  <!-- 1秒 2分钟 3小时 4月份中的日期 5月份 6星期中的日期 7年份  -->
      </property>
   </bean>
   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
         <list>
            <ref bean="spaceCheckCronTrigger" />
         </list>
      </property>
   </bean>
   <!--
      ****************************检查空间 和 数据库文件 的调度计划end**********************************-->
<!--   -->
<!--&lt;!&ndash; 热更新  开始 &ndash;&gt;                        -->
<!--     <bean id="chcpJobDetails" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--      <property name="jobClass">-->
<!--         <value>com.yc.ionic.schedule.ChcpTimer</value>-->
<!--      </property>-->
<!--        <property name="jobDataAsMap">  -->
<!--            <dataResult>  -->
<!--                &lt;!&ndash; 非spring管理的service放到这里,就可以注入进去 &ndash;&gt;  -->
<!--                <description>jobDataAsMap</description>  -->
<!--                &lt;!&ndash; key 属性值,value 对应的bean &ndash;&gt;  -->
<!--                <entry key="DemoInfoImpl" value-ref="demo" />                 -->
<!--            </dataResult>  -->
<!--        </property>  -->
<!--   </bean>-->
<!--   -->
<!--   <bean id="chcpSimpleTriggers" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">-->
<!--      <property name="jobDetail">-->
<!--         <ref bean="chcpJobDetails"/>-->
<!--      </property>-->
<!--      <property name="startDelay">-->
<!--         <value>6000000000000</value>  &lt;!&ndash; 启动服务器1分钟后执行 &ndash;&gt;-->
<!--      </property>-->
<!--      <property name="repeatInterval">-->
<!--         <value>6000000000000</value>  &lt;!&ndash; 每1分钟执行一次 &ndash;&gt;-->
<!--      </property>-->
<!--   </bean>-->
<!--   -->
<!--   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">-->
<!--         <list>-->
<!--            <ref bean="chcpSimpleTriggers" />-->
<!--         </list>-->
<!--      </property>      -->
<!--   </bean>-->
<!--   &lt;!&ndash; 热更新  结束&ndash;&gt;       -->
<!--   &lt;!&ndash;-->
<!--      ****************************邮件 的调度计划开始**********************************&ndash;&gt;-->
<!--   &lt;!&ndash;邮件调度计划触发器 &ndash;&gt;                        -->
<!--     <bean id="mailJobDetaily" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--      <property name="jobClass">-->
<!--         <value>com.yc.action.mail.action.SendMail</value>-->
<!--      </property>-->
<!--      -->
<!--        <property name="jobDataAsMap">  -->
<!--            <dataResult>  -->
<!--                &lt;!&ndash; 非spring管理的service放到这里,就可以注入进去 &ndash;&gt;  -->
<!--                <description>jobDataAsMap</description>  -->
<!--                &lt;!&ndash; key 属性值,value 对应的bean &ndash;&gt;  -->
<!--                <entry key="OtherMailImpl" value-ref="OtherMailImpl" />                       -->
<!--            </dataResult>  -->
<!--        </property>  -->
<!--   </bean>-->
<!--   &lt;!&ndash; 启动服务设置触发邮件功能时间 &ndash;&gt;-->
<!--   <bean id="mailSimpleTriggery" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">-->
<!--      <property name="jobDetail">-->
<!--         <ref bean="mailJobDetaily"/>-->
<!--      </property>-->
<!--      <property name="startDelay">-->
<!--         <value>300000000</value>  &lt;!&ndash; 启动服务器2秒后执行第一次 &ndash;&gt;-->
<!--      </property>-->
<!--      <property name="repeatInterval">-->
<!--         <value>120000000</value>&lt;!&ndash; 每24小时后执行一次 86400000&ndash;&gt;-->
<!--      </property>-->
<!--   </bean>-->
<!--   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">-->
<!--         <list>-->
<!--            <ref bean="mailSimpleTriggery" />-->
<!--         </list>-->
<!--      </property>      -->
<!--   </bean>-->
<!--   &lt;!&ndash;  ******************自动发送微信企业号消息   调度计划 start ************** &ndash;&gt;-->
<!--   <bean id="sendWeiXinMsgJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--      <property name="jobClass">-->
<!--         <value>com.yc.sdk.weixincp.action.SendWeiXinMsgTimer</value>-->
<!--      </property>-->
<!--   </bean>-->
<!--   &lt;!&ndash; 调度计划触发器 &ndash;&gt;-->
<!--   <bean id="sendWeiXinMsgTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">-->
<!--      <property name="jobDetail">-->
<!--         <ref bean="sendWeiXinMsgJobDetail" />-->
<!--      </property>-->
<!--      <property name="startDelay">-->
<!--         <value>15000000000</value>  &lt;!&ndash; 启动服务器30秒后执行第一次   15000 &ndash;&gt;-->
<!--      </property>-->
<!--      <property name="repeatInterval">-->
<!--         <value>30000000000</value>&lt;!&ndash; 每30秒执行一次  30000  ,每天是 86400000 秒 &ndash;&gt;-->
<!--      </property>-->
<!--   </bean>-->
<!--   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">-->
<!--         <list>-->
<!--            <ref bean="sendWeiXinMsgTrigger" />-->
<!--         </list>-->
<!--      </property>      -->
<!--   </bean>-->
<!--   &lt;!&ndash;  ******************自动发送微信企业号消息   调度计划 end ************** &ndash;&gt;-->
<!--   -->
<!--   &lt;!&ndash;  ******************自动发送微信公众号模板消息   调度计划 start ************** &ndash;&gt;-->
<!--   &lt;!&ndash; -->
<!--   <bean id="sendTemplateMsgJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--      <property name="jobClass">-->
<!--         <value>com.yc.sdk.weixinmp.action.SendTemplateMsgTimer</value>-->
<!--      </property>-->
<!--   </bean>-->
<!--   <bean id="sendTemplateMsgTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">-->
<!--      <property name="jobDetail">-->
<!--         <ref bean="sendTemplateMsgJobDetail" />-->
<!--      </property>-->
<!--      <property name="startDelay">-->
<!--         <value>15000</value>  -->
<!--      </property>-->
<!--      <property name="repeatInterval">-->
<!--         <value>30000</value>-->
<!--      </property>-->
<!--   </bean>-->
<!--   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">-->
<!--         <list>-->
<!--            <ref bean="sendTemplateMsgTrigger" />-->
<!--         </list>-->
<!--      </property>      -->
<!--   </bean>-->
<!--    &ndash;&gt;-->
<!--   &lt;!&ndash;  ******************自动发送微信公众号模板消息   调度计划 end ************** &ndash;&gt;  -->
<!--    -->
<!--    -->
<!--   &lt;!&ndash;  ******************自动发送微信小程序模板消息   调度计划 start ************** &ndash;&gt;-->
<!--   &lt;!&ndash; -->
<!--   <bean id="sendMaTemplateMsgJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--      <property name="jobClass">-->
<!--         <value>com.yc.sdk.miniapp.action.MaSendTemplateMsgTimer</value>-->
<!--      </property>-->
<!--   </bean>-->
<!--   <bean id="sendMaTemplateMsgTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">-->
<!--      <property name="jobDetail">-->
<!--         <ref bean="sendMaTemplateMsgJobDetail" />-->
<!--      </property>-->
<!--      <property name="startDelay">-->
<!--         <value>15000</value>  -->
<!--      </property>-->
<!--      <property name="repeatInterval">-->
<!--         <value>30000</value>-->
<!--      </property>-->
<!--   </bean>-->
<!--   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">-->
<!--         <list>-->
<!--            <ref bean="sendMaTemplateMsgTrigger" />-->
<!--         </list>-->
<!--      </property>      -->
<!--   </bean>-->
<!--    &ndash;&gt;-->
<!--   &lt;!&ndash;  ******************自动发送微信小程序模板消息   调度计划 end ************** &ndash;&gt;      -->
<!--   -->
<!--    &lt;!&ndash; 每日检查用户密码是否过期 &ndash;&gt;-->
<!--   <bean id="chcekPasswordHasExpiredTimerDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--      <property name="jobClass">-->
<!--         <value>com.yc.sdk.password.action.ChcekPasswordHasExpiredTimer</value>-->
<!--      </property>-->
<!--   </bean>   -->
<!--   <bean id="chcekPasswordHasExpiredTimerTriggers" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">-->
<!--      <property name="jobDetail">-->
<!--         <ref bean="chcekPasswordHasExpiredTimerDetail" />-->
<!--      </property>-->
<!--      <property name="cronExpression">-->
<!--         &lt;!&ndash; 每天23点30执行 &ndash;&gt;-->
<!--         <value>0 30 23 * * ?</value>  &lt;!&ndash; 1秒 2分钟 3小时 4月份中的日期 5月份 6星期中的日期 7年份  &ndash;&gt;-->
<!--      </property>-->
<!--   </bean>-->
<!--   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">-->
<!--         <list>-->
<!--            <ref bean="chcekPasswordHasExpiredTimerTriggers" />-->
<!--         </list>-->
<!--      </property>      -->
<!--   </bean>   -->
<!--   &lt;!&ndash; 结束每日检查用户密码是否过期 &ndash;&gt;-->
<!--   &lt;!&ndash;  ******************每年度12月 1号, 10号,20号,24,25,30,31号   创建新的年度会计期间 start ************** &ndash;&gt;-->
<!--   <bean id="createYearPeriodIdTimerDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--      <property name="jobClass">-->
<!--         <value>com.yc.action.periodid.CreateYearPeriodIdTimer</value>-->
<!--      </property>-->
<!--   </bean>-->
<!--   &lt;!&ndash; 调度计划触发器 &ndash;&gt;-->
<!--   <bean id="createYearPeriodIdTimerTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">-->
<!--      <property name="jobDetail">-->
<!--         <ref bean="createYearPeriodIdTimerDetail" />-->
<!--      </property>-->
<!--      <property name="cronExpression">-->
<!--         &lt;!&ndash; 每年度12月 1号, 10号,20号,30,31号 22点10执行 &ndash;&gt;-->
<!--         <value>0 10 22 1,10,20,24,25,30,31 12 ? *</value>  &lt;!&ndash; 0 10 22 1,10,20,24,25,30,31 12 ? * , 1秒 2分钟 3小时 4月份中的日期 5月份 6星期中的日期 7年份  &ndash;&gt;-->
<!--      </property>-->
<!--   </bean>-->
<!--   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">-->
<!--         <list>-->
<!--            <ref bean="createYearPeriodIdTimerTrigger" />-->
<!--         </list>-->
<!--      </property>      -->
<!--   </bean>-->
<!--   &lt;!&ndash;  ******************每年度12月 1号, 10号,20号,30,31号   创建新的年度会计期间 end ************** &ndash;&gt;-->
<!--   &lt;!&ndash;  ******************每月 24号,25号,27号,28号,30,31号系统自动尝试打开下个月的会计期间 start ************** &ndash;&gt;-->
<!--   <bean id="openPeriodIdTimerDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--      <property name="jobClass">-->
<!--         <value>com.yc.action.periodid.OpenPeriodIdTimer</value>-->
<!--      </property>-->
<!--   </bean>-->
<!--   &lt;!&ndash; 调度计划触发器 &ndash;&gt;-->
<!--   <bean id="openPeriodIdTimerTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">-->
<!--      <property name="jobDetail">-->
<!--         <ref bean="openPeriodIdTimerDetail" />-->
<!--      </property>-->
<!--      <property name="cronExpression">-->
<!--         &lt;!&ndash; 每月 24,25, 26,28,30,31号 23点15执行 &ndash;&gt;-->
<!--         <value>0 15 23 24,25,27,28,30,31 * ? *</value>  &lt;!&ndash; 0 15 23 24,25,27,28,30,31 * ? * 1秒 2分钟 3小时 4月份中的日期 5月份 6星期中的日期 7年份  &ndash;&gt;-->
<!--      </property>-->
<!--   </bean>-->
<!--   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">-->
<!--         <list>-->
<!--            <ref bean="openPeriodIdTimerTrigger" />-->
<!--         </list>-->
<!--      </property>      -->
<!--   </bean>-->
<!--   &lt;!&ndash;  ******************每月 24号,25号,27号,28号,30,31号系统自动尝试打开下个月的会计期间  end ************** &ndash;&gt;-->
<!--      -->
<!--      -->
<!--    &lt;!&ndash;  ******************自动拉取直播房间信息   调度计划 start, 每天8:00-23:00 ,每20秒执行一次, " 10/20 * 8-23 * * ? * ",  1秒 2分钟 3小时 4月份中的日期 5月份 6星期中的日期 7年份 **************&ndash;&gt; -->
<!--    <bean id="refreshLiveRoomJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--        <property name="jobClass">-->
<!--            <value>com.yc.sdk.miniapp.action.MaSyncLiveRoomTimer</value>-->
<!--        </property>-->
<!--    </bean>-->
<!--    <bean id="refreshLiveRoomTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">-->
<!--        <property name="jobDetail">-->
<!--            <ref bean="refreshLiveRoomJobDetail" />-->
<!--        </property>-->
<!--        <property name="cronExpression">-->
<!--            <value>10/200 * 8-23 * * ? *</value>-->
<!--        </property>-->
<!--    </bean>-->
<!--    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--        <property name="triggers">-->
<!--            <list>-->
<!--                <ref bean="refreshLiveRoomTrigger" />-->
<!--            </list>-->
<!--        </property>     -->
<!--    </bean>-->
<!--   &lt;!&ndash; ******************自动拉取直播房间信息    调度计划 end ************** &ndash;&gt;     -->
<!--      -->
<!--    &lt;!&ndash;  ******************每晚更新已经过期的数据源   调度计划 start, 每天23:00执行一次, " 0 0 23 * * ? * ",  1秒 2分钟 3小时 4月份中的日期 5月份 6星期中的日期 7年份 **************&ndash;&gt; -->
<!--    <bean id="refreshDataSourceJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--        <property name="jobClass">-->
<!--            <value>com.yc.sdk.shopping.action.MaintainceTimer</value>-->
<!--        </property>-->
<!--    </bean>-->
<!--    <bean id="refreshDataSourceTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">-->
<!--        <property name="jobDetail">-->
<!--            <ref bean="refreshDataSourceJobDetail" />-->
<!--        </property>-->
<!--        <property name="cronExpression">-->
<!--            <value>0 15 11 * * ? *</value>-->
<!--        </property>-->
<!--    </bean>-->
<!--    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--        <property name="triggers">-->
<!--            <list>-->
<!--                <ref bean="refreshDataSourceTrigger" />-->
<!--            </list>-->
<!--        </property>-->
<!--    </bean>-->
<!--   &lt;!&ndash; ******************每晚更新已经过期的数据源   调度计划 end ************** &ndash;&gt;     -->
<!--      -->
<!--      -->
<!--      &lt;!&ndash;邮件收取触发器-->
<!--     <bean id="spaceMailDetails" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">-->
<!--      <property name="jobClass">-->
<!--         <value>com.yc.schedule.EmailReceiverTimer</value>-->
<!--      </property>-->
<!--      <property name="jobDataAsMap">  -->
<!--            <dataResult>-->
<!--               -->
<!--                 <description>jobDataAsMap</description>  -->
<!--              -->
<!--                <entry key="OtherMailImpl" value-ref="OtherMailImpl" />                       -->
<!--                <entry key="MailInfoImpl" value-ref="MailInfoImpl" />                       -->
<!--                <entry key="DemoInfoImpl" value-ref="demo" />                       -->
<!--            </dataResult>  -->
<!--        </property>  -->
<!--      -->
<!--   </bean>-->
<!--   <bean id="spaceCheckMaileTriggers" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">-->
<!--      <property name="jobDetail">-->
<!--         <ref bean="spaceMailDetails"/>-->
<!--      </property>-->
<!--      <property name="startDelay">-->
<!--         <value>6000</value>  -->
<!--      </property>-->
<!--      <property name="repeatInterval">-->
<!--         <value>108000000</value>-->
<!--      </property>-->
<!--   </bean>-->
<!--   -->
<!--   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">-->
<!--         <list>-->
<!--            <ref bean="spaceCheckMaileTriggers" />-->
<!--         </list>-->
<!--      </property>      -->
<!--   </bean>-->
<!--    &ndash;&gt;-->
<!--    -->
<!--   &lt;!&ndash; -->
<!--             <bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">   -->
<!--                   <property name="timerTask"> <ref bean="SendSmsTimer"/> </property>  -->
<!--                  <property name="period">   -->
<!--                   <value>6000</value>   -->
<!--                  </property>             -->
<!--                    </bean>   -->
<!--                  <bean class="org.springframework.scheduling.timer.TimerFactoryFactoryBean">   -->
<!--                      <property name="scheduledTimerTasks">   -->
<!--                       <list><ref bean="scheduleReportTask"/></list>   -->
<!--                             </property>   -->
<!--                         </bean>  -->
<!--      &ndash;&gt;-->
<!--       &lt;!&ndash;   -->
<!--      <bean id="SmsSimpleTrigger"   class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" >-->
<!--      <property name="jobDetail"> <ref bean="smsTaskJob" /> </property>-->
<!--      <property name="repeatInterval"> <value>60000</value> </property>-->
<!--      </bean>-->
<!--      -->
<!--      <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">-->
<!--      <property name="triggers">    <list> <ref bean="SmsSimpleTrigger" /></list> </property>-->
<!--       </bean>-->
<!--       &ndash;&gt; -->
  <!-- 重新生成功能号   -->
  <bean id="formidVersion" class="com.yc.action.build.FormidVersion">
    <property name="formidConfig">
        <value>classpath:FormidVersion.xml</value>
    </property>
  </bean>
  <import resource="spring-redis.xml"/>
</beans>
          lazy-init="true"/>
    <!-- 基本的JDBC操作类,在server层直接引用就可以使用 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-arg name="dataSource">
            <ref bean="dataSource"/>
        </constructor-arg>
    </bean>
    <!-- 提供用javaBean作为对象进行参数传递给jdbc使用,在server层直接引用就可以使用 -->
    <bean id="simpleJdbcInsert" class="org.springframework.jdbc.core.simple.SimpleJdbcInsert">
        <constructor-arg name="dataSource">
            <ref bean="dataSource"/>
        </constructor-arg>
    </bean>
    <!-- 提供用命令参数进行参数传递给jdbc使用,在server层直接引用就可以使用 -->
    <bean id="namedParameterJdbcTemplate"
          class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
        <constructor-arg name="dataSource">
            <ref bean="dataSource"/>
        </constructor-arg>
    </bean>
    <!-- 提供调用存储过程功能给jdbc使用,在server层直接引用就可以使用 -->
    <bean id="simpleJdbcCall" class="org.springframework.jdbc.core.simple.SimpleJdbcCall">
        <constructor-arg name="dataSource">
            <ref bean="dataSource"/>
        </constructor-arg>
    </bean>
    <!--19类型存储过程调用-->
    <bean id="simpleJdbcCallByProc" class="org.springframework.jdbc.core.simple.SimpleJdbcCall">
        <constructor-arg name="dataSource">
            <ref bean="dataSource"/>
        </constructor-arg>
    </bean>
    <bean id="simpleJdbcCallShopping" class="org.springframework.jdbc.core.simple.SimpleJdbcCall" scope="prototype">
        <constructor-arg name="dataSource">
            <ref bean="dataSource"/>
        </constructor-arg>
    </bean>
    <!-- 事务管理 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
    </bean>
    <!-- 定义事务通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="new*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="create*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="change*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="do*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="addErrorLog" propagation="NOT_SUPPORTED"/>
            <tx:method name="excelRecord" propagation="NOT_SUPPORTED"/>
            <tx:method name="*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    <!-- 事物,日志(拦截service包的所有执行sql函数对执行sql报错的保存到数据库)AOP配置-->
    <aop:config>
        <aop:pointcut id="bizMethods"
                      expression="execution(* com.yc.service..*.*(..)) or execution(* com.yc.sdk.shopping.service..*.*(..))  or execution(* com.yc.sdk.weixincp.service..*.*(..))  or execution(* com.yc.sdk.weixinmp.service..*.*(..)) or execution(* com.yc.api.service..*.*(..)) or execution(* com.yc.ionic.service..*.*(..))  or execution(* com.yc.sdk.oauth2.service..*.*(..)) or execution(* com.yc.im.service..*.*(..)) or execution(* com.yc.batchUpload.service..*.*(..)) or execution(* com.yc.MaintenanceFee.service..*.*(..))"/>
        <aop:pointcut id="logger"
                      expression="(execution(* com.yc.service..*.*(..)) or execution(* com.yc.sdk.shopping.service..*.*(..))  or execution(* com.yc.sdk.weixincp.service..*.*(..))  or execution(* com.yc.sdk.weixinmp.service..*.*(..)) or execution(* com.yc.api.service..*.*(..)) or execution(* com.yc.app.v2.service..*.*(..)) or execution(* com.yc.ionic.service..*.*(..))  or execution(* com.yc.sdk.oauth2.service..*.*(..)) or execution(* com.yc.im.service..*.*(..)) or execution(* com.yc.batchUpload.service..*.*(..))  or execution(* com.yc.MaintenanceFee.service..*.*(..))  ) and !execution(* com.yc.service.log.ErrorLogImpl.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods"/>
        <aop:aspect id="loggerAspect" ref="genericLoggerBean">
            <aop:around pointcut-ref="logger" method="invoke"/>
        </aop:aspect>
    </aop:config>
    <!-- 事物,日志AOP配置-->
    <!-- 事物,不进行日志AOP配置-->
    <!--
        <aop:config> <aop:pointcut id="bizMethods" expression="execution(*
        com.yc.service..*.*(..))" /> <aop:advisor advice-ref="txAdvice"
        pointcut-ref="bizMethods" /> </aop:config>
    -->
    <!-- 事物,不进行日志AOP配置-->
    <bean id="genericLoggerBean" class="com.yc.log.ErrorLoggerBean"></bean>
    <!-- 使用annotation定义事务 -->
    <tx:annotation-driven/>
    <!--
        ****************************国际化**********************************
    -->
    <!-- 这个 bean的id是规定死的,只能为messageSource -->
    <bean id="messageSource"
          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>messageSource/messages</value>
            </list>
        </property>
    </bean>
    <!--
        ****************************国际化**********************************
    -->
    <!-- 重新生成功能号   -->
    <bean id="formidVersion" class="com.yc.action.build.FormidVersion">
        <property name="formidConfig">
            <value>classpath:FormidVersion.xml</value>
        </property>
    </bean>
</beans>