mixpplus
11/21/2019 - 11:55 AM

13-ssm框架整合中配置文件中配置项

ssm配置文件解析



web层:

spring-dubbo.xml:

	<!--dubbo应用名称-->
	<dubbo:application name="dubbo_consumer"/>
	
	<!--dubbo服务注册地址-->
	<dubbo:registry address="zookeeper://localhost:2181"/>
	
	<!--dubbo注解扫描包-->
	<dubbo:annotation package="com.ingin.controller"/>
	
	<!--false: dubbo启动时不检查 可以同时启动provider和consumer true: 依次启动provider consumer-->
	<dubbo:consumer check="false"/>

	
spring-mvc.xml:	

	<!--扫描基本的controller service repository component等-->
	<context:component-scan base-package="com.ingin.controller"/>

	<!--跨域设置-->
    <mvc:cors>
        <mvc:mapping path="/**"/>
    </mvc:cors>
	
	<!--看下面详解-->
    <mvc:annotation-driven>
	
	<!--把默认的jackson替换成fastjson-->
        <mvc:message-converters>
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes" value="application/json; charset=utf-8"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

	<!--上传文件解析器-->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		  <!--最大上传文件大小-->
        <property name="maxUploadSize" value="104857600" />
		<!--最大加载到内存大小-->
        <property name="maxInMemorySize" value="4096" />
		<!--默认的编码-->
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>


详解<mvc:annotation-driven>:
	该注解的作用: 向spring容器中注入了下面几个类
	
	RequestMappingHandlerMapping
	BeanNameUrlHandlerMapping
	其中第一个是处理@RequestMapping注解的。.
	第二个会将controller类的名字映射为请求url。
	
	RequestMappingHandlerAdapter
	HttpRequestHandlerAdapter
	SimpleControllerHandlerAdapter
	第一个处理@Controller注解的处理器,支持自定义方法参数和返回值(很酷)。
	第二个是处理继承HttpRequestHandler的处理器。
	第三个处理继承自Controller接口的处理器。
	
	ExceptionHandlerExceptionResolver
	ResponseStatusExceptionResolver
	DefaultHandlerExceptionResolver
	这三个是用来处理异常的解析器。



spring-redis.xml
作用就是创建JedisPool对象放到spring容器中

	<!--Jedis连接池的相关配置-->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal">
            <value>200</value>
        </property>
        <property name="maxIdle">
            <value>50</value>
        </property>
        <!--检查连接池连接可用性和稳定性-->
        <property name="testOnBorrow" value="true"/>
        <property name="testOnReturn" value="true"/>
    </bean>

    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
        <constructor-arg name="host" value="127.0.0.1" />
        <constructor-arg name="port" value="6379" type="int" />
    </bean>


	
service层 provider

ApplicationContext.xml:
		
		<!--扫描普通注解-->
	<context:component-scan base-package="com.ingin.service"/>
	<!--加载jdbc配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
	<!--druidDataSource 配置数据库连接池-->   
    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
	<!--配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<!--注入连接池对象-->
        <property name="dataSource" ref="druidDataSource"/>
		<!--加载mybatis-config配置文件,可以再该配置文件中配置插件 例如分页插件 PageHelper-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
		<!--配置别名-->
        <property name="typeAliasesPackage" value="com.ingin.pojo"/>
    </bean>
	<!--扫描dao接口-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ingin.dao"/>
    </bean>


    <!--service 配置事务-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="druidDataSource"/>
    </bean>
	<!--下面为方式一-->
    <tx:advice id="transactionInterceptor" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut id="pt" expression="execution(* com.ingin.service.*.*(..))"/>
        <aop:advisor advice-ref="transactionInterceptor" pointcut-ref="pt"/>
    </aop:config>
	<!--方式二 还要在使用事务的方法或者类或者接口上添加@Transactional注解,第一种方式不用添加此注解-->
    <!--<tx:annotation-driven transaction-manager="transactionManager"/>-->
	
	
spring-dubbo.xml:

	<!--配置dubbo名称-->
	<dubbo:application name="dubbo_provider"/>
	<!--配置dubbo注册地址-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
	<!--配置dubbo扫描的包-->
    <dubbo:annotation package="com.ingin.service"/>
	<!--配置dubbo扫描的包及端口号-->
    <dubbo:protocol name="dubbo" port="20880"/>
	
	
mybatis-config.xml:
	该文件主要用来配置一些插件
	    <!--分页插件 对应版本为4.1.*-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper"></plugin>
    </plugins>
	
	
定时任务层job;
spring-job.xml:

使用定时任务所需要的依赖:记得添加到pom文件中

	<dependency>
	  <groupId>org.quartz-scheduler</groupId>
	  <artifactId>quartz</artifactId>
	  <version>2.2.1</version>
	</dependency>
	<dependency>
	  <groupId>org.quartz-scheduler</groupId>
	  <artifactId>quartz-jobs</artifactId>
	  <version>2.2.1</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context-support</artifactId>
		<version>5.0.5.RELEASE</version>
	</dependency>

	<context:component-scan base-package="com.ingin"/>
    <!--注册一个定义任务对象-->
    <bean id = "clearImgJob" class="com.ingin.job.ClearImgJob"/>
	
    <!-- 注册JobDetail,作用是负责通过反射调用指定的Job -->
    <bean id="clearImgJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!--注入对象-->
        <property name="targetObject" ref="clearImgJob"/>
        <!--注入方法-->
        <property name="targetMethod" value="run"/>
    </bean>
    <!--注册一个触发器,指定任务触发的时间(间隔)-->
    <bean id="jobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="clearImgJobDetail"/>
        <!--指定了任务的执行时间 :cron 表达式-->
        <property name="cronExpression">
            <!-- 每隔10秒执行一次任务 0/10 * * * * ? -->
            <!-- 每隔2分钟执行一次任务  0 0/2 * * * ? -->
            <!-- 每天凌晨2点执行一次任务 0 0 2 * * ?  -->
            <value>0/10 * * * * ?</value>
        </property>
    </bean>
    <!--注册一个统一调用工厂,通过这个调度工厂调度任务-->
    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="jobTrigger"/>
            </list>
        </property>
    </bean>
	
	
	
	
	
	
	
	如果有多个定时任务可以把定时任务全部写在一个类中,也可以分开类来写,每个定时任务以方法名来区分
	注意: Job1中有两个任务 run1()  run2()
			Job2中有两个任务 run1() run2()
	
	<bean id="job1" class="com.ingin.job.Job1"/>

    <bean id="job1Detail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="job1"/>
        <property name="targetMethod" value="run1"/>
    </bean>
    <bean id="job1Detail2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="job1"/>
        <property name="targetMethod" value="run2"/>
    </bean>


    <bean id="job1Cron1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="job1Detail1"/>
        <property name="cronExpression">
            <value>0/10 * * * * ?</value>
        </property>
    </bean>

    <bean id="job1Cron2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="job1Detail2"/>
        <property name="cronExpression">
            <value>0/10 * * * * ?</value>
        </property>
    </bean>

	
    <bean id="job2" class="com.ingin.job.Job2"/>
    <bean id="job2Detail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="job2"/>
        <property name="targetMethod" value="run1"/>
    </bean>
    <bean id="job2Detail2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="job2"/>
        <property name="targetMethod" value="run2"/>
    </bean>

    <bean id="job2Cron1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="job2Detail1"/>
        <property name="cronExpression">
            <value>0/10 * * * * ?</value>
        </property>
    </bean>
    <bean id="job2Cron2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="job2Detail2"/>
        <property name="cronExpression">
            <value>0/10 * * * * ?</value>
        </property>
    </bean>

    <!--注册一个统一调用工厂,通过这个调度工厂调度任务-->
    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <!--<ref bean="jobTrigger"/>-->
                <ref bean="job1Cron1"/>
                <ref bean="job1Cron2"/>
                <ref bean="job2Cron1"/>
                <ref bean="job2Cron2"/>
            </list>
        </property>
    </bean>
	
	
<!---->