開發springboot start

粗體魚發表於2020-12-15

springboot start的核心思想,就是針對spring的一些配置進行約定並封裝,簡化配置流程,方便專案直接引入和使用。

我們在開發場景中,對於一個springboot start 模組,比較粗略的開發認知是:

1、通過application.properties 或application.yaml 檔案配置相關的 屬性

2、在實際業務中,注入 start的 service 方法,直接呼叫使用

 

如此,自己動手開發一個start的核心流程:

1、建立一個springboot 專案,引入springboot基礎依賴

2、定義一個properties  屬性類,用於其他專案引入時,可以根據配置,處理對應的邏輯

3、一個可供注入的service 類,和具體的實現函式,用於其他專案引入時, 直接注入,呼叫封裝好的業務邏輯

 

demo的具體實現:

1、建立專案,引入springboot的基礎依賴,其他依賴,可基於業務,自行加入引用

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <!--<version>2.2.6.RELEASE</version>-->
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2、建立可配置的屬性類

/**
 * 配置屬性: demo.sayWhat  |  demo.toWho
 */
@ConfigurationProperties(prefix = "demo")
public class DemoProperties {
    /**
     * 可以設定預設值,引用方不配置,則使用該預設值,若配置,則覆蓋預設值
     */
    private String sayWhat = "hello";
    private String toWho;

    public String getSayWhat() {
        return sayWhat;
    }

    public void setSayWhat(String sayWhat) {
        this.sayWhat = sayWhat;
    }

    public String getToWho() {
        return toWho;
    }

    public void setToWho(String toWho) {
        this.toWho = toWho;
    }
}

3、定義一個可注入的server,並實現 業務 say()

public class DemoService {

    /**
     * 配置的屬性
     */
    private DemoProperties demoProperties;

    /**
     * 構造器
     */
    public DemoService(DemoProperties demoProperties) {
        this.demoProperties = demoProperties;
    }

    
    /**
     * 可注入實現的函式
     */
    public String say() {
        return demoProperties.getSayWhat() + "!  " + demoProperties.getToWho();
    }
}

3、springboot 裝配 自定義start的核心配置

@Configuration
@EnableConfigurationProperties(DemoProperties.class)
@ConditionalOnProperty(
        prefix = "demo",
        name = "isopen",
        havingValue = "true",
        matchIfMissing = true
)
public class DemoConfig {
    @Autowired
    private DemoProperties demoProperties;

    @Bean(name = "demo")
    public DemoService demoService(){
        return new DemoService(demoProperties);
    }
}

4、在專案的resources 目錄 --> META-INF 目錄 --> spring.factories  檔案中,編輯:

#-------starter自動裝配---------
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xxl.xxl.sss.adaf.config.DemoConfig

如此,開發一個 start 已經完成了,

mvn clean install  打包,即可在本地的其他專案中,直接引入

若想上傳到maven 私服,則使用 mvn deploy 命令即可

 

5、在其他專案中的application.properties 檔案中配置:

demo.sayWhat=你好,很高興認識你

demo.toWho=粗體魚



在service 中注入
 

@Autowired

DemoServie demoservice

public void test(){

    String content =  demoservie.say();

    System.out.println(content)

    // 很高興認識你 ! 粗體魚

}

6、註解說明:(待補充)

@ConfigurationProperties:

@Configuration
@EnableConfigurationProperties(DemoProperties.class)
@ConditionalOnProperty(
        prefix = "demo",
        name = "isopen",
        havingValue = "true",
        matchIfMissing = true
)

 

 

 

 

 

相關文章