重大改版
 鱼翔空 2014-07-13 spring,框架封装|   1 1254 
文章评分 90 次,平均分 5.0

1)基于druid连接池的数据源配置

2)mybatis的sqlSessionFactory配置和mybatis-config的引用

3)声明式事务的配置

4)hibernate3 自动建表的配置

5)spring quartz 的配置与规则详解

6)druid 监控jdbc的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:mvc="http://www.springframework.org/schema/mvc" 
       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-3.2.xsd 
						   http://www.springframework.org/schema/context 
	 					   http://www.springframework.org/schema/context/spring-context-3.2.xsd 
						   http://www.springframework.org/schema/mvc 
						   http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
						   http://www.springframework.org/schema/tx 
                           http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
						   http://www.springframework.org/schema/aop
						   http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
">
 <!-- 读取properties配置信息,存储到了-->
   <bean id="propertyConfigurer"
		class="com.yxkong.common.utils.CustomizedPropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:dbinfo.properties</value>
				<value>classpath:project.properties</value>
			</list>
		</property>
   </bean>
    <!-- 引入属性文件
   <context:property-placeholder location="classpath:dbinfo.properties" />-->
   <!-- 配置Druid数据源 -->
   <bean  name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      	<property name="url" value="${jdbc_url}" />
		<property name="username" value="${jdbc_username}" />
		<property name="password" value="${jdbc_password}" />
		
        <!-- 初始化连接大小 -->
		<property name="initialSize" value="${initialSize}" />
		<!-- 连接池最大使用连接数量 -->
		<property name="maxActive" value="${maxActive}" />
		<!-- 连接池最大空闲  已废弃
		<property name="maxIdle" value="${maxIdle}" />
		-->
		<!-- 连接池最小空闲 -->
		<property name="minIdle" value="${minIdle}" />
		<!-- 获取连接最大等待时间 -->
		<property name="maxWait" value="${maxWait}" />

		<!-- <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> -->

		<property name="validationQuery" value="${validationQuery}" />
		<property name="testOnBorrow" value="${testOnBorrow}" />
		<property name="testOnReturn" value="${testOnReturn}" />
		<property name="testWhileIdle" value="${testWhileIdle}" />

		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />

		<!-- 打开removeAbandoned功能 -->
		<property name="removeAbandoned" value="true" />
		<!-- 1800秒,也就是30分钟 -->
		<property name="removeAbandonedTimeout" value="1800" />
		<!-- 关闭abanded连接时输出错误日志 -->
		<property name="logAbandoned" value="true" />

		<!-- 监控数据库,需要在web.xml中配置StatViewServlet -->
		<property name="filters" value="stat" /> 
		<!-- <property name="filters" value="mergeStat" />-->
   </bean>
   <!--通过注解方式构建上下文-->
   <context:annotation-config />
   <!-- 注解方式配置事物 -->
   <tx:annotation-driven />
   <!-- 配置mybatis start-->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	   <property name="dataSource" ref="dataSource" />
		<!-- 指定sqlMapConfig总配置文件,订制的environment在spring容器中不在生效  -->  
       <property  name="configLocation"  value="classpath:mybatis-config.xml"/> 
      
		<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 
		          指定实体类映射文件,可以指定同时指定某一包以及子包下面的所有配置文件,
		   mapperLocations和configLocation有一个即可,
		        当需要为实体类指定别名时,可指定configLocation属性,
		         再在mybatis总配置文件中采用mapper引入实体类映射文件 --> 
		<property name="mapperLocations" value="classpath:com/yxkong/**/*.xml" />
   </bean>
   <bean id="mapperScannerConfig" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.yxkong" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
   </bean>
   <!-- 配置mybatis end-->
   <!-- 事务配置 -->
   <!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	
 	<aop:config >
 	   <!--<aop:pointcut expression="execution(public * com.yxkong..*Service.*(..))" id="serviceModule"/> 
 	      <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceModule"/>-->
	    <aop:pointcut id="commonModule"
			expression="execution(public * com.yxkong.common.service..*.*(..))" />
	   <aop:pointcut id="systemModule"
			expression="execution(public * com.yxkong.system.service..*.*(..))" />
	   <aop:pointcut id="tencentModule"
			expression="execution(public * com.yxkong.tencent.service..*.*(..))" />
	   <aop:advisor pointcut-ref="commonModule" advice-ref="txAdvice" />
	   <aop:advisor pointcut-ref="systemModule" advice-ref="txAdvice" /> 
	   <aop:advisor advice-ref="txAdvice" pointcut-ref="commonModule"/>
	   <aop:advisor advice-ref="txAdvice" pointcut-ref="systemModule"/>
	   <aop:advisor advice-ref="txAdvice" pointcut-ref="tencentModule"/>
	    
	</aop:config>
	<!-- 拦截器方式配置事物 -->
   <tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED" read-only="false"  rollback-for="java.lang.Exception" />
			<tx:method name="append*" propagation="REQUIRED"  rollback-for="java.lang.Exception"  />
			<tx:method name="insert*" propagation="REQUIRED"  rollback-for="java.lang.Exception"  />
			<tx:method name="save*" propagation="REQUIRED"  rollback-for="java.lang.Exception"  />
			<tx:method name="exe*" propagation="REQUIRED"  rollback-for="java.lang.Exception"  />
			<tx:method name="batch*" propagation="REQUIRED"  rollback-for="java.lang.Exception" />
			<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"  />
			<tx:method name="modify*" propagation="REQUIRED"  rollback-for="java.lang.Exception"  />
			<tx:method name="edit*" propagation="REQUIRED" rollback-for="java.lang.Exception"  />
			<tx:method name="del*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="remove*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="repair" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="delAndRepair" propagation="REQUIRED"  rollback-for="java.lang.Exception" />

			<tx:method name="get*" propagation="SUPPORTS"  read-only="true"/>
			<tx:method name="find*" propagation="SUPPORTS"  read-only="true"/>
			<tx:method name="select*" propagation="SUPPORTS"  read-only="true"/>
			<tx:method name="load*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="search*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="datagrid*" propagation="SUPPORTS" read-only="true" />

			<tx:method name="*" propagation="SUPPORTS" read-only="true" />
		</tx:attributes>
	</tx:advice>
    <!-- 这里扫描的时候将Controller排除  -->
   <context:component-scan base-package="com.yxkong">
      <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
   </context:component-scan>
   <!-- 配置mybatis end-->
   <!-- 设置hibernate的sessionFactory-->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 设置扫描的基类 -->
		<property name="packagesToScan">
			<list>
				<value>com.yxkong.common.model</value>
				<value>com.yxkong.system.model</value>
				<value>com.yxkong.tencent.model</value>
			</list>
		</property>
		
		<property name="hibernateProperties">
			<props>
				<!-- 指定hibernate sql的方言 -->
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<!-- 在控制台是否打印操作执行的sql语句 -->
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<!-- 格式化输出的sql语句 -->
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
				<!-- 操作hibernate反射数据库时用 -->
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
				<prop key="hibernate.connection.release_mode">after_statement</prop>
			</props>
		</property>
	</bean>
   
  
  
   <!-- 
	<context:component-scan base-package="com.yxkong.common" />
	<context:component-scan base-package="com.yxkong.system" />
	 -->
	 <!-- spring quartz start-->
	 <!-- 调度的配置 -->
	<bean id="asynDataTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  
       <property name="jobDetail" ref="dataJobDetail"/>  
       <property name="cronExpression" value="0 15 10 * * ? 2014"/> <!-- 每隔1秒钟触发一次 -->  
      <!-- 
                *   *    *    *   *    *   *     
                           格式: [秒] [分] [小时] [日] [月] [周] [年] 
                          说明:  必填               允许填写值                              允许的通配符
                            秒        是                      0-59             , - * / 
                            分        是                      0-59             , - * /
                            时        是         		0-23             , - * /
                            日        是                      1-31             , - * ? / L W
                            月        是    	1-12 or JAN-DEC      , - * / 
                            周        是            1-7 or SUN-SAT       , - * ? / L #
                            年        否           empty 或 1970-2099     , - * / 
                          通配符说明:
             * 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。
             ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ? 
             - 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。
             , 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
             / 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。 
             L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五" 
             W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-").
             
             'L'和 'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资 )
             # 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了) 
                                    周字段的设置,若使用英文字母是不区分大小写的 MON 与mon相同. 
                              常用示例:
                0 0 12 * * ? 每天12点触发 
				0 15 10 ? * * 每天10点15分触发 
				0 15 10 * * ? 每天10点15分触发 
				0 15 10 * * ? * 每天10点15分触发 
				0 15 10 * * ? 2005 2005年每天10点15分触发 
				0 * 14 * * ? 每天下午的 2点到2点59分每分触发 
				0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 
				0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 每天下午的 18点到18点59分(整点开始,每隔5分触发) 
				
				0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发 
				0 10,44 14 ? 3 WED     3月分每周三下午的 2点10分和2点44分触发 (特殊情况,在一个时间设置里,执行两次或  两次以上的情况) 
				0 59 2 ? * FRI    每周5凌晨2点59分触发; 
				0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发 
				0 15 10 15 * ? 每月15号上午10点15分触发 
				0 15 10 L * ? 每月最后一天的10点15分触发 
				0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发 
				0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发 
				0 15 10 ? * 6#3 每月的第三周的星期五开始触发 
				0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次 
				0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节) 
       -->
    </bean>  
    <!-- job的配置-->
    <bean id="dataJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
        <!-- 指定任务实体 --> 
        <property name="targetObject" ref="asynDataJob"/> 
        <!-- 指定任务入口方法 --> 
        <property name="targetMethod" value="execute"/>  
        <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->  
        <property name="concurrent" value="false"/>
   </bean>  
   <!-- 工作的bean -->
   <bean id="asynDataJob" class="com.yxkong.system.asny.AsnyDataJob"/>  
   <!-- 启动触发器的配置 -->
   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
       <property name="triggers">  
        <!-- 每个Trigger表示一个作业。 -->
           <list>  
               <ref bean="asynDataTrigger"/> 
           </list>  
       </property>  
       <property name="autoStartup" value="true"/>  
    </bean>  
    
	<!-- spring quartz end -->
	 
	<!-- 配置druid监控spring jdbc -->
	<bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
	</bean>
	<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">
		<property name="patterns">
			<list>
				<value>com.yxkong.common.service.*</value>
				<value>com.yxkong.system.service.*</value>
			</list>
		</property>
	</bean>
	
	<aop:config>
		<aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" />
	</aop:config>
</beans>


 

除特别注明外,本站所有文章均为我要编程原创,转载请注明出处来自http://5ycode.com/article/23.html

关于
该用户很懒!
切换注册

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享