如何根据 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"
我的 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"