如今很多Java项目应该都采用Maven进行构建, 其依赖管理, 配置式工作原理使得项目构建也变得比较灵活统一。
基础, Maven基于XML进行配置, 其配置文件叫pom.xml, 如
多模块开发
通常我们的项目都会有多个模块, 合理地拆分模块, 也会使得我们的项目更清晰, 更容易维护, 甚至使得模块间的依赖关系更简单, 如
这里有4个模块, 我们会将api(如user-api)及其实现(如user)分开, 这样做对以后要
替换或扩展实现,
或者暴露给外部, 甚至作服务化时都是有好处的,
web模块依赖了user和webc模块, 那么我们会有一个root pom.xml作为整个项目的配置中心
而对应的某个子模块pom.xml配置:
-
不同环境切换
项目开发中, 我们可能会有很多不同的环境配置, 如DB源, 服务器host等, 我们不可能每次发布都去手动更改配置, 这既繁琐又容易出错, 那基于Maven我们怎么优雅地来切换不同环境呢?如上面所说, Maven可通过profile机制和filtering机制实现环境切换, 如:
项目结构如下
对应的配置文件
这样我们就可以不同环境使用不同的profile进行编译打包了:
通过这种方式我们就可以灵活的切换不同的环境, 甚至可以在不同的环境切换不同的实现等。
若properties文件中有中文值出现,则会出现乱码,
猜测maven-resource-plugin读取properties文件时采用的是二进制流的方式,
查阅后发现该插件的PropertiesUtil.loadPropertyFile()方法中确实使用
FileInputStream读取properties。要解决中文乱码,可以将中文值进行
Unicode转码,或者使用Reader(如InputStreamReader)读取properties文件,
则需修改插件源码。
使Spring感知到当前环境
既然我们已经能通过maven编译打包不同的环境配置了, 那要怎么告知Spring当前是什么环境呢?
在Spring ApplicationContext对象中有一个环境配置属性environment
如今, 除了Maven外, 有了更加灵活强大的构建工具Gradle, Spring已经采用了其进行构建, 其通过Groovy动态语言及编程式构建项目, 不妨也可以实践实践。