Home >Java >javaTutorial >How to solve the problem that SpringBoot's @Value gets invalid application.properties configuration

How to solve the problem that SpringBoot's @Value gets invalid application.properties configuration

WBOY
WBOYforward
2023-05-16 11:52:051553browse

@Value gets the application.properties configuration invalid problem

The reason for the invalidity is mainly to pay attention to the precautions when using @Value:

  • 1. It cannot act on static variables (static);

  • 2. It cannot act on constants (final);

  • 3. It cannot act on non- Used in registered classes (need to use @Componet, @Configuration, etc.);

  • #4. When using a class with this attribute, it can only be used through @Autowired and new. These configurations will not be automatically injected.

These precautions are also determined by its principles:

There are two important processes during the springboot startup process, as follows:

  • 1. Scan and parse the beans in the container and register them in the beanFactory, just like information registration.

  • 2. Instantiate and initialize these scanned beans.

@Value is parsed in the second stage. BeanPostProcessor defines the interface method that users can operate on the bean before and after bean initialization. One of its important implementation classes, AutowiredAnnotationBeanPostProcessor, as the javadoc says, provides support for the injection function of @Autowired and @Value annotations in the bean.

The following are two ways:

resource.test.imageServer=http://image.everest.com

1. The first one

@Configuration
public class EverestConfig {
 
    @Value("${resource.test.imageServer}")
    private String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
}

2. The second one

@Component
@ConfigurationProperties(prefix = "resource.test")
public class TestUtil {
 
    public String imageServer;
 
    public String getImageServer() {
        return imageServer;
    }
 
    public void setImageServer(String imageServer) {
        this.imageServer = imageServer;
    }
}

Then inject it where needed

    @Autowired
    private TestUtil testUtil;
 
    @Autowired
    private EverestConfig everestConfig;
 
 
    @GetMapping("getImageServer")
    public String getImageServer() {
        return testUtil.getImageServer();
//        return everestConfig.getImageServer();
    }

@Value gets the configuration value in application.properties as Null

@Value("${spring.datasource.url}")

private String url;

gets the value as NUll.

Solution

Don’t use the new method to create the tool class (DBUtils) object, but use the @Autowired method to let springboot manage it, and add @Component to the tool class. Do not add static to the defined attribute variables.

Correct approach

@Autowired
private DBUtils jdbc;
  
@Component
public class DBUtils{
    
    @Value("${spring.datasource.url}")
    private String url;
}

The above is the detailed content of How to solve the problem that SpringBoot's @Value gets invalid application.properties configuration. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete