I have spring boot client that consumes a restful api. Instead of hardcoding the IP address of the REST API in the java class, is there any key entry in the application.properties I can use?
And if not, can I create a custom entry?
Thanks
I have spring boot client that consumes a restful api. Instead of hardcoding the IP address of the REST API in the java class, is there any key entry in the application.properties I can use?
And if not, can I create a custom entry?
Thanks
The infrastructure that Spring Boot uses can be used in your own project in the exact same way. You commented in @zmitrok answer about a "unknown property" warning. That is because your property has no meta-data so the IDE does not know about it.
I would strongly advice you not to use @Value
if you can as it is rather limited compared to what Spring Boot offers (@Value
is a Spring Framework feature).
Start by creating some POJO for your IP:
@ConfigurationProperties("app.foo")
public class FooProperties {
/**
* IP of foo service used to blah.
*/
private String ip = 127.0.0.1;
// getter & setter
}
Then you have two choices
@Component
on FooProperties
and enable the processing of configuration properties by adding @EnableConfigurationProperties
on any of your @Configuration
class (this last step is no longer necessary as of Spring Boot 1.3.0.M3
)FooProperties
as is and add @EnableConfigurationProperties(FooProperties.class)
to any of your @Configuration
class which will create a Spring Bean automatically for you. Once you've done that app.foo.ip
can be used in application.properties
and you can @Autowired
FooProperties
in your code to look for the value of the property
@Component
public MyRestClient {
private final FooProperties fooProperties;
@Autowired
public MyRestClient(FooProperties fooProperties) { ... }
public callFoo() {
String ip = this.fooProperties.getIp();
...
}
}
Okay so your key is still yellow in your IDE. The last step is to add an extra dependency that will look your code and generate the relevant meta-data at build time. Add the following to your pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
And voilà, your key is recognized, you have javadoc and the IDE gives you the default value (the value you initialized on the field). Once you've that you can use any type the conversion service handles (i.e. URL
) and the javadoc on the field is used to generate documentation for your keys.
You can also add any JSR-303
constraint validation on your field (for instance a regex to check it's a valid ip).
Check this sample project and the documentation for more details.
application.properties
file. There is a quick fix available to create the application metadata, but I assumed the spring-boot-configuration-processor
was supposed to remedy that? –
Clavate Instead of hardcoding the IP into the properties file, you can start the application with
-Dmy.property=127.127.10.20
And Spring Boot will automatically pick it up with
@Value("${my.property}")
private String myProperty;
-Dmy.property
? –
Hortative java -jar my-application.war
? –
Hortative You can add your own entries to the application.properties. Just make sure that the property name does not clash with the common properties listed at http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties
restAPIServiceAddress
as an entry it underlines it in yellow and says "is an unkown property", is that okay? –
Hortative I was facing the same issue. Since all answers are from 2015, I try to update this topic.
Let's assume, the following is your custom property in application.yml:
custom:
client: "http://localhost:4200"
You may get the warning
Cannot resolve configuration property 'custom.client'
To fix this, you may need to create the file additional-spring-configuration-metadata.json in resources/META-INF. Once you have done that, add the following into the created file:
{
"properties": [
{
"name": "custom.client",
"type": "java.lang.String",
"description": "Client's URL."
}
] }
The warning should be gone.
© 2022 - 2024 — McMap. All rights reserved.