如何根据maven配置文件命中特定的REST URL?

时间:2017-02-20 21:59:46

标签: java rest maven jersey-client

我的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>

3 个答案:

答案 0 :(得分:2)

您可以定义单个属性,并根据执行的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的过滤插件将根据执行的配置文件执行值的替换。

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

答案 1 :(得分:1)

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

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

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

这一切都在链接中描述。

答案 2 :(得分:1)

根据Jose和Fetta上面提供的解决方案,我修改了程序,并将这两个解决方案汇总到这篇文章中并在此发布。

<强> 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;
    }

}

使用个人资料编译课程

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

运行主要方法

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