闪入说明:
本工程在 SpringSpringMvcMybatisHelloWorld(Spring + SpringMVC + Mybatis 框架搭建示例) 这个工程基础上完成的,在参考本文章前请先阅读上面文章;
项目工程在开发完成后部署到测试环境时,往往配置文件里面的配置信息需要做部分变动,当然也是可以人为每次手动去修改,但时如果想要做到自动化部署,那么手动修改这一想法就太落套了(通过Maven+SVN工具来做到自动发布,请参考本人的另一篇文章: Linux环境利用SVN+Maven+Tomcat自动发布项目工程);
下面开始本篇工程的介绍:
本篇项目工程较上篇的区别,简单如下:
1)通过Maven来统一管理 build.dev.properties/build.uat.properties/build.pro.properties 等配置文件
2)resources目录下的connection.properties配置文件统一从 build.*.properties配置文件中获取
3)logback.xml日志配置文件同上
4)增加一个application.properties配置文件,该文件用来配置系统相关信息,如日志路径、文件上传下载路径等
5)最核心的变动是工程的pom.xml配置文件内容(请重点关注)
先给出整个工程的目录截图:
一、工程pom.xml文件内容:
<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>com.ltcui</groupId>
<artifactId>MavenHelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>MavenHelloWorld</name>
<description>MavenHelloWorld</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.0.4.RELEASE</spring.version>
<mybatis.version>3.2.8</mybatis.version>
<mybatis-spring.version>1.2.3</mybatis-spring.version>
<oracle.driver.version>11.2.0.3.0</oracle.driver.version>
<druid.version>1.0.18</druid.version>
<logback.version>1.1.3</logback.version>
<logback-ext-spring.version>0.1.2</logback-ext-spring.version>
<jackson.version>2.8.11</jackson.version>
<fastjson.version>1.2.28</fastjson.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<xstream.version>1.4.7</xstream.version>
<junit.version>3.8.1</junit.version>
</properties>
<dependencies>
<!--Spring Core start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</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-webmvc</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-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring Core end -->
<!-- mybatis start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!-- mybatis end -->
<!-- db oracle -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>${oracle.driver.version}</version>
</dependency>
<!-- db oracle -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>jconsole</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>tools</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- logback start -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>${logback-ext-spring.version}</version>
</dependency>
<!-- logback end -->
<!-- fastxml start -->
<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-annotations</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.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- fastxml end -->
<!-- fastjson start -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!-- fastjson end -->
<!-- commens start -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>${xstream.version}</version>
</dependency>
<!-- commens end -->
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
<build>
<!-- 使用指定的filter进行过滤,在执行mvn命令的时候带上-Pdev就代表开发环境(默认) -->
<!-- 执行命令如: mvn clean package -Pdev -->
<filters>
<filter>build.${env}.properties</filter>
</filters>
<!-- 资源文件位置 src/main/resources/ -->
<!-- 这下面的资源文件的${}会全部被替换成build.${env}.properties 中的标签内容 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<!-- 排除部分非配置文件的类型 -->
<excludes>
<exclude>**/*.xls</exclude>
</excludes>
</resource>
</resources>
</build>
<profiles>
<!-- 指定maven 编译方式为jdk1.7版本 -->
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
<!-- 加载 properties 配置文件 (dev 环境) 默认 -->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>dev</env>
</properties>
</profile>
<!-- 加载 properties 配置文件 (uat 环境) -->
<profile>
<id>uat</id>
<properties>
<env>uat</env>
</properties>
</profile>
<!-- 加载 properties 配置文件 (pro 环境) -->
<profile>
<id>pro</id>
<properties>
<env>pro</env>
</properties>
</profile>
</profiles>
</project>
请重点关注里面的 <build>标签里面的内容及<profiles>标签里面增加的配置文件
<activeByDefault>true</activeByDefault> 表示默认加载的配置文件信息
二、build.dev.properties文件内容 (build.uat.properties/build.pro.properties同理 只是部分数据库连接地址等信息不同)
#连接数据库相关配置 ORACLE 开始####
connect.db=oracle
connect.oracle.url=jdbc:oracle:thin:@//127.0.0.1:1521/orcl
connect.oracle.driverClassName=oracle.jdbc.driver.OracleDriver
connect.oracle.username=123
connect.oracle.password=123
connect.oracle.filters=stat
#数据库最大连接池数量(可修改)
connect.oracle.maxActive=20
#数据库初始化时建立物理连接的个数(可修改)
connect.oracle.initialSize=5
#数据库获取连接时最大等待时间,单位毫秒
connect.oracle.maxWait=60000
#数据库最小连接池数量(可修改)
connect.oracle.minIdle=10
#数据库最大空闲数数量(可修改)
connect.oracle.maxIdle=50
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
connect.oracle.timeBetweenEvictionRunsMillis=60000
#一个连接在池中最小生存的时间,单位是毫秒
connect.oracle.minEvictableIdleTimeMillis=300000
connect.oracle.validationQuery=SELECT 'x' FROM DUAL
connect.oracle.testWhileIdle=true
connect.oracle.testOnBorrow=false
connect.oracle.testOnReturn=false
connect.oracle.maxOpenPreparedStatements=20
connect.oracle.removeAbandoned=true
connect.oracle.removeAbandonedTimeout=1800
connect.oracle.logAbandoned=true
#连接数据库相关配置 结束####
#系统相关配置 开始####
sys.logHome=D:/MyWorkData/YQZL/logs
sys.appName=MavenHelloWorld
#系统相关配置 结束####
三、connection.properties配置文件内容:
#连接数据库相关配置 ORACLE 开始####
connect.db=${connect.db}
connect.oracle.url=${connect.oracle.url}
connect.oracle.driverClassName=${connect.oracle.driverClassName}
connect.oracle.username=${connect.oracle.username}
connect.oracle.password=${connect.oracle.password}
connect.oracle.filters=${connect.oracle.filters}
#数据库最大连接池数量(可修改)
connect.oracle.maxActive=${connect.oracle.maxActive}
#数据库初始化时建立物理连接的个数(可修改)
connect.oracle.initialSize=${connect.oracle.initialSize}
#数据库获取连接时最大等待时间,单位毫秒
connect.oracle.maxWait=${connect.oracle.maxWait}
#数据库最小连接池数量(可修改)
connect.oracle.minIdle=${connect.oracle.minIdle}
#数据库最大空闲数数量(可修改)
connect.oracle.maxIdle=${connect.oracle.maxIdle}
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
connect.oracle.timeBetweenEvictionRunsMillis=${connect.oracle.timeBetweenEvictionRunsMillis}
#一个连接在池中最小生存的时间,单位是毫秒
connect.oracle.minEvictableIdleTimeMillis=${connect.oracle.minEvictableIdleTimeMillis}
connect.oracle.validationQuery=${connect.oracle.validationQuery}
connect.oracle.testWhileIdle=${connect.oracle.testWhileIdle}
connect.oracle.testOnBorrow=${connect.oracle.testOnBorrow}
connect.oracle.testOnReturn=${connect.oracle.testOnReturn}
connect.oracle.maxOpenPreparedStatements=${connect.oracle.maxOpenPreparedStatements}
connect.oracle.removeAbandoned=${connect.oracle.removeAbandoned}
connect.oracle.removeAbandonedTimeout=${connect.oracle.removeAbandonedTimeout}
connect.oracle.logAbandoned=${connect.oracle.logAbandoned}
#连接数据库相关配置 结束####
四、application.properties 系统信息配置文件
#系统相关配置 开始####
sys.logHome=${sys.logHome}
sys.appName=${sys.appName}
#系统相关配置 结束####
五、logback.xml 日志配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false" scanPeriod="60 seconds" debug="false">
<!-- 定义日志的根目录 -->
<property name="logHome" value="${sys.logHome}/${sys.appName}" />
<property name="appName" value="${sys.appName}"></property>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</layout>
</appender>
<appender name="appLogAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logHome}/${appName}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logHome}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<MaxHistory>90</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
</layout>
</appender>
<appender name="metricsLogAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logHome}/metrics/${appName}.metrics.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logHome}/${appName}-metrics-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<MaxHistory>90</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%logger{50}] {%msg}%n</pattern>
</layout>
</appender>
<logger name="com.ltcui" level="debug" additivity="true"></logger>
<logger name="metrics" level="debug" additivity="true">
<appender-ref ref="metricsLogAppender" />
</logger>
<root level="info">
<appender-ref ref="stdout" />
<appender-ref ref="appLogAppender" />
</root>
</configuration>
工程搭建完成后,开始编译工程
在工程所在的要目录中,打开cmd命令
打开方法: 在目录空白处 按住 shift 键 -> 右键 -> 在此处打开命令窗口 即可打开cmd命令
执行命令: mvn clean package -Pdev (开发环境)
mvn clean package -Puat (测试环境)
源代码下载:MavenHelloWorld
至此结束,闪出 ... ...