为dev / qa / prod配置Java EE 6 - java

我有一个用Maven生成的Java EE 6应用程序,在NetBeans 7中编码,并部署在GlassFish 3.1.2上。当我快要完成时,我发现自己正在部署演示版本。

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

  • javax.faces.PROJECT_STAGE(web.xml)
  • 数据库凭据(glassfish-resources.xml)
  • 邮件服务器(glassfish-resources.xml)
  • JPA日志记录级别(persistence.xml)
  • 可能还有许多其他我现在无法考虑的事情,这些事情分散在XML文件中。

    有没有什么方法可以定义这些配置文件的多个版本,并仅在构建时设置标志以选择环境,而在未指定环境的情况下默认为dev?在这种情况下,有什么办法可以让Maven为我工作?

    参考方案

    您可以使用maven来实现。特别是使用resource filtering。

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

      <profiles>
        <profile>
          <id>dev</id>
          <properties>
            <env>development</env>
          </properties>
          <activation>
            <activeByDefault>true</activeByDefault> <!-- use dev profile by default -->
          </activation>
        </profile>
        <profile>
          <id>prod</id>
          <properties>
            <env>production</env>
          </properties>
        </profile>
      </profiles>
    

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

      <build>
        <outputDirectory>${basedir}/src/main/webapp/WEB-INF/classes</outputDirectory>
        <filters>
          <filter>src/main/filters/filter-${env}.properties</filter> <!-- ${env} default to "development" -->
        </filters>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <includes>
              <include>**/*.xml</include>
              <include>**/*.properties</include>
            </includes>
            <filtering>true</filtering>
          </resource>
        </resources>
      </build>
    

    然后基于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命令打包war。

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

    Java SE和Java EE之间的细线 - java

    我是写Java控制器(mvc),用junit进行测试,写jdbc,使用maven的人...基本上,我怎么知道什么时候是Java EE,什么时候不是?我不写servlet或jsps(它们是Java EE的一部分),但是我确实使用API​​,所以...我是什么? Java EE程序员? Java SE程序员?如果您是Spring / Hibernate开发人员,…

    与哪些运算符>>兼容 - java

    我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

    Java编程要求 - java

    我是C#程序员。我想学习Java来实现Windows应用程序。但是我不知道什么IDE和什么工具可以帮助我。请帮助我选择最佳的平台和IDE等工具。编辑:谢谢您的帮助。什么是学习Java的最佳电子书和UserGuid。 参考方案 首先,下载Java jdk。http://www.java.com/en/download/index.jsp稍后,安装IDE。我建议…

    JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

    我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

    Java 8流:处理空值 - java

    以下代码为属性Salary为null抛出NPE。class Person具有以下属性:字符串:name,整数:age,整数:薪金salary在此处可以为null。我想创建一份工资清单。persons.stream().mapToDouble(Person::getSalary).boxed().collect(Collectors.toList())在这里,…