如何根据 Maven 配置文件点击特定的 REST Url?

How to hit a specific REST Url based on maven profile?

我的 application.properties.

中有以下两个 REST Url

我想根据动态参数获取一个而不是两个,但不确定如何获取。我尝试使用 Maven 配置文件,但不确定如何读取 Java 代码中的 Maven 配置文件并基于此获取 url。

请指导。

application.properties

rest.uri=http://localhost:8080/hello
mock.rest.uri=http://localhost:9999/hello

RestClient.java

public class HelloWorldClient {

    public static void main(String[] args) {
        try {
            Client client = Client.create();

            //getRestUrl() METHOD CALL NEEDS TO BE DYNAMIC 
            //EITHER MOCK URL OR ACTUAL REST URL SHOULD BE FETCHED HERE 
            // NOT SURE HOW ???????
            WebResource webResource = client.resource(getRestUrl());

            ClientResponse response = webResource.accept("text/plain").get(ClientResponse.class);
            if (response.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
            }
            String output = response.getEntity(String.class);
            System.out.println("\nOutput from Server.... " + output);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String getRestUrl() throws IOException {
        Properties prop = GenericUtils.loadProperties("application.properties");
        String restUri = prop.getProperty("rest.uri");
        String mockRestUri = prop.getProperty("mock.rest.uri");
        System.out.println("restUri = " + restUri);
        System.out.println("mockRestUri = " + mockRestUri);
        return mockRestUri;
    }

}

pom.xml

<profiles>
    <profile>
        <id>rest-server</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>mock-rest-server</id>
    </profile>
</profiles>

您可以定义一个 属性 并且根据执行的 Maven 配置文件,它将填充一个值或另一个值。

例如:

<profiles>
    <profile>
        <id>rest-server</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
          <rest.uri>ttp://localhost:8080/hello</rest.uri>
        </properties>
    </profile>
    <profile>
        <id>mock-rest-server</id>
        <properties>
          <rest.uri>http://localhost:9999/hello</rest.uri>
        </properties>
    </profile>
</profiles>

现在,application.properties 文件:

rest.uri=${rest.uri}

maven的过滤插件会根据执行的profile进行值的替换。

从 java 代码中,您始终可以读取相同的 属性,因为它的值是 mock 还是 real,具体取决于已执行的 maven 配置文件

您可以使用 Maven Resources Plugin 来过滤资源。它的用法在这里描述:

https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

然后您可以在配置文件中定义 profile-specific 属性。之后,在构建期间,您的 .properties 文件将在构建期间被过滤,您的应用程序可以使用它。 .properties 值将根据构建期间激活的配置文件而有所不同。

link.

中都有描述

根据上面 Jose 和 Fetta 提供的解决方案,我修改了程序,特此将两个解决方案汇总到此 post 并在此处 post。

application.properties

rest.uri=${rest.uri}

pom.xml

<build>
    <filters>
        <filter>src/main/resources/application.properties</filter>
    </filters>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

<profiles>
    <profile>
        <id>rest-server</id>
        <properties>
            <rest.uri>http://localhost:8080/hello</rest.uri>
        </properties>
    </profile>
    <profile>
        <id>mock-rest-server</id>
        <properties>
            <rest.uri>http://localhost:9999/hello</rest.uri>
        </properties>
    </profile>
</profiles>

HelloWorldClient.java

public class HelloWorldClient {

    public static void main(String[] args) {
        try {
            Client client = Client.create();
            WebResource webResource = client.resource(getRestUrl());
            ClientResponse response = webResource.accept("text/plain").get(ClientResponse.class);
            if (response.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
            }
            String output = response.getEntity(String.class);
            System.out.println("\nOutput from Server.... " + output);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String getRestUrl() throws IOException {
        Properties prop = GenericUtils.loadProperties("application.properties");
        String restUri = prop.getProperty("rest.uri");
        System.out.println("restUri = " + restUri);
        return restUri;
    }

}

使用配置文件编译 class

mvn clean install -Prest-server
mvn clean install -Pmock-rest-server

运行主要方法

mvn exec:java -Dexec.mainClass="com.example.HelloWorldClient"