1. 程式人生 > >springboot自定義starter(protobuf-spring-boot-starter)

springboot自定義starter(protobuf-spring-boot-starter)

0.簡介(因為沒有想到合適的事例 所以就封一層protobuf)

官方命名:spring-boot-starter-{name} 比如spring-boot-starter-web
非官方命名:{name}-spring-boot-starter 比如mybatis-spring-boot-starter

1.maven依賴

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <version>2.0.0.RELEASE</version>
</dependency>

<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>3.6.0</version>
</dependency>

<dependency>
  <groupId>com.googlecode.protobuf-java-format</groupId>
  <artifactId>protobuf-java-format</artifactId>
  <version>1.2</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.9.RELEASE</version>
</dependency>

2.自定義ProtobufAutoConfiguration

@Configuration
@ConditionalOnProperty(prefix = "spring.protobuf", value = "enabled", matchIfMissing = false)
public class ProtobufAutoConfiguration {

    @Bean
    public ProtobufHttpMessageConverter protobufHttpMessageConverter() {
        return new ProtobufHttpMessageConverter();
    }

    @Bean
    public RestTemplate restTemplate(ProtobufHttpMessageConverter protobufHttpMessageConverter) {
        List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
        messageConverters.add(protobufHttpMessageConverter);
        return new RestTemplate(messageConverters);
    }
}

註釋:spring.protobuf.enabled=true才自動裝配ProtobufAutoConfiguration

3.resources/META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.boomsercret.config.ProtobufAutoConfiguration

4.安裝到本地倉庫(mvn install)

5.使用

<dependency>
    <groupId>com.boomsercret</groupId>
    <artifactId>protobuf-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

6.總結

其實很簡單,可以參考mybatis-spring-boot-starter, spring-boot-starter-web等等.

starter原始碼:https://gitee.com/jsjack_wang/protobuf-spring-boot-starter
測試Demo原始碼:https://gitee.com/jsjack_wang/springboot-demo dev-protobuf2分支