Table of Contents
Introduction
@Value Question
Solution
Advantages
Home Java javaTutorial Reading configuration like a pro on Spring

Reading configuration like a pro on Spring

Jan 23, 2025 pm 12:05 PM

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:

@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;
}
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:

@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    Map<String, String> headers
) {}
Copy after login

Spring 3.x solution two:

@Configuration
@ConfigurationProperties("mail.headers")
public record MailHeadersProperties(
    String xFrom,
    String xCustom
) {}

@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    MailHeadersProperties headers
) {}
Copy after login

Spring 2.x solution one:

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

Your service usage attributes are as follows:

@Service
@RequiredArgsConstructor
public class CustomService {
    private final MailProperties mailProperties;
}
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!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Have Crossplay?
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)