Home >Java >javaTutorial >Reading configuration like a pro on Spring

Reading configuration like a pro on Spring

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-23 12:05:13445browse

Reading configuration like a pro on Spring

Introduction

As we all know, Spring provides multiple ways to achieve the same goal, one of which is how to retrieve the values ​​registered in the configuration file.

If you are new to Spring, you may come across code that uses the @Value annotation to retrieve values ​​from a application.properties or application.yml file. If you use this approach, be aware that there is nothing wrong with it; however, you may introduce unnecessary complexity into your application.

@Value Question

The main problem with using @Value is when dealing with variables that contain other values. Does this make sense? not understand? Let’s look at an example:

Assume you have the following configuration file:

<code>mail.user=dev@locahost
mail.password=123
mail.headers.x-from=Ekerdev
mail.headers.x-custom=custom</code>

You need to do it like this:

<code class="language-java">@Service
public class CustomService {
    @Value("${mail.user}")
    private String user;

    @Value("${mail.password}")
    private String password;

    @Value("${mail.headers.x-from}")
    private String xFrom;

    @Value("${mail.headers.x-custom}")
    private String xCustom;
}</code>

So far, no problems. But now imagine that your application needs to use these same variables in multiple places in your code. Think about how much duplicate code we would get, right?

Solution

So the best solution is to use the @ConfigurationProperties annotation. This makes it easier for our application to inject variables into classes and we can use it like any other dependency in Spring, as shown in the example below:

Spring 3.x solution one:

<code class="language-java">@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    Map<String, String> headers
) {}</code>

Spring 3.x solution two:

<code class="language-java">@Configuration
@ConfigurationProperties("mail.headers")
public record MailHeadersProperties(
    String xFrom,
    String xCustom
) {}

@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    MailHeadersProperties headers
) {}</code>

Spring 2.x solution one:

<code class="language-java">@Data
@AllArgsConstructor
@ConfigurationPropertiesScan
@ConfigurationProperties("mail")
public class MailProperties {
    private String user;
    private String password;
    private Map<String, String> headers;
}</code>
<code class="language-java">@SpringBootApplication
@ConfigurationPropertiesScan("your.package.mailproperties") //your.package.mailproperties  替换成你的包路径
public class ExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }
}</code>

Your service usage attributes are as follows:

<code class="language-java">@Service
@RequiredArgsConstructor
public class CustomService {
    private final MailProperties mailProperties;
}</code>

Advantages

The main advantage of using @ConfigurationProperties is that we don’t have to look for the @Value annotation in the code, which makes the code easier to read.

The above is the detailed content of Reading configuration like a pro on Spring. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn