java多模块项目配置文件如何集中管理?

公司有个大数据项目,maven分了多个模块开发,其中有写模块可能会依赖子模块。每个模块都拥有单独的配置文件,打包的时候这些模块都变成了jar包,要修改配置文件,只能重新打包很不方便。有什么思路能够把这些配置文件进行统一管理么?
比方说hbase,项目外层建了个conf目录,所有配置文件放在conf目录下。但是不知道怎么与spring相结合。

阅读 7.6k
2 个回答

思路1: 把配置文件放到外层

这个你已经说了。但是以下缺点

  1. 配置文件远离使用它的模块,要找的时候不太好找。

  2. 如果新增了一个模块,开发人员又忘记在外层conf里补充相关文件,项目就会启动不起来了。

思路2:利用maven在打包时将配置文件合并

配置还是在模块的源代码里,但是这里的配置文件只是一个模板,没有具体值,项目启动的时候会读取此路径里的配置文件。

然后在aggregator项目(比如war包)的pom.xml里做一些配置,让maven在打包时将各个jar包里的配置文件合并起来,形成一个完整的配置文件。

你可以对这个完整的配置文件形成几个版本:开发、生产、测试,放到vcs里管理起来。

比如下面的代码:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.10</version>
  <configuration>
    <artifactItems>
      <artifactItem>
        <groupId>...</groupId>
        <artifactId>...</artifactId>
        <version>...</version>
        <type>jar</type>
        <overWrite>true</overWrite>
        <outputDirectory>target/assembly-tmp</outputDirectory>
        <includes>application-xxx.properties</includes>
      </artifactItem>
      ...
    </artifactItems>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>unpack</goal>
      </goals>
    </execution>
  </executions>
</plugin>

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.8</version>
  <configuration>
    <target>
      <concat destfile="${project.build.directory}/assembly-tmp/application.properties" force="yes">
        <fileset dir="${project.build.directory}">
          <include name="assembly-tmp/application-*.properties"></include>
        </fileset>
      </concat>
    </target>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <descriptor>settings.xml</descriptor>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>
新手上路,请多包涵
推荐问题