我们介绍 Maven 的 Web 项目使用 war 插件针对不同环境打包。这是我在 BAE 部署自己的博客应用的时候整理的一种方案,供大家参考。

最最重要的思路其实就一条:打包之前替换配置文件,从手动变为自动。重点内容

需求的提出:

在开发阶段,我们的 MySQL 数据库连接配置基本上都连着本机数据库, Lucene 索引存放目录基本上是开发者本机的一个目录。但是到了生产环境部署的时候, MySQL 数据库的连接配置和 Lucene 索引存放目录就是另外一个配置了。

那么,我们在打包到生产环境之前是不是要手动将这些配置替换一下呢?

如果手动这样做的话,就显得不灵活,很笨拙了。

好在 Maven 这项工具早就帮我们想到了这个问题。下面我就介绍一下,我在自己的项目 Blog 中是如何操作的。

思路分析:

1、自己的项目里只要是有配置的地方,不要写死在源代码目录(src/main/java)中,而要将配置的信息写在资源目录中 (src/main/resources);

2、即使是写在资源目录中的代码,也尽量将特殊化的配置信息写在配置文件中,这样做的好处有以下两点:

(1)配置信息一般是比较重要的,尤其是生产环境中的配置信息,现在很多代码开源了以后,开发者如果将配置信息提交到 Git 仓库中,很有可能造成一些安全隐患(服务器的连接参数都暴露了,你说能安全吗?),所以一般情况下,这些重要的服务器配置文件应该被 Git 排除掉;

(2)分离出配置信息成为单独的配置文件也方便开发者进行单独管理。

这样开发者将代码开源以后即使不给出配置文件的代码,其他学习者拿到项目以后仍然可以根据 ${db.username} 这样的代码填写出自己本地的配置信息。

即:我们不建议这么做。

12345

应该这样做:

1

12345

在 config/jdbc.properties 文件中写:

db.url=jdbc:mysql://localhost:3306/db_blog?useUnicode=true&characterEncoding=UTF-8

db.username=root

db.password=123456

123

3、在资源目录下建立不同环境的文件夹,有几个环境,就应该建立几个文件夹;

4、使用 Maven 的 war 插件,使用命令指定打包参数,在打包之前替换那些重要的配置文件,就可以针对不同的环境打出适合这些环境的 war 包了。

具体配置代码分析

1、声明主资源目录

src/main/resources

true

**/*.properties

**/*.xml

config/local/*.properties

config/product/*.properties

123456789101112131415161718192021

2、声明 profile

local

local

true

product

product

12345678910111213141516171819

特别说明:profile 中的 id,自定义的环境变量 package.environment 的值,和“思路分析3”中建立的不同环境配置文件存放的目录名称应该是一致的,这也叫约定大于配置,这样的约定就可以少配置很多东西了。

3、声明 war 插件

相关文章