二 SpringBoot - 核心配置文件( 二 )

2.2.2.2運行結果:

二 SpringBoot - 核心配置文件

文章插圖
2.2.3${} 和 #{} 的區別
  1. ${}:用于讀取核心配置文件中的自定義配置 , 也可以給屬性指定默認值 (${xxx.xx:default值});
  2. #{}:不可以讀取核心配置文件中的自定義配置 , 可以給屬性發指定默認值#{default值} (可以使用表達式) , 還可以讀取容器中已用實體的屬性值;
  3. 兩種讀取自定義配置的方式,是可以混用的,但是實際開發中,盡量使用其中一種, , 一般都是少量配置,單個讀取,多個讀取,使用批量讀取;
3、自定義配置文件并獲取配置信息3.1xxx.properties3.1.1 student.propertiesstudent.studentId=19130010student.studentName=huayustudent.studentClass=計算機科學與技術(2)student.graduationSchool=金陵科技學院student.graduationTime=2023/7/1 12:12:12student.nativePlace=南京student.hasGirFriends=true3.1.2 StudentProperties.java@Data@Component@ConfigurationProperties(prefix = "student")public class StudentProperties {// 學號private String studentId;// 姓名private String studentName;// 班級private String studentClass;// 畢業院校private String graduationSchool;// 畢業時間@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private Date graduationTime;// 籍貫private String nativePlace;// 有沒有女朋友private boolean hasGirFriends;}3.1.3 StudentValues.java@Data@Component //第一個寫法,使用普通組件@PropertySource(value = "https://www.huyubaike.com/biancheng/classpath:student.properties")//單個從student.properties 中獲取參數public class StudentValues {// 學號@Value("${student.studentId}")private String studentId;// 姓名@Value("${student.studentName}")private String studentName;// 班級@Value("${student.studentClass}")private String studentClass;// 畢業院校@Value("${student.graduationSchool}")private String graduationSchool;// 畢業時間@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")@Value("${student.graduationTime}")private Date graduationTime;// 籍貫@Value("${student.nativePlace}")private String nativePlace;// 有沒有女朋友@Value("${student.hasGirFriends}")private boolean hasGirFriends;}3.2 xxx.yml3.2.1 student.ymlstudent:studentId: 19130010studentName: huayustudentClass: 計算機科學與技術(2)graduationSchool: 金陵科技學院graduationTime: 2023/7/1 12:12:12nativePlace: 南京hasGirFriends: true3.2.2 StudentProperties.java@Data@Component@ConfigurationProperties(prefix = "student")@PropertySource(value = "https://www.huyubaike.com/biancheng/classpath:student.yml",encoding = "utf-8",factory = YamlPropertySourceFactory.class) //從自定義的 student.yml 中獲取public class StudentProperties {......}3.2.3 StudentValues.java@Data@Component@PropertySource(value = "https://www.huyubaike.com/biancheng/classpath:my.yml", factory = YamlPropertySourceFactory.class) //從自定義的 student.yml 中獲取public class StudentValues {......}3.2.4 YamlPropertySourceFactory.java yml配置映射類@PropertySource讀取不能直接自定義yaml配置文件,需要自定義一個繼承 PropertySourceFactory 的 YamlPropertySourceFactory 編寫配置映射類
public class YamlPropertySourceFactory implements PropertySourceFactory {@Overridepublic PropertySource<?> createPropertySource(String name, EncodedResource encodedResource) {Resource resource = encodedResource.getResource();YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();factory.setResources(resource);Properties props = factory.getObject();return new PropertiesPropertySource(resource.getFilename(), props);}}3.3 測試3.3.1 testStudentProperties
二 SpringBoot - 核心配置文件

文章插圖
3.3.2 testStudentValues
二 SpringBoot - 核心配置文件

文章插圖
4、*@Configuration配置類的用法,可以實現自定義組件加入容器4.1 實體@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class UserRole {//角色private String roleId;//角色名稱private String roleName;}4.2 UserRoleConfig 配置類@Configuration //凡是被此注解修飾的類,就是一個配置類 , 在項目啟動是,自動加載,功能跟spring的核心配置文件xml文件是同等的public class UserRoleConfig {//手動添加自定義對象,放入容器中以前spring框架 , 通過xml配置文件,添加<bean id="xx" class="xx">...</bran>@Bean //標注的方法,會自動將當前方法返回的實例對象放入容器中 , 默認的bean的id值就是方法名public UserRole userRole1(){return UserRole.builder().roleId("R001").roleName("admin").build();}@Beanpublic UserRole userRole2(){return UserRole.builder().roleId("R002").roleName("admin").build();}}

推薦閱讀