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

Reading configuration like a pro on Spring

Mary-Kate Olsen
Release: 2025-01-23 12:05:13
Original
415 people have browsed it

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>
Copy after login

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>
Copy after login

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>
Copy after login

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>
Copy after login

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>
Copy after login
<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>
Copy after login

Your service usage attributes are as follows:

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

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template