springboot自定義starter(生成spring-configuration-metadata.json)可以提示寫配置

前言

springboot支持自定義starter,可以用來封裝一些自定義的組件,比如fastdfs,ftp等等工具類,封裝成starter之後,直接引入就可以了。

步驟

新建一個maven項目,在pom文件裏面引入相關依賴jar包。
主要需要引入spring-boot-configuration-processorspring-boot-autoconfigure,這個引用是自動生成配置提示相關信息的,編譯之後就會自動生成spring-configuration-metadata.json文件,這樣就可以提示了。

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
pom文件示例
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.13</version>
        </dependency>
        <dependency>
            <groupId>com.taobao.dingding</groupId>
            <artifactId>taobao-sdk-java-auto</artifactId>
            <version>2020-06-20</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

以封裝釘釘發送消息爲例

DingdingAutoConfiguration 寫一個釘釘的自動封裝類,EnableConfigurationProperties註解主要是使配置類生效,要是配置類不生效,後面具體業務的處理類就用不了相關屬性,這個配置不能使用在具體業務邏輯處理類上,不會生效。

@Configuration
@ConditionalOnClass({DingTalkClient.class})
@EnableConfigurationProperties({DingdingProperties.class})
public class DingdingAutoConfiguration {
    @Bean
    public DingDingTemplate dingTemplate() {
        return new DingDingTemplate();
    }
}

DingdingProperties 封裝一個釘釘相關屬性的配置類,這個需要使用@ConfigurationProperties註解標記這是一個配置類,要不然不會被生成配置的提示信息。


@ConfigurationProperties(prefix = "xx.dingding")
public class DingdingProperties {
    public String webHookUrl;
    public String secret;
    public String enable;

    public String getEnable() {
        return enable;
    }

    public void setEnable(String enable) {
        this.enable = enable;
    }

    public String getSecret() {
        return secret;
    }

    public void setSecret(String secret) {
        this.secret = secret;
    }

    public String getWebHookUrl() {
        return webHookUrl;
    }

    public void setWebHookUrl(String webHookUrl) {
        this.webHookUrl = webHookUrl;
    }
}

寫具體的業務處理的bean,這個bean在自動配置的地方會被引用。


public class DingDingTemplate extends AbstractDingDingMsg {
    private static final Logger logger = LoggerFactory.getLogger(DingDingTemplate.class);

    public String sendMsgByText(OapiRobotSendRequest.Text text, OapiRobotSendRequest.At at) {
        try {
            DingTalkClient client = new DefaultDingTalkClient(signUrl());
            OapiRobotSendRequest request = new OapiRobotSendRequest();
            // 設置消息類型
            request.setMsgtype("text");
            // 設置@人
            request.setAt(at);
            // 設置文本
            request.setText(text);
            OapiRobotSendResponse response = client.execute(request);
            return response.getBody();
        } catch (Exception e) {
            logger.error("發送釘釘消息失敗(文本格式):" + e.getMessage(), e);
        }
        return "";
    }

    public String sendMsgByMarkdown(OapiRobotSendRequest.Markdown markdown, OapiRobotSendRequest.At at) {
        try {
            DingTalkClient client = new DefaultDingTalkClient(signUrl());
            OapiRobotSendRequest request = new OapiRobotSendRequest();
            // 設置消息類型
            request.setMsgtype("markdown");
            // 設置@人
            request.setAt(at);
            // 設置文本
            request.setMarkdown(markdown);
            OapiRobotSendResponse response = client.execute(request);
            return response.getBody();
        } catch (Exception e) {
            logger.error("發送釘釘消息失敗(markdown格式):" + e.getMessage(), e);
        }

        return "";
    }

    public String sendMsgByLink(OapiRobotSendRequest.Link link, OapiRobotSendRequest.At at) {
        try {
            DingTalkClient client = new DefaultDingTalkClient(signUrl());
            OapiRobotSendRequest request = new OapiRobotSendRequest();
            // 設置消息類型
            request.setMsgtype("link");
            // 設置@人
            request.setAt(at);
            // 設置文本
            request.setLink(link);
            OapiRobotSendResponse response = client.execute(request);
            return response.getBody();
        } catch (Exception e) {
            logger.error("發送釘釘消息失敗(link格式):" + e.getMessage(), e);
        }
        return "";
    }

新建一個spring.factories

在resources目錄下面新建一個META-INF文件夾,繼續新建一個spring.factories文件,裏面配置需要記載的自動配置類。前面的org.springframework.boot.autoconfigure.EnableAutoConfiguration是官方提供的,後面的就是需要被自動加載的類。

###釘釘發送消息自定義starter###
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xx.starter.dingding.config.DingdingAutoConfiguration

在這裏插入圖片描述
生成的jar包裏面就有spring-configuration-metadata.json文件
在這裏插入圖片描述
最後打成jar包就可以使用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章