@Value not resolved when using @PropertySource annotation. How to configure PropertySourcesPlaceholderConfigurer?

前端 未结 11 1174
情深已故
情深已故 2020-11-28 23:11

I have following configuration class:

@Configuration
@PropertySource(name = \"props\", value = \"classpath:/app-config.properties\")
@ComponentScan(\"service         


        
11条回答
  •  一生所求
    2020-11-28 23:36

    Since Spring 4.3 RC2 using PropertySourcesPlaceholderConfigurer or is not needed anymore. We can use directly @PropertySource with @Value. See this Spring framework ticket

    I have created a test application with Spring 5.1.3.RELEASE. The application.properties contains two pairs:

    app.name=My application
    app.version=1.1
    

    The AppConfig loads the properties via @PropertySource.

    package com.zetcode.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    
    @Configuration
    @PropertySource(value = "application.properties", ignoreResourceNotFound = true)
    public class AppConfig {
    
    }
    

    The Application injects the properties via @Value and uses them.

    package com.zetcode;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.annotation.ComponentScan;
    
    @ComponentScan(basePackages = "com.zetcode")
    public class Application {
    
        private static final Logger logger = LoggerFactory.getLogger(Application.class);
    
        @Value("${app.name}")
        private String appName;
    
        @Value("${app.version}")
        private String appVersion;
    
        public static void main(String[] args) {
    
            var ctx = new AnnotationConfigApplicationContext(Application.class);
            var app = ctx.getBean(Application.class);
    
            app.run();
    
            ctx.close();
        }
    
        public void run() {
    
            logger.info("Application name: {}", appName);
            logger.info("Application version: {}", appVersion);
        }
    }
    

    The output is:

    $ mvn -q exec:java
    22:20:10.894 [com.zetcode.Application.main()] INFO  com.zetcode.Application - Application name: My application
    22:20:10.894 [com.zetcode.Application.main()] INFO  com.zetcode.Application - Application version: 1.1
    

提交回复
热议问题