天天看點

Spring Boot 2.6新特性:使用Java 17的Record作為配置屬性

作者:愛科學的衛斯理

Spring Boot 3.0的基線版本是Java 17,Spring Boot 3.0版本将全面對Java 17的支援。較新版本的2.x的Spring Boot版本也可以使用Java 17的特性。

本文介紹Spring Boot 2.6對Java 17支援的一個新特性,使用Java 17的Record來做為Spring Boot的配置屬性(ConfiguartionProperties)。

Spring Boot 2.6新特性:使用Java 17的Record作為配置屬性

什麼是Record

record是一種特殊類型的類聲明,目的是為了減少樣闆代碼。record引入的主要目的是快速建立資料載體類。

這種類的主要目的就是在不同的子產品或者層之間包含并傳遞資料,它們表現為POJO(Plain Old Java Objects)和DTO(Data Transfer Objects)。

record聲明有專門的的關鍵字record,我們比較下一個簡單的POJO類和record上文法的差別:

POJO類:

@Data
public class Point {
    private String x;
    private String y;
}           

record:

public record Point(String x, String y) {
}           

Spring Boot的配置屬性(Configuration Properties)類也是一個簡單POJO。

用POJO類作為Configuration Properties

  • 建立示範項目,注意添加Spring Configuration Processor
Spring Boot 2.6新特性:使用Java 17的Record作為配置屬性
  • 示範的Configuration Properties,首先我們使用正常的Java類來示範
@ConfigurationProperties(prefix = "author")
@Data
public class AuthorProperties {
    private String firstName;
    private String lastName;
}           
  • application.properties 中的配置
author.firstName=wang
author.lastName=yunfei           
  • 注冊Configuration Properties為Bean,并使用
@SpringBootApplication
@EnableConfigurationProperties(AuthorProperties.class)//将AuthorProperties注冊為Bean
@Slf4j
public class RecordConfigurationPropertiesApplication {

   public static void main(String[] args) {
      SpringApplication.run(RecordConfigurationPropertiesApplication.class, args);
   }

   @Bean //注入并使用AuthorProperties的Bean
   CommandLineRunner commandLineRunner(AuthorProperties authorProperties){
      return args -> {
         log.info(authorProperties.toString());
      };
   }
}           
  • 運作程式
Spring Boot 2.6新特性:使用Java 17的Record作為配置屬性

用Record作為Configuration Properties

我們隻需要将AuthorProperties類修改為record即可:

@ConfigurationProperties(prefix = "author")
public record AuthorProperties(String firstName, String lastName) {
}           

運作結果和上面保持一緻。

感謝對我的書《從企業級開發到雲原生微服務:Spring Boot實戰》的支援。

(此處已添加書籍卡片,請到今日頭條用戶端檢視)

繼續閱讀