本人初来乍到,最近研究如何搭maven框架,那么在maven项目中重中之重就是如何配父模块的pom文件。为了支持不同环境下使用不同的配置文件,有多重多样的方式,之前了解过可以在工程构建打包阶段选择配置文件,运行阶段进行配置文件选择,感兴趣的可以查阅:https://blog.csdn.net/halfclear/article/details/80067998;
以上两种方式其实还是要把properties文件打包进去,这种方式其实还不够友好,在工程构建打包阶段选择配置文件方式下进一步通过过滤替换的方式来实现;
目前普遍流行的是以下三种方式:
(1)不同环境同一套xml配置文件模板的场景:不同环境下配置不同的properties文件,共用同一套spring配置,通过不同环境下的properties配置文件替换掉spring中的${key}的方式;
(2)不同环境不同xml配置文件的场景:另一种就是不同环境下使用不同 ×××-spring.xml 配置文件,这种情况下需要指定环境来拿取×××-spring.xml;
(3)(1)与(2)相结合使用的场景:在某场景下(1)(2)单独使用并不能满足需求,比如在开发及测试环境下,数据库的读写操作都是用同一个数据库,而在生产环境下,读操作使用一个数据库,写操作用到另一个数据库,那么不同环境下对于数据库的 ds-spring.xml 的配置套路就不同了。
(一)不同环境同一套xml配置文件模板的场景
比如我们以dev/sit/prod三种环境进行讲解
在父模块下建立vars包来放三种环境下的properties文件,文件中主要以key-value的方式来存储数据
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>../${project.parent.artifactId}/vars/vars.dev.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>sit</id>
<build>
<filters>
<filter>../${project.parent.artifactId}/vars/vars.sit.properties</filter>
</filters>
</build>
</profile>
<profile>
<id>prod</id>
<build>
<filters>
<filter>../${project.parent.artifactId}/vars/vars.sit.properties</filter>
</filters>
</build>
</profile>
<profiles>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<testResources>
<testResource>
<directory>${basedir}/src/test/resources</directory>
</testResource>
</testResources>
</build>
上面是pom文件中的配置不同环境下的properties文件,根据单词filter可以猜到这个配置是干嘛了.他的工作过程就是在打包的时候通过key-value对来过滤<directory>${basedir}/src/main/resources</directory>中的文件,并将填充完整后的配置文件全部搬运到target/classes(默认位置,如何想改变位置可以通过<targetPath>标签来指定)中去,并且这个过程是覆盖的. 同时<filtering>true</filtering>指定了在这个”搬运”过程中,需要进行过滤。
从这里介绍的方法可以看出, 配置文件中的参数是在打包的时候才会被真正填充进去的, 那么对于那种希望在Eclipse中调试的项目怎么办.(例如用Jetty插件来调试Maven项目的时候, 并不会将项目打包后来执行, 而是直接运行src/main/webapp作为项目root路径。所以在开发 调试的时候,可以在配置文件的目录中放上完整的配置文件,里面的填充需要的参数,这位就可以顺利进行调试了, 并且不影响打包。
(二)不同环境不同xml配置文件的场景
这种场景其实讲解第三种场景说明就很明了,其实就是resources下根据不同环境分包dev/sit/prod三种包,每个包下面存放该环境下的配置文件&