我正在使用Maven筛选来创建一个属性文件,该文件将具有给定堆栈的专门属性。

我有一个具有类似属性的application.properties文件

elasticsearch.members=${elasticsearch.members}

我有两个配置文件

config.ppd.properties具有

elasticsearch.members=ppd-es-01:9700;ppd-es-02:9700;ppd-es-03:9700

config.prod.properties具有

elasticsearch.members=prod-es-01:9700;prod-es-02:9700;prod-es-03:9700

我有两套别名为ppd-es-nn和prod-es-nn的服务器

这一切都很好。 当使用ppd概要文件生成工件时,我在application.properties文件中获得了正确的属性。

但是我真正想做的是在application.properties文件中以某种方式完成了此串联。 因此,我可以在application.properties文件中指定Elasticsearch服务器的数量和模式。

elasticsearch.members=${environment}-es-[index]:9700;...

有什么办法可以实现? 也许继承进行过滤的类? 由于我想保持简单,因此本示例有些许虚构。 但是我要做的一件事是将部署模式(蓝色或绿色)附加到每个服务器别名。 虽然我可以在过滤器文件中做到这一点,但最好在application.properties文件中做到这一点,以使过滤器类中的拼写错误都不会弄乱别名。

#1楼 票数:0

我喜欢groovy-maven-plugin这样的任务。 以下内容未经测试,但可以给您带来启发。

<properties>
  <!-- these may be overridden on the cmdline -->
  <target.env>ppd</target.env>
  <es.server.count>2</es.server.count>
<properties>

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>groovy-maven-plugin</artifactId>
  <version><latestPluginVersionHere></version>
  <executions>
    <execution>
      <id>build-es-host-list</id>
      <!-- phase must be earlier than process-resources -->
      <phase>validate</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
           <![CDATA[
            def sb = new StringBuilder()
            def targetEnv = project.properties.getProperty('targetEnv')
            def numServers = project.properties.getProperty('es.server.count')
            (1..numServers).eachWithIndex { it, idx -> 
              sb.append("${targetEnv}-es-${idx}:9700")
              if (idx < numServers) {
                sb.append(';')
              }
            }
            project.properties.setProperty('elasticsearch.members', sb.toString())
          ]]>
        </source>
      </configuration>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>2.4.12</version>
    </dependency>
  </dependencies>
</plugin>

然后,application.properties文件行需要使用该属性:

elasticsearch.members=${elasticsearch.members}

POM需要为要在文件中使用的计算值启用资源过滤

  ask by Milind translate from so

未解决问题?本站智能推荐:

1回复

maven:过滤后的资源没有打包在WAR文件中

我有一个maven项目,我正在使用maven-war-plugin打包项目: 我已根据我正在构建的环境从属性文件中设置过滤器: 我正在尝试过滤位于/ src / main / webapp / WEB-INF / classes中的xml文件: 我使用以下命令从命令行构建项目:
1回复

当找不到用于资源过滤的属性时,如何配置Maven资源插件以抱怨?

我的问题很简单:当在资源过滤过程中未找到任何属性时,我希望Maven给我一些错误消息。 我在官方Maven文档中没有发现任何线索。 那我该怎么办呢?
1回复

使用Maven,如何过滤不是资源的文件,但希望它使用与资源相同的过滤器?

使用Maven,如何过滤不是资源的文件,但希望它使用与资源相同的过滤器? 这是我pom.xml resources标签。 前两个工作正常,因为我最终希望这些文件进入类路径。 但是,对于第3个也是最后一个resource标签,我想确保它进入WEB-INF目录而不是classes目录。 我
1回复

与其他Maven模块共享过滤后的资源

我还有另一个行家结构问题... = / 具有3个不同模块的样本项目: CONFIG(包含所有配置文件) DAO(取决于CONFIG) 服务(取决于DAO和CONFIG) CONFIG模块使用“ maven-resources-plugin”在其“目标”文件夹中生成过滤的资源。
1回复

使用Maven构建WAR时,如何过滤重叠的WAR资源?

我有两个战争: 基本叠加 示例应用 base-overlay在src/main/webapp/WEB-INF/spring/*.xml具有XML配置文件。 在那些XML配置文件中,当构建示例应用程序WAR时,我需要过滤一些参数,该参数取决于基本覆盖为其覆盖。 例如, base
1回复

如何为Maven或Spring资源配置文件路径

我一直很害怕知道文件路径。 :( 我在Maven-Spring应用程序中具有以下设置 我正在尝试访问控制器中的文档。 我尝试了许多路径,但似乎无法通过FileNotFound错误。 我认为该路径应为/src/resources/downloads/MyDocument.docx
1回复

使用配置文件中的Maven复制和覆盖一些资源

我有两个从一个Maven多项目构建的项目,即项目A和项目B。项目B最近投入使用,与项目A的区别很小,即它使用了几个不同的配置文件。 我的想法是为projectB创建一个配置文件,并添加其他配置文件/替换现有的配置文件。 我已经尝试了几种关于stackoverflow的方法,包括复制重命名插件
2回复

需要澄清maven配置文件中资源定义的影响

在如下结构的Maven Multi Module Project中: A的pom.xml包含: 当运行完整的项目P并激活此配置文件时, src/test/resources的可用性是否在B测试期间以任何方式受到影响的类路径的一部分? 如果是,以何种方式,以及如何更改定义以便给定资源