springboot注入配置信息

springboot版本2.1.0.RELEASE

依赖

pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
    </parent>

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

    </dependencies>

配置文件

application.yml

spring:
  profiles:
    include: test

demo:
  config:
    test: test-demo.yml
    dev: dev-demo.yml
    production: pro-demo.yml

application-test.properties

demo.lee.test=test.demo.properties
demo.lee.dev=dev.demo.properties
demo.lee.production=production.demo.properties

application-dev.properties

test=test.dev.properties
dev=dev.dev.properties
production=production.dev.properties

在springboot中注入使用配置文件中的数据主要有以下三种方式

  1. @Value注解
  2. @ConfigurationProperties注解和@EnableConfigurationProperties注解配合使用
  3. @PropertySource注解

@Value注解

IndexController.class

@RestController
public class IndexController {
    @Value("${demo.lee.test}")
    String test;
    @Value("${demo.config.dev}")
    String dev;

    @RequestMapping("/")
    public String indexController() {
        return test + " " + dev;
    }
}
// 返回test.demo.properties dev-demo.yml

@ConfigurationProperties注解和@EnableConfigurationProperties注解搭配使用

EnvConfig.class

@ConfigurationProperties(prefix = "demo.config")
public class EnvConfig {

    private String test;
    private String dev;
    private String production;
        
  // 注意必须存在setter,否则会注入失败
  /** setter and toString **/
}

IndexController.class

@RestController
public class IndexController {
    @Autowired
    EnvConfig envConfig;

    @RequestMapping("/en")
    public String entityController() {
        return envConfig.toString();
    }

}
// 返回EnvConfig{test='demo.yml', dev='dev-demo.yml', production='pro-demo.yml'}

@PropertySource注解

PropertyConfig.class

@Configuration
@PropertySource("classpath:application-dev.properties")
// 必须指定前缀,否则注入不进来,prefix可以使空字符串,编译器可能会报错
// 但运行不报错
@ConfigurationProperties(prefix = "")
public class PropertyConfig {
    private String test;
    private String dev;
    private String production;

        /** getter、setter和toString **/
}

IndexController.class

@RestController
public class IndexController {
 
    @Autowired
    PropertyConfig propertyConfig;

    @RequestMapping("/pro")
    public String propertyController() {
        return propertyConfig.toString();
    }
}
// 返回PropertyConfig{test='test.dev.properties', dev='dev.dev.properties', production='production.dev.properties'}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容