<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SpringBoot中的starter是一種非常重要的機制,能夠拋棄以前繁雜的設定,將其統一整合進 starter,應用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要載入的資訊並啟 動相應的預設設定。starter讓我們擺脫了各種依賴庫的處理,需要設定各種資訊的困擾。 SpringBoot會自動通過classpath路徑下的類發現需要的Bean,並註冊進IOC容器。SpringBoot提供 了針對日常企業應用研發各種場景的spring-boot-starter依賴模組。所有這些依賴模組都遵循著約定 成俗的預設設定,並允許我們調整這些設定,即遵循“約定大於設定”的理念。
在我們的日常開發工作中,經常會有一些獨立於業務之外的設定模組,我們經常將其放到一個特定的 包下,然後如果另一個工程需要複用這塊功能的時候,需要將程式碼硬拷貝到另一個工程,重新整合一 遍,麻煩至極。如果我們將這些可獨立於業務程式碼之外的功能設定模組封裝成一個個starter,複用的時 候只需要將其在pom中參照依賴即可,SpringBoot為我們完成自動裝配,簡直不要太爽。
SpringBoot提供的starter以spring-boot-starter-xxx的方式命名的。官方建議自定義的starter使用 xxx-spring-boot-starter命名規則。以區分SpringBoot生態提供的starter。
有了以上的瞭解後,來建立 Maven 專案,目錄結構如下:
實現自定義starter大致分一下幾步:
1.引入pom依賴
2.編寫測試用例類
3.建立自動設定類
4.在resources包下增加組態檔
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.mystylefree</groupId> <artifactId>custom-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.7.0</version> </dependency> </dependencies> </project>
這裡引入了自動設定類
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.7.0</version> </dependency> </dependencies>
在使用Spring官方的Starter時通常可以在application.properties中來設定引數覆蓋掉預設的值。即name的值會被組態檔中的值替換掉。
@EnableConfigurationProperties({PersonProperties.class}) //開啟ConfigurationProperties註解 @ConfigurationProperties(prefix = "person") public class PersonProperties { private int id; private String name="章三"; }
省略set/get方法和toString方法
@Configuration //當類路徑classpath下有指定當類 (SimpleBean) 的情況下進行自動設定 @ConditionalOnClass(PersonProperties.class) public class MyAutoConfiguration { static { System.out.println("MyAutoConfiguration init ..."); } @Bean public PersonProperties personProperties(){ return new PersonProperties(); } }
/META-INF/spring.factories檔案放在/src/main/resources目錄下
注意:META-INF是自己手動建立的目錄,spring.factories也是自己手動建立的檔案,在該檔案中設定自己的自動設定類。
一定要按照下面的位置結構新增
檔案中的內容如下
org.springframework.boot.autoconfigure.EnableAutoConfiguration= cn.mystylefree.config.MyAutoConfiguration
這時設定都加好了
只需從新打下包就行
mvn clean install
我們自己設定的starter包就儲存到原生的maven倉庫了
接下來我們就能使用剛剛自定義的jar包實現pom依賴參照了
這是我的maven依賴地址
將這個依賴加入到新的專案中引入即可
這是我的一個新springboot專案
1.加入依賴
根據自己的名稱新增
<dependency> <groupId>cn.mystylefree</groupId> <artifactId>custom-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
2.設定application.properties
person.id=1 person.name=小米
由於設定的字首名上person
3.新增測試用例
@SpringBootTest class SpringBootDemoApplicationTests { @Autowired private PersonProperties personProperties; @Test void contextLoads() { int id = personProperties.getId(); String name = personProperties.getName(); System.out.println(id+name); } }
這時 偵錯就能使用自定義的starter了
但是發現出現中文亂嗎了,不慌設定一下編碼格式
重新啟動專案
發現還是亂碼???
在Spring Boot專案中,有時候需要自定義一些設定,如果使用中文值並使用註解讀取時就會出現亂碼。
原因: Spring Boot註解讀取application.properties或者application-{profile}.properties檔案時預設的是ISO_8859_1編碼。
Spring Boot在讀取yaml組態檔時使用的是UTF-8的編碼方式。
custom.properties設定中文屬性,並使用@PropertySource(value="classpath:custom.properties", encoding="UTF-8")註解指定讀取的檔案和編碼。程式碼如下:
@Data @ConfigurationProperties(prefix = "custom.user") @PropertySource(value="classpath:custom.properties", encoding="UTF-8") public class UserProperties { // @Value("${custom.user.name}") private String name; // @Value("${custom.user.sex}") private String sex; }
使用@ConfigurationProperties和@Value均可以正常讀取。
custom.user.sex=男
換成:
custom.user.sex=u7537
以上三種方法均可以正常讀取組態檔中的中文字元。
參考檔案:
Spring Boot使用@ConfigurationProperties或者@Value讀取properties檔案中文亂碼
到此這篇關於SpringBoot自定義Starter元件開發實現的文章就介紹到這了,更多相關SpringBoot自定義Starter元件開發內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45