Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring boot - custom variables in Application.properties

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

like image 349
Kingamere Avatar asked Aug 17 '15 20:08

Kingamere


People also ask

How do you read custom properties from application properties in spring boot?

Another very simple way to read application properties is to use @Value annotation. Simply annotation the class field with @Value annotation providing the name of the property you want to read from application. properties file and class field variable will be assigned that value.

How do you set value in application properties?

You can use @Value("${property-name}") from the application. properties if your class is annotated with @Configuration or @Component . You can make use of static method to get the value of the key passed as the parameter.

How do I apply application properties in spring boot?

Step 1 − After creating an executable JAR file, run it by using the command java –jar <JARFILE>. Step 2 − Use the command given in the screenshot given below to change the port number for Spring Boot application by using command line properties.


1 Answers

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

  1. Put @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)
  2. Leave 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.

like image 103
Stephane Nicoll Avatar answered Sep 20 '22 13:09

Stephane Nicoll