SSM框架搭建------包含工程项目结构,项目需求的各种配置文件

一、Maven工程框架结构及其依赖关系

SSM的Maven工程结构
各个组件之间的依赖关系:

  1. SSM:pom类型的父工程,可以将各组件的公用jar包在此组件的pom.xml文件中引入。
  2. SSM-Controller:war类型的控制层组件。依赖 SSM-Service组件和SSM-ExternalService组件。
  3. SSM-Service:jar类型的内部服务层组件。依赖SSM-Repository组件。
  4. SSM-ExternalService:jar类型的外部服务组件。依赖SSM-Common组件。
  5. SSM-Repository:jar类型的持久层组件。依赖SSM-Common组件。
  6. SSM-Common:jar类型的公共组件。

注意:各个组件的依赖有传递效果,所以要配置成线性依赖关系,jar包在哪个组件引入看具体情况吧。我这里使用的比较简单,除了数据库相关的在SSM-Repository中引入,其他的jar全部在SSM中引入。原则上将使用原生JDK封装的方法/工具类放在SSM-Common组件中,对框架依赖度较高的工具等不适合放在这里。这样可以更好的在不同的项目中复用这个公共组件(个人见解)

二、工程各个模块设计及相关jar包(含jar的版本号)

SSM框架jar包
注意:该项目工程使用的大部分jar包版本都是目前最新的版本(2019年6月16日)。MySql数据库驱动由于在6.x版本及其之后有很大的变化,该工程使用的Druid数据库连接池对MySql6.x及更高版本支持的不是很好,所以MySql数据库驱动选择的是5.x的最高版本。这里引入两个数据库驱动,是为了配置多数据源。

三、各组件的pom.xml文件(注意SSM父组件、SSM-Repository持久层组件)

1. SSM父工程

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>SSM</groupId>
	<artifactId>SSM</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	<properties>
		<!--1、slf4j+logback日志文件管理包版本号 -->
		<slf4j.version>1.7.26</slf4j.version>
		<logback.version>1.2.3</logback.version>
		<!--2、junit测试单元版本号 -->
		<junit.version>4.12</junit.version>
		<!--3、jackson版本号 -->
		<jackson.version>2.9.9</jackson.version>
		<woodstox.version>5.2.0</woodstox.version>
		<!--4、lombok版本号 -->
		<lombok.version>1.18.6</lombok.version>
		<!--5、hutool工具版本号 -->
		<hutool.version>4.5.10</hutool.version>
		<!--6、Spring版本号 -->
		<spring.version>5.1.7.RELEASE</spring.version>
		<!--7、上传组件版本号 -->
		<commons-io.version>2.6</commons-io.version>
		<fileupload.version>1.4</fileupload.version>
		<!--8、摘要运算、编码解码版本号 -->
		<commons-codec.version>1.12</commons-codec.version>
		<!--9、Aspectj AOP版本号 -->
		<aspectjweaver.version>1.9.4</aspectjweaver.version>
		<!--10、跨域访问 -->
		<cors-filter.version>2.6</cors-filter.version>
		<!--11、socket通信 -->
		<netty-socketio.version>1.7.17</netty-socketio.version>
	</properties>
	<dependencies>
		<!-- slf4j+logback日志文件管理包 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-access</artifactId>
			<version>${logback.version}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logback.version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
			<version>${logback.version}</version>
		</dependency>
		<!-- junit测试单元 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<!-- 发布的时候不会加载此包 -->
			<scope>test</scope>
		</dependency>
		<!-- jackson处理工具 -->
		<!-- jackson核心包:jackson-core,jackson-databind,jackson-annotations。 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<!-- Jackson对JAXB注解的支持实现,既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。 -->
		<dependency>
			<groupId>com.fasterxml.jackson.module</groupId>
			<artifactId>jackson-module-jaxb-annotations</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<!--Jackson的XML解析支持 -->
		<dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-xml</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.woodstox</groupId>
			<artifactId>woodstox-core</artifactId>
			<version>${woodstox.version}</version>
		</dependency>
		<!-- 使用JDK8新特性的话,jackson需要新增依赖包。 -->
		<dependency>
			<groupId>com.fasterxml.jackson.module</groupId>
			<artifactId>jackson-module-parameter-names</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-jdk8</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-jsr310</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<!--lombok:简化实体类的getter/setter/toString等方法 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>${lombok.version}</version>
			<scope>provided</scope>
		</dependency>
		<!--hutool工具集 -->
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>${hutool.version}</version>
		</dependency>
		<!--Spring框架核心包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 上传组件包 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>${fileupload.version}</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>${commons-io.version}</version>
		</dependency>
		<!-- 摘要运算、编码解码的包。如常见的编码解码工具Base64、MD5、Hex、SHA1、DES等 -->
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>${commons-codec.version}</version>
		</dependency>
		<!--AspectJ AOP -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>${aspectjweaver.version}</version>
		</dependency>
		<!-- 跨域访问 -->
		<dependency>
			<groupId>com.thetransactioncompany</groupId>
			<artifactId>cors-filter</artifactId>
			<version>${cors-filter.version}</version>
		</dependency>
		<!-- socket通信 -->
		<dependency>
			<groupId>com.corundumstudio.socketio</groupId>
			<artifactId>netty-socketio</artifactId>
			<version>${netty-socketio.version}</version>
		</dependency>
		<dependency>
			<groupId>org.bytedeco</groupId>
			<artifactId>javacv</artifactId>
			<version>1.4.4</version>
			<exclusions>
				<exclusion>
					<groupId>org.bytedeco</groupId>
					<artifactId>javacpp</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>flycapture</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>libdc1394</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>libfreenect</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>libfreenect2</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>librealsense</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>videoinput</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>opencv</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>tesseract</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>leptonica</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>flandmark</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>artoolkitplus</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.bytedeco</groupId>
			<artifactId>javacv-platform</artifactId>
			<version>1.4.4</version>
			<exclusions>
				<exclusion>
					<groupId>org.bytedeco</groupId>
					<artifactId>javacv</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>flycapture-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>libdc1394-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>libfreenect-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>libfreenect2-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>librealsense-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>videoinput-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>opencv-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>tesseract-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>leptonica-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>flandmark-platform</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.bytedeco.javacpp-presets</groupId>
					<artifactId>artoolkitplus-platform</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>
</project>

2. SSM-Controller控制层组件

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>SSM</groupId>
		<artifactId>SSM</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>SSM-Controller</groupId>
	<artifactId>SSM-Controller</artifactId>
	<packaging>war</packaging>
	<!-- 编译相关配置 -->
	<build>
		<!-- 编译插件用jdk1.8编译 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>SSM</groupId>
			<artifactId>SSM-Service</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>SSM</groupId>
			<artifactId>SSM-ExternalService</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>
</project>

3. SSM-Service内部服务层组件

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>SSM</groupId>
		<artifactId>SSM</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>SSM-Service</artifactId>
	<!-- 编译相关配置 -->
	<build>
		<!-- 编译插件用jdk1.8编译 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>SSM</groupId>
			<artifactId>SSM-Repository</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>
</project>

4. SSM-ExternalService外部服务组件

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>SSM</groupId>
		<artifactId>SSM</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>SSM-ExternalService</artifactId>
	<!-- 编译相关配置 -->
	<build>
		<!-- 编译插件用jdk1.8编译 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>SSM</groupId>
			<artifactId>SSM-Common</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>
</project>

5. SSM-Repository持久层组件

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>SSM</groupId>
		<artifactId>SSM</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>SSM-Repository</artifactId>
	<properties>
		<!-- 1、Mysql驱动版本号 -->
		<mysql.version>5.1.47</mysql.version>
		<!-- 2、postgresql驱动版本号 -->
		<postgresql.version>42.2.5</postgresql.version>
		<!-- 3、Druid数据库连接池版本号 -->
		<druid.version>1.1.17</druid.version>
		<!-- 4、Mybatis-Spring版本号 -->
		<mybatis-spring.version>2.0.1</mybatis-spring.version>
		<!-- 5、Mybatis版本号 -->
		<mybatis.version>3.5.1</mybatis.version>
		<!-- 6、Mybatis-Plus版本号 -->
		<mybatis-plus.version>3.1.1</mybatis-plus.version>
	</properties>
	<dependencies>
		<!-- Mysql数据库驱动包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>
		<!-- postgresql驱动包 -->
		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<version>${postgresql.version}</version>
		</dependency>
		<!--Druid数据库连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>${druid.version}</version>
		</dependency>
		<!--Mybatis-Spring框架整合包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>${mybatis-spring.version}</version>
		</dependency>
		<!--Mybatis核心包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
		<!-- Mybatis-Plus核心包 -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus</artifactId>
			<version>${mybatis-plus.version}</version>
		</dependency>
		<dependency>
			<groupId>SSM</groupId>
			<artifactId>SSM-Common</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>
	<!-- 编译相关配置 -->
	<build>
		<!-- 编译插件用jdk1.8编译 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

6. SSM-Common公共组件

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>SSM</groupId>
		<artifactId>SSM</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>SSM-Common</artifactId>
	<!-- 编译相关配置 -->
	<build>
		<!-- 编译插件用jdk1.8编译 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

四、配置文件(为了方便,我将工程所有的配置文件都放在SSM-Controller组件中)

注意:项目持久层框架使用两种配置方式,一种是原生的MyBatis框架,一种是增强的MyBatis-plus框架。可以在applicationContext.xml文件中使用一下方式引入一种。切记不要同时引入两个。

<!--##### 引入Spring-MyBatis整合配置文件 ##### -->
<import resource="classpath:spring/spring-mybatis.xml" /> 
<!--##### 引入Spring-MyBatis-plus整合配置文件 ##### -->
<import resource="classpath:spring/spring-mybatis-plus.xml" />

配置文件位置图:
配置文件位置
1、applicationContext.xml配置文件

<?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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/context
						http://www.springframework.org/schema/context/spring-context.xsd
						http://www.springframework.org/schema/aop
						http://www.springframework.org/schema/aop/spring-aop.xsd">
	<description>Spring框架的主配置文件</description>
	<!--##### 引入配置文件 ##### -->
	<context:property-placeholder
		location="classpath:config.properties" />
	<!--##### 自动加载Service ##### -->
	<context:component-scan
		base-package="com.xxxxxx.xxxxxx.service.impl,com.xxxxxx.xxxxxx.externalservice">
	</context:component-scan>
	<!--##### Aspectj支持自动代理实现AOP功能 ##### -->
	<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
	<!--##### Bean配置 ##### -->

	<!--##### 引入Spring-MyBatis整合配置文件 ##### -->
	<!--<import resource="classpath:spring/spring-mybatis.xml" /> -->

	<!--##### 引入Spring-MyBatis-plus整合配置文件 ##### -->
	<import resource="classpath:spring/spring-mybatis-plus.xml" />
</beans>

2、spring-mvc.xml配置文件

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans    
                        http://www.springframework.org/schema/beans/spring-beans.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd
                        http://www.springframework.org/schema/util       
                        http://www.springframework.org/schema/util/spring-util.xsd ">
	<description>SpringMVC配置文件</description>
	<!--##### 引入配置文件 ##### -->
	<context:property-placeholder
		location="classpath:config.properties" />
	<!--##### 自动加载Controller ##### -->
	<context:component-scan
		base-package="com.xxxxxx.xxxxxx.controller">
	</context:component-scan>
	<!-- ##### 注解映射的支持,增加消息转换,防止IE将下载Json数据 ##### -->
	<mvc:annotation-driven>
		<mvc:message-converters>
			<ref bean="stringHttpMessageConverter" />
			<ref bean="JacksonHttpMessageConverter" /><!--通过自定义的格式转化映射器可以将Date以指定的格式返回给前端 -->
		</mvc:message-converters>
	</mvc:annotation-driven>
	<!-- ##### 对静态资源文件的访问 ##### -->
	<mvc:resources mapping="/images/**"
		location="/WEB-INF/images/" cache-period="31556926" />
	<mvc:resources mapping="/js/**" location="/WEB-INF/js/"
		cache-period="31556926" />
	<mvc:resources mapping="/css/**" location="/WEB-INF/css/"
		cache-period="31556926" />
	<!--##### 拦截器配置 ##### -->
	<mvc:interceptors>
		<!--1、打印请求JVM信息 -->
		<mvc:interceptor>
			<mvc:mapping path="/**" />
			<bean
				class="com.xxxxxx.xxxxxx.interceptor.JvmLogInterceptor">
				<property name="debug" value="${printJvm}" />
			</bean>
		</mvc:interceptor>
	</mvc:interceptors>
	<!--##### Bean配置 ##### -->
	<!-- 1、视图解释Bean -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/view/" />
		<property name="suffix" value=".jsp" />
	</bean>
	<!--2、文件上传Bean -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="10485760000" />
		<property name="maxInMemorySize" value="40960" />
		<property name="defaultEncoding" value="UTF-8"></property>
	</bean>
	<!-- 3、JSON转换Bean -->
	<bean id="JacksonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
				<value>application/json;charset=UTF-8</value>
			</list>
		</property>
		<property name="objectMapper" ref="customObjectMapper" />
	</bean>
	<bean id="customObjectMapper"
		class="com.xxxxxx.xxxxxx.converter.CustomObjectMapper" />	<!-- 日期和null值转换Bean -->
	<!-- 4、字符串乱码处理Bean -->
	<bean id="stringHttpMessageConverter"
		class="org.springframework.http.converter.StringHttpMessageConverter">
		<constructor-arg value="UTF-8" index="0"></constructor-arg>
		<property name="supportedMediaTypes">
			<list>
				<value>text/plain;charset=UTF-8</value>
			</list>
		</property>
	</bean>
	<!-- 5、REST支持Bean -->
	<bean id="restTemplate"
		class="org.springframework.web.client.RestTemplate">
		<property name="messageConverters" ref="messageConverters">
		</property>
	</bean>
	<util:list id="messageConverters">	<!--消息转换列表 -->
		<ref bean="stringHttpMessageConverter" />
		<ref bean="JacksonHttpMessageConverter" />
	</util:list>
</beans>  

3、spring-mybatis-plus.xml

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans    
                        http://www.springframework.org/schema/beans/spring-beans.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd
                        http://www.springframework.org/schema/tx
                        http://www.springframework.org/schema/tx/spring-tx.xsd">
	<description>Spring-MyBatis整合配置文件</description>
	<!--##### 数据库连接池配置 ##### -->
	<bean id="dataSource"
		class="com.xxxxxx.xxxxxx.datasource.DynamicDataSource">
		<property name="defaultTargetDataSource" ref="mysqlDS" /><!--设置默认数据源 -->
		<property name="targetDataSources"><!--设置多个数据源 -->
			<map>
				<entry key="mysqlDataSource" value-ref="mysqlDS" />
				<entry key="postgresqlDataSource" value-ref="postgresqlDS" />
			</map>
		</property>
	</bean>
	<!-- mysql数据源 -->
	<bean name="mysqlDS"
		class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
		destroy-method="close">
		<property name="url" value="${mysql.url}" />
		<property name="username" value="${mysql.username}" />
		<property name="password" value="${mysql.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="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="${removeAbandoned}" />
		<!-- 7200秒,也就是2小时 -->
		<property name="removeAbandonedTimeout"
			value="${removeAbandonedTimeout}" />
		<!-- 不关闭abanded连接时输出错误日志 -->
		<property name="logAbandoned" value="${logAbandoned}" />
		<!-- 监控数据库 -->
		<property name="filters" value="${filters}" />
	</bean>
	<!-- postgresql数据源 -->
	<bean name="postgresqlDS"
		class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
		destroy-method="close">
		<property name="url" value="${postgresql.url}" />
		<property name="username" value="${postgresql.username}" />
		<property name="password" value="${postgresql.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="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="${removeAbandoned}" />
		<!-- 7200秒,也就是2小时 -->
		<property name="removeAbandonedTimeout"
			value="${removeAbandonedTimeout}" />
		<!-- 不关闭abanded连接时输出错误日志 -->
		<property name="logAbandoned" value="${logAbandoned}" />
		<!-- 监控数据库 -->
		<property name="filters" value="${filters}" />
	</bean>
	<!--##### 整合Spring-Mybatis-plus框架 ##### -->
	<!--A、配置MybatisSqlSessionFactoryBean -->
	<bean id="sqlSessionFactory"
		class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation"
			value="classpath:mybatis-config.xml" />
		<property name="plugins">
			<array>
				<!-- 分页插件配置 -->
				<bean id="paginationInterceptor"
					class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor" />
				<!-- 性能拦截器,兼打印sql,不建议生产环境配置 -->
				<bean id="performanceInterceptor"
					class="com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor" />
			</array>
		</property>
		<!-- MP全局配置注入 -->
		<property name="globalConfig" ref="globalConfig" />
	</bean>
	<!-- 定义MP全局策略 -->
	<bean id="globalConfig"
		class="com.baomidou.mybatisplus.core.config.GlobalConfig">
		<!-- 主键策略配置,使用主键自增策略时,使用XML映射SQL时的插入语句不要出现主键字段。 -->
		<property name="dbConfig" ref="dbConfig"></property>
	</bean>
	<bean id="dbConfig"
		class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
		<property name="idType" value="ID_WORKER" />
	</bean>
	<!--B、自动加载mapper.java接口、mapper.xml,需要保证接口和映射文件路径相同。 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去 -->
		<property name="sqlSessionFactoryBeanName"
			value="sqlSessionFactory"></property>
		<!-- 指定要自动扫描接口的基础包,实现接口 -->
		<property name="basePackage"
			value="com.xxxxxx.xxxxxx.mapper" />
	</bean>
	<!--##### 声明式事务管理 ##### -->
	<!--A、定义事物管理器,由spring管理事务 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!--B、定义事物管理器,由spring管理事务 -->
	<tx:annotation-driven
		transaction-manager="transactionManager" />
</beans>

4、spring-mybatis.xml配置文件

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans    
                        http://www.springframework.org/schema/beans/spring-beans.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd
                        http://www.springframework.org/schema/tx
                        http://www.springframework.org/schema/tx/spring-tx.xsd">
	<description>Spring-MyBatis整合配置文件</description>
	<!--##### 数据库连接池配置 ##### -->
	<bean id="dataSource"
		class="com.xxxxxx.xxxxxx.datasource.DynamicDataSource">
		<property name="defaultTargetDataSource" ref="mysqlDS" /><!--设置默认数据源 -->
		<property name="targetDataSources"><!--设置多个数据源 -->
			<map>
				<entry key="mysqlDataSource" value-ref="mysqlDS" />
				<entry key="postgresqlDataSource" value-ref="postgresqlDS" />
			</map>
		</property>
	</bean>
	<!-- mysql数据源 -->
	<bean name="mysqlDS"
		class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
		destroy-method="close">
		<property name="url" value="${mysql.url}" />
		<property name="username" value="${mysql.username}" />
		<property name="password" value="${mysql.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="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="${removeAbandoned}" />
		<!-- 7200秒,也就是2小时 -->
		<property name="removeAbandonedTimeout"
			value="${removeAbandonedTimeout}" />
		<!-- 不关闭abanded连接时输出错误日志 -->
		<property name="logAbandoned" value="${logAbandoned}" />
		<!-- 监控数据库 -->
		<property name="filters" value="${filters}" />
	</bean>
	<!-- postgresql数据源 -->
	<bean name="postgresqlDS"
		class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
		destroy-method="close">
		<property name="url" value="${postgresql.url}" />
		<property name="username" value="${postgresql.username}" />
		<property name="password" value="${postgresql.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="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="${removeAbandoned}" />
		<!-- 7200秒,也就是2小时 -->
		<property name="removeAbandonedTimeout"
			value="${removeAbandonedTimeout}" />
		<!-- 不关闭abanded连接时输出错误日志 -->
		<property name="logAbandoned" value="${logAbandoned}" />
		<!-- 监控数据库 -->
		<property name="filters" value="${filters}" />
	</bean>
	<!--##### 整合Spring-Mybatis框架 ##### -->
	<!--A、配置SqlSessionFactoryBean -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 数据源 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 加载Mybatis主配置文件 -->
		<property name="configLocation"
			value="classpath:mybatis-config.xml" />
	</bean>
	<!--B、自动加载mapper.java接口、mapper.xml,需要保证接口和映射文件路径相同。 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去 -->
		<property name="sqlSessionFactoryBeanName"
			value="sqlSessionFactory"></property>
		<!-- 指定要自动扫描接口的基础包,实现接口 -->
		<property name="basePackage"
			value="com.xxxxxx.xxxxxx.mapper" />
	</bean>
	<!--##### 声明式事务管理 ##### -->
	<!--A、定义事物管理器,由spring管理事务 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!--B、定义事物管理器,由spring管理事务 -->
	<tx:annotation-driven
		transaction-manager="transactionManager" />
</beans>

5、mybatis-config.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
		<!-- 使全局的映射器启用或禁用缓存。 -->
		<setting name="cacheEnabled" value="true" />
		<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
		<setting name="lazyLoadingEnabled" value="false" />
		<!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->
		<setting name="aggressiveLazyLoading" value="true" />
		<!-- 是否允许单条sql 返回多个数据集 (取决于驱动的兼容性) default:true -->
		<setting name="multipleResultSetsEnabled" value="true" />
		<!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->
		<setting name="useColumnLabel" value="true" />
		<!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。 default:false -->
		<setting name="useGeneratedKeys" value="false" />
		<!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分 FULL:全部 -->
		<setting name="autoMappingBehavior" value="PARTIAL" />
		<!-- 这是默认的执行类型 (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 
			执行器可以重复执行语句和批量更新) -->
		<setting name="defaultExecutorType" value="SIMPLE" />
		<!-- 使用驼峰命名法转换字段。 -->
		<setting name="mapUnderscoreToCamelCase" value="true" />
		<!-- 设置本地缓存范围 session:就会有数据的共享 statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
		<setting name="localCacheScope" value="SESSION" />
		<!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 -->
		<setting name="jdbcTypeForNull" value="NULL" />
	</settings>
	<typeAliases>
		<package name="com.xxxxxx.xxxxxx.entity" />
	</typeAliases>
</configuration>

6、logback.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL  -->
<!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出  -->
<!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。  -->
<configuration scan="true" scanPeriod="60 seconds"
	debug="false">
	<!-- 定义日志文件 输入位置(工作空间所在磁盘)  -->
	<property name="log_dir" value="/logs/ev_cmdb" />
	<!-- 日志最大的历史 30天  -->
	<property name="maxHistory" value="30" />
	<!-- ConsoleAppender 控制台输出日志  -->
	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<!-- 对日志进行格式化  -->
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n
			</pattern>
		</encoder>
	</appender>
	<!-- ERROR级别日志  -->
	<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender -->
	<appender name="ERROR"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 过滤器,只记录WARN级别的日志  -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动  -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--日志输出位置  可相对、和绝对路径  -->
			<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error-log.log
			</fileNamePattern>
			<!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,   则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 -->
			<maxHistory>${maxHistory}</maxHistory>
		</rollingPolicy>
		<!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern><minIndex>1</minIndex><maxIndex>3</maxIndex></rollingPolicy> -->
		<!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>5MB</maxFileSize></triggeringPolicy> -->
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
			</pattern>
		</encoder>
	</appender>
	<!-- WARN级别日志 appender  -->
	<appender name="WARN"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 过滤器,只记录WARN级别的日志  -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>WARN</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 按天回滚 daily  -->
			<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn-log.log  
			</fileNamePattern>
			<!-- 日志最大的历史 60天  -->
			<maxHistory>${maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
			</pattern>
		</encoder>
	</appender>
	<!-- INFO级别日志 appender  -->
	<appender name="INFO"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 过滤器,只记录INFO级别的日志  -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 按天回滚 daily  -->
			<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info-log.log  
			</fileNamePattern>
			<!-- 日志最大的历史 60天  -->
			<maxHistory>${maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
			</pattern>
		</encoder>
	</appender>
	<!-- DEBUG级别日志 appender  -->
	<appender name="DEBUG"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 过滤器,只记录DEBUG级别的日志  -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 按天回滚 daily  -->
			<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug-log.log  
			</fileNamePattern>
			<!-- 日志最大的历史 60天  -->
			<maxHistory>${maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
			</pattern>
		</encoder>
	</appender>
	<!-- TRACE级别日志 appender  -->
	<appender name="TRACE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		 <!-- 过滤器,只记录ERROR级别的日志  -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>TRACE</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 按天回滚 daily  -->
			<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/trace-log.log  
			</fileNamePattern>
			<!-- 日志最大的历史 60天  -->
			<maxHistory>${maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
			</pattern>
		</encoder>
	</appender>
	<logger name="java.sql.PreparedStatement" value="DEBUG" />
	<logger name="java.sql.Connection" value="DEBUG" />
	<logger name="java.sql.Statement" value="DEBUG" />
	<logger name="com.ibatis" value="DEBUG" />
	<logger name="com.ibatis.common.jdbc.SimpleDataSource"
		value="DEBUG" />
	<logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
	<logger
		name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"
		value="DEBUG" />
	<!-- root级别   DEBUG  -->
	<root level="debug">
		<!-- 控制台输出  -->
		<appender-ref ref="STDOUT" />
		<!-- 文件输出  -->
		<!--<appender-ref ref="DEBUG" /> -->
		<!--<appender-ref ref="ERROR" /> -->
		<!--<appender-ref ref="INFO" /> -->
		<!--<appender-ref ref="WARN" /> -->
		<!--<appender-ref ref="TRACE" /> -->
	</root>
</configuration>

7、config.properties配置文件

#MySql数据库配置
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/postgres
mysql.username=root
#mysql.password=123456
mysql.password=
#PostgreSQL数据库配置
postgresql.driver=org.postgresql.Driver
postgresql.url=jdbc:postgresql://localhost:5432/postgres
postgresql.username=postgres
postgresql.password=postgres
#Druid数据库连接池配置
validationQuery=SELECT 1
initialSize=10
maxActive=50
maxIdle=150
minIdle=1
maxWait=60000
testOnBorrow=false
testOnReturn=false
testWhileIdle=true
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=25200000
removeAbandoned=false
removeAbandonedTimeout=7200
logAbandoned=true
filters=mergeStat
#是否打印Http请求堆栈内存使用情况
printJvm=false
#socket通信端口和通信地址
socket.io.port=""
socket.io.host=""

五、web.xml(WEB项目的关键配置文件)

配置文件位置:
web.xml位置
web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<display-name>Spring-Web</display-name>
	<!-- 消除一些日志错误提示 -->
	<context-param>
		<param-name>spring.profiles.active</param-name>
		<param-value>dev</param-value>
	</context-param>
	<context-param>
		<param-name>spring.profiles.default</param-name>
		<param-value>dev</param-value>
	</context-param>
	<context-param>
		<param-name>spring.liveBeansView.mbeanDomain</param-name>
		<param-value>dev</param-value>
	</context-param>
	<!-- ##### Listener配置 ##### -->
	<!--1、SpringContext的监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext.xml</param-value>
	</context-param>
	<!--2、Web应用中可以使用System.getProperty("webAppRoot")来获取系统的绝对路径 -->
	<listener>
		<listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
	</listener>
	<context-param>
		<param-name>webAppRootKey</param-name>
		<param-value>webAppRoot</param-value>
	</context-param>
	<!-- 3、防止Spring内存溢出监听器 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>
	<!-- ##### Servlet配置 ##### -->
	<!--1、配置SpringMVC的DispatcherServlet -->
	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern> <!--会拦截URL中带“/”的请求。 -->
	</servlet-mapping>
	<!--2、配置Druid的StatViewServlet。然后运行Tomcat,浏览器输入如http://127.0.0.1:8080/SSM-Controller/druid/index.html -->
	<servlet>
		<servlet-name>DruidStatView</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>DruidStatView</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>
	<!-- ##### Filter配置 ##### -->
	<!-- 1、Spring框架解决从页面传来的字符串的编码问题。 -->
	<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value><!-- -->
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!--2、Druid的WebStatFilter -->
	<filter>
		<filter-name>druidWebStatFilter</filter-name>
		<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
		<init-param>
			<param-name>exclusions</param-name>
			<param-value>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value>
		</init-param>
		<init-param>
			<param-name>principalSessionName</param-name>
			<param-value>sessionInfo</param-value>
		</init-param>
		<init-param>
			<param-name>profileEnable</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>druidWebStatFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- 3、JAVA跨域资源访问CORSFilter -->
	<filter>
		<filter-name>CORS</filter-name>
		<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
		<init-param>
			<param-name>cors.allowOrigin</param-name>
			<param-value>*</param-value>
		</init-param>
		<init-param>
			<param-name>cors.supportedMethods</param-name>
			<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
		</init-param>
		<init-param>
			<param-name>cors.supportedHeaders</param-name>
			<param-value>Accept, Origin, X-Requested-With, Content-Type,Last-Modified</param-value>
		</init-param>
		<init-param>
			<param-name>cors.exposedHeaders</param-name>
			<param-value>Set-Cookie</param-value>
		</init-param>
		<init-param>
			<param-name>cors.supportsCredentials</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CORS</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- ##### 跳转页面配置 ##### -->
	<welcome-file-list><!--指定欢迎页面 -->
		<welcome-file>login.html</welcome-file>
	</welcome-file-list>
	<error-page> <!--当系统出现404错误,跳转到页面nopage.html -->
		<error-code>404</error-code>
		<location>/view/nopage.html</location>
	</error-page>
	<error-page> <!--系统错误,跳转到页面error.html -->
		<exception-type>java.lang.NullPointerxception</exception-type>
		<location>/error.html</location>
	</error-page>
	<!--<session-config>会话超时配置,单位分钟 <session-timeout>360</session-timeout> </session-config> 
		<filter> <filter-name>checkFilter</filter-name> <filter-class>com.xxxxxx.filter.SessionFliter</filter-class> 
		</filter> <filter-mapping> <filter-name>checkFilter</filter-name> <url-pattern>/*</url-pattern> 
		</filter-mapping> -->
</web-app>

后记

框架亲测可用,该博文只是将项目一些关键的部分粘贴出来供大家使用。关于详细的配置解答,会在后续的博客中详述。写作过程中可能出现失误,如果按照此方式配置出现任何问题,可以留言或是直接联系本人。

配置文件中全类名带xxxx的是自定义类(也可能存在有些自定义类没有使用xxxx的标记,虽然我已经来来回回检查4次了。现在是凌晨1:35,实在太累了,难免疏忽。),具体实现后续会给出,这个博客就不写了。

邮件地址:312701678@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豢龙先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值