2017-02-20 8 views
0

У меня есть следующие два REST Urls в моих приложениях.properties.Как ударить определенный URL REST на основе профиля maven?

Я хотел бы получить один, но не оба, основанный на динамическом параметре, но не уверен, как это сделать. Я пробовал использовать профиль maven, но не уверен, как читать профиль maven в Java-коде и получить на нем 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> 
+0

Вы можете иметь несколько версий 'application.properties' файла. В зависимости от профиля Maven, поставьте правильный номер в своем приложении. –

+0

Можете ли вы указать мне какую-нибудь документацию или пример? – user2325154

+0

Зачем вам это нужно? Поместите файл конфигурации за пределы JAR, содержащий этот URL, а затем код будет просто читать все, что находится в этом файле. Затем вы можете отредактировать этот файл в любое время и перезапустить приложение, а не странные пользовательские упаковки/профили. – Tunaki

ответ

1

Основываясь на решении, предоставленном Хосе и Феттой выше, я изменил программу и настоящим объединил оба решения в этот пост и разместил его здесь.

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" 
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} 

Фильтрующий модуль из мавена будет выполнять замену значения в соответствии с профилем, который выполняется.

Из кода Java вы всегда можете прочитать такое же свойство, поскольку оно будет иметь значение издеваться или реальной зависимости от профиля Maven, который был выполнен

1

Вы можете использовать Maven ресурсов плагин для фильтрации ресурсов. Это использование описано здесь:

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

Затем вы можете определить конкретный профиль свойства в профилях. После этого во время сборки ваш файл .properties будет отфильтрован во время сборки, и ваше приложение сможет его использовать. Значение .properties будет отличаться в зависимости от того, какой профиль был активирован во время сборки.

Это все описано в ссылке.

Смежные вопросы