MavenHelloWorld【通过Maven来管理properties多环境(开发/测试/生产)配置文件】

闪入说明:

本工程在  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

至此结束,闪出 ... ...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值