首頁 > 軟體

Spring Boot自定義Starter元件開發實現設定過程

2022-06-13 14:03:31

自定義starter

SpringBoot中的starter是一種非常重要的機制,能夠拋棄以前繁雜的設定,將其統一整合進 starter,應用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要載入的資訊並啟 動相應的預設設定。starter讓我們擺脫了各種依賴庫的處理,需要設定各種資訊的困擾。 SpringBoot會自動通過classpath路徑下的類發現需要的Bean,並註冊進IOC容器。SpringBoot提供 了針對日常企業應用研發各種場景的spring-boot-starter依賴模組。所有這些依賴模組都遵循著約定 成俗的預設設定,並允許我們調整這些設定,即遵循“約定大於設定”的理念。

為什麼要自定義starter

在我們的日常開發工作中,經常會有一些獨立於業務之外的設定模組,我們經常將其放到一個特定的 包下,然後如果另一個工程需要複用這塊功能的時候,需要將程式碼硬拷貝到另一個工程,重新整合一 遍,麻煩至極。如果我們將這些可獨立於業務程式碼之外的功能設定模組封裝成一個個starter,複用的時 候只需要將其在pom中參照依賴即可,SpringBoot為我們完成自動裝配,簡直不要太爽。

自定義starter的命名規則

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();
    }
}

建立spring.factories檔案

/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編碼。

解決方案:

1. 使用yml組態檔進行設定。

Spring Boot在讀取yaml組態檔時使用的是UTF-8的編碼方式。

2. 使用自定義組態檔如:

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均可以正常讀取。

3. 把中文換成對應的ASCII碼。

custom.user.sex=男
換成:

custom.user.sex=u7537
以上三種方法均可以正常讀取組態檔中的中文字元。

參考檔案:

Spring Boot使用@ConfigurationProperties或者@Value讀取properties檔案中文亂碼

到此這篇關於SpringBoot自定義Starter元件開發實現的文章就介紹到這了,更多相關SpringBoot自定義Starter元件開發內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com