如何使用 Maven 为不同的配置文件执行任务

how to perform task for different profiles using maven

我是 Maven 新手。

我想为不同的用户执行数据库连接,所以我的问题是我应该在哪里提供这个JDBC连接以及如何为不同的用户提供这个连接?

我知道如何为不同的用户提供配置文件,但我应该在哪里执行数据库连接以及如何调用它?

最好的方法是将您的数据库连接属性(如 username/password、url 等)设置为外部。在配置文件中,您可以为每个用户定义属性值,并使用 Maven 资源过滤来设置它们。

例如,在您的 Maven 项目中,您会有一个配置目录(在 src/config/settings.prp 中),其中包含以下条目:

userName = ${userName}
password = ${password}
db-driver = ${dbDriver}
db-url = ${dbUrl}

在 pom 中你会有

<project ...>
    <build>
        <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-resources-plugin</artifactId>
               <version>2.7</version>
               <executions>
                   <execution>
                       <id>filter-db-settings</id>
                       <goals>
                           <goal>copy-resources</goal>
                       </goals>
                       <configuration>
                           <outputDirectory>${project.build.directory}/config</outputDirectory>
                           <resources>
                               <resource>
                                   <directory>${project.basedir}/src/config</directory>
                               </resource>
                               <filtering>true</filtering>
                           </resources>
                       </configuration> 
                   </execution>
               </executions>
           </plugin>
        <plugins>
    </build>

    <profiles>
        <profile>
            <id>user-A</id>
            <properties>
                <userName>userA</userName>
                <password>secret</password>
                <dbDriver>com.driver.db</dbDriver>
                <dbUrl>jdbc://db-url</dbUrl>
            </properties>
        </profile>
    <profiles>
</project>

该插件将过滤 src/config 中的文件,并用您的配置文件中指定的值替换 Maven 占位符。由于配置文件包含密码,您可以将其移动到您的 settings.xml,这样它就不会与项目本身一起签入,可能会将密码暴露给不受欢迎的各方。

警告:上面的插件还没有验证,所以可能包含小错误。

最佳做法是将 属性 文件 NOT 放入生成的工件中。通过这样做,您可以自由地为不同的用户使用相同的工件,您唯一需要更改的是外部 属性 文件中的属性(将在工件旁边提供给用户)。

以下文章介绍了如何使用 spring Externalized Configuration 外部化属性。