我的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>
答案 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"