SpringBoot读取配置文件几种方式

一、引入外部配置文件方式:

    ①@PropertySource(value={"classpath:application1.properties"})
    ② @ImportResource(locations={"classpath:spring.xml"}
    ③默认引入application.properties和application1.yaml

    注意:
    ①默认读取配置文件为application.yaml和application.properties,没有这两个文件默认读取不到数据
    ②yaml文件和properties文件有相同属性存在时,properties文件中的属性优先生效

二、读取yaml文件

(1)使用@Value(“${属性名}”) 注解 

  ①application.yaml配置文件↓
spring:
  name: yaml.name1
  value: yaml.value1
  ②YmalTest1实体类↓
@Component
public class YmalTest1 {
    @Value("${spring.name}")
    private String name;
    @Value("${spring.value}")
    private String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}
  ③Controller处理↓
@RestController
@RequestMapping("/yaml")
public class TestYamlController1 {

    @Autowired
    private YmalTest1 ymalTest1;

    @RequestMapping(path = "/test1", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public YmalTest1 hello() {
        return ymalTest1;
    }
}

(2)使用@ConfigurationProperties(prefix = "属性前缀")注解

@Component
@ConfigurationProperties(prefix = "spring")
public class YmalTest1 {
    private String name;
    private String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}

Controller处理和application.yaml配置文件同(1)

(3)使用@Configuration和@Bean方式(推荐)

  ①application.yaml配置文件
spring:
  name: yaml.name1
  value: yaml.value1
  ②实体类
public class YmalTest2 {
    private String name;
    private String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}
  ③@Configuration配置
@Configuration
public class YmalTest2Config {

    @Bean
    @ConfigurationProperties(prefix = "spring")
    public YmalTest2 getYmalTest2() {
        return new YmalTest2();
    }
}
  ④Controller处理
@RestController
@RequestMapping("/yaml")
public class TestYamlController2 {

    @Autowired
    private YmalTest2 ymalTest2;

    @RequestMapping(path = "/test2", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public YmalTest2 hello() {
        return ymalTest2;
    }
}

三、读取.properties文件

(1)使用@Value(“${属性名}”) 注解 

  ①application.properties配置文件↓
properties.name=properties.testname1
properties.value=properties.testvalue1
  ②PropertiesTest1实体类↓
@Component
public class PropertiesTest1 {
    @Value("${properties.name}")
    private String name;
    @Value("${properties.value}")
    private String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}
  ③Controller处理↓
@RestController
@RequestMapping("/properties")
public class TestPropertiesController1 {

    @Autowired
    private PropertiesTest1 propertiesTest1;

    @RequestMapping(path = "/test1", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public PropertiesTest1 hello() {
        return propertiesTest1;
    }
}

(2)使用@ConfigurationProperties(prefix = "属性前缀")注解

@Component
@ConfigurationProperties(prefix = "properties")
public class PropertiesTest1 {
    private String name;
    private String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}

Controller处理和application.properties配置文件同①

(3)读取非默认properties配置文件

    使用@PropertySource(value = {"classpath:application2.properties"})注解可以读取非默认文件(application.properties)中的数据,但是要注意:当application2.properties配置文件中的属性和默认文件冲突时,默认文件中的属性优先起作用,而且@PropertySource 注解默认是只支持 properties 格式配置文件的读取的。

  ①application2.properties配置文件↓
properties.name='properties.testname2'
properties.value='properties.testvalue2'
  ②PropertiesTest1实体类文件↓
@Component
@ConfigurationProperties(prefix = "properties")
@PropertySource(value = {"classpath:application2.properties"})
public class PropertiesTest1 {
    private String name;
    private String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}
  ③Controller处理↓
@RestController
@RequestMapping("/properties")
public class TestPropertiesController1 {

    @Autowired
    private PropertiesTest1 propertiesTest1;

    @RequestMapping(path = "/test1", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public PropertiesTest1 hello() {
        return propertiesTest1;
    }
}

(4)使用@Configuration和@Bean方式(推荐)

  ①application.properties配置文件↓
properties.name=properties.testname1
properties.value=properties.testvalue1
  ②PropertiesTest2实体类文件↓
public class PropertiesTest2 {
    private String name;
    private String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}
  ③@Configuration配置
@Configuration
public class PropertiesTest2Config {

    @Bean
    @ConfigurationProperties(prefix="properties")
    public PropertiesTest2 getPropertiesTest2() {
        return new PropertiesTest2();
    }
}
  ④Controller处理↓
@RestController
@RequestMapping("/properties")
public class TestPropertiesController2 {

    @Autowired
    private PropertiesTest2 propertiesTest2;

    @RequestMapping(path = "/test2", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public PropertiesTest2 hello() {
        return propertiesTest2;
    }
}

四、读取其他配置文件方式

    在类上面使用@ImportResource(locations={"classpath:spring-common.xml"})引入外部文件

 

posted @ 2022-12-06 16:19  #庄生晓梦  阅读(4459)  评论(0编辑  收藏  举报