我这是一个标准的maven的目录结构,配置文件都在src/main/resources根目录下。因为要改成多环境的配置,所以只有properties的文件改变了(公共配置可以原地不动)
1.将配置文件放到不同的文件夹下
2.创建2个不同的profile,一个是生产环境配置(prod),一个是开发环境配置(dev),分别与步骤1中的两个文件夹名对应一致
<profiles>
<!-- 不同环境的配置代码 -->
<profile>
<id>dev</id>
<properties>
<package.environment>dev</package.environment>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<package.environment>prod</package.environment>
</properties>
</profile>
</profiles>
3.设置变量
<package.environment>dev</package.environment>
4.对resources下的目录进行处理
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>prod/*</exclude>
<exclude>dev/*</exclude>
</excludes>
</resource>
</resources>
上面那个filtering,之前看别人的示例是true。发现这样的话,springContext.xml中类似{url}、{filters}(druid连接池的属性,本来用prod/jdbc.properties和dev/jdbc.properties的配置)就变成了pom.xml中url的属性值了(替换成了http://maven.apache.org)
5. maven-war-plugin的配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
<warName>${project.artifactId}</warName>
<webResources>
<resource>
<directory>src/main/resources/${package.environment}</directory>
<targetPath>WEB-INF/classes</targetPath>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
上面的${project.artifactId}是pom.xml的内置属性,${package.environment}是定义的属性
6.打包
打包之前别忘了update下project,因为pom.xml已经被修改过了
选择项目路径,填好打包命令(我是用的eclipse,所以省略了mvn的字样)
package -P dev 就是用开发环境的配置,package -P prod就是用生产环境的配置
打包成功后,看包结构,虽然也有dev/prod两个文件,但在src/main/resources根目录下已经生成了那三个配置文件,而我web.xml也只是加载了 src/main/resources根目录的配置文件,所以dev和prod对项目本身没有冲突
=================================================================
但是这样的话,eclipse在本地调试的话,没法用tomcat启动,所以改成用maven的tomcat来进行启动
(tomcat7的命令是 tomcat7:run)
1.配置maven的tomcat插件
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
<path>/fitness</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
上面我用到了80的端口,用的tomcat7
2.在依赖中不能添加tomcat的依赖包
3.对javax.servlet-api和javaee-api的scope要加限制,限制成provided
如下:
这样通过命令就能启动了
参考:https://blog.csdn.net/chenjing928/article/details/79883104