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>
<!---->