獲取配置文件內容的方式:
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配置文件的詳細說明。