为dev / QA / prod配置Java EE 6

我有一个Java EE 6应用程序,我使用Maven构建,代码在NetBeans 7中,并部署在GlassFish 3.1.2上。 当我接近完成时,我发现自己正在部署演示版本。

问题是我没有任何简单的方法来构建不同的环境,如dev,QA,demo,prod等。对于某些东西,我一直在使用带有一堆静态getter的Java类返回值基于环境常量的值。 但是这对条件设置没有帮助

  • javax.faces.PROJECT_STAGE(web.xml)
  • 数据库凭据(glassfish-resources.xml)
  • 邮件服务器(glassfish-resources.xml)
  • JPA日志记录级别(persistence.xml)

可能还有许多其他我现在想不到的东西分散在XML文件中。

有没有办法定义这些配置文件的多个版本,只是在构建时设置一个标志来选择环境,而在没有指定环境时默认为dev? 在这种情况下,有没有办法让Maven为我工作?

您可以使用maven来实现这一目标。 特别是使用资源过滤 。

首先,您可以定义配置文件列表:

  dev  development   true     prod  production    

然后是您需要过滤的资源:

   ${basedir}/src/main/webapp/WEB-INF/classes  src/main/filters/filter-${env}.properties     src/main/resources  **/*.xml **/*.properties  true    

然后根据src/main/filters目录中的配置文件自定义属性:

filter-development.properties

 # profile for developer db.driver=org.hsqldb.jdbcDriver db.url=jdbc:hsqldb:mem:web 

filter-production.properties

 # profile for production db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/web?createDatabaseIfNotExist=true 

要使用生产配置文件,您可以使用mvn clean package -Pprod命令mvn clean package -Pprod

在这里,您可以看到在maven中使用配置文件的示例项目。

这不是对问题的直接回应。 这解释了管理env属性的差异策略另一种管理diff env属性的方法是使用数据库来存储属性。 这样您只需要管理数据库的配置。 根据您指向的DB,您可以从该DB加载属性。 如果使用spring而不是spring,则提供PropertyPlaceholderConfigurer,它可以从DB初始化属性。 此方法允许您在不执行构建的情况下更改属性值。

如果您想要推广QA \ Testing团队测试的工件,这种方法很有用。 在这种情况下,DB配置不会是构建过程生成的工件的一部分。

如果您需要配置web.xml,请查看此操作方法: https : //community.jboss.org/docs/DOC-19076

它使用与另一个答案中描述的相同的方法(资源过滤)。