1、使用@ConfigurationProperties注解标识一个类为配置文件类,标识此注解的类中的所有属性都是配置文件中的相关属性,默认从全局配置文件中获取值。此注解的prefix值对应配置文件中的标识,此外需要将此类添加到Spring容器中,需要使用@Component注解。详细代码如下:
@Data@ToString@Component@ConfigurationProperties(prefix = "people")public class People { private String nickName; private Integer age; private Boolean status; private Date birth; private Map<String, Object> maps; private List<Object> lists; private Pet pet;} @Data@ToStringpublic class Pet { private String name; private String age;} 对应的yml配置文件如下:
people: # 等价写法:nickName nick-name: brevity age: 22 status: true birth: 2022/12/22 maps: {k1: v1,k2: 22} lists: - 11 - 22 - 33 pet: name: snake age: 200
所需的maven依赖:
<!-- 配置文件处理器 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional></dependency><!-- lombok --><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency>测试代码:
System.out.println(people);2、使用@Value注解获取配置文件中的值,支持${key}与#{spEL}表达式,不支持复杂数据类型的取值(如:Map、List、Set、对象等),代码如下:
// @Validated表示此类启用数据校验@Validatedpublic class People{ // nick-name 必须与配置文件的写法一致 @Value("${people.nick-name}") private String nickName; @Value("#{10*2}") private Integer age;} 综上所述,如果是需要获取配置文件中基本类型的某个值,建议使用@Value注解;如果需要和配置文件中的复杂数据结构进行映射或含有复杂结构的数据,如Map、List、对象等,则推荐使用JAVABean进行映射,使用@ConfigurationProperties与@Component对此JavaBean进行标识与注册。 3、使用@PropertySource注解读取指定的配置文件,示例代码如下: @Data@ToString@Component@ConfigurationProperties(prefix = "people")@PropertySource(value = {"classpath:people.properties"})public class People { private String nickName; private Integer age; private String email; private Boolean status; private Date birth; private Map<String, Object> maps; private List<Object> lists; private Pet pet;} 相关的配置文件内容如下(people.properties): people.nickName=brevitypeople.age=22people.status=truepeople.birth=2022/12/22people.maps.k1=v1people.maps.k2=22people.lists=11,22,33people.pet.name=snakepeople.pet.age=200 4、使用@ImportResource注解导入Spring的配置文件,让其配置文件中的内容生效。因为SpringBoot默认是没有Spring的配置文件的,即使是自己手动编写的Spring配置文件,SpringBoot也无法直接读取到,必须使用@ImportResource注解注入,而且此注解需添加到SpringBoot的主启动类上。详细代码和结构如下所示: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="brevityService" class="com.brevity.service.BrevityService"/> </beans> public class BrevityService {} @SpringBootApplication@ImportResource(locations = {"classpath:beans.xml"})public class HelloApplication { public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); }}测试类代码如下:
@SpringBootTestclass HelloApplicationTests { @Autowired private ApplicationContext ioc; @Test void serviceTest() { boolean res = ioc.containsBean("brevityService"); Assert.isTrue(res, "success"); System.out.println(res); }} @Bean注解说明: SpringBoot推荐使用@Configuration注解来标识配置类,用来代替Spring繁杂的配置,其中可以使用@Bean注解用来代替Spring的标签(Tip:此写法等价于获取配置文件内容的方式4),代码说明如下: @Configuration public class BrevityConfig { /** * @return * @Bean: 将方法的返回值添加到容器中, 添加的这个组件默认的id就是此方法名 */ @Bean public BrevityService brevityConfigService() { System.err.println("配置类中的Bean"); return new BrevityService(); } } 以上就是Spring Boot配置文件的详细说明。