Spring Boot - Starter

Spring Boot - Starter

2021, Oct 26    

Hướng dẫn viết một library Spring Boot Starter

A Starter project

  • Project bao gồm 3 class chính:
    • Class SampleProperties: chưa các variable được load từ file config application.yml
    • Class SampleService: sample service cần sử dụng
    • Class SampleAutoConfiguration: thực hiện việc auto-configuration
  • Class SampleProperties
@Getter
@Setter
@ConfigurationProperties("sample-code")
public class SampleProperties {

  public boolean active;
  public String value;

}

Giá trị được lấy từ config sau thuộc tính sample-code

  • Class SampleService
public class SampleServiceImpl implements SampleService {

  private SampleProperties sampleProperties;

  public SampleServiceImpl(SampleProperties sampleProperties) {
      this.sampleProperties = sampleProperties;
  }

  @Override
  public void doSample() {
    System.out.println("Do sample: " + sampleProperties.value);
  }
}
  • Class SampleAutoConfiguration thực hiện các việc
    • Chỉ chạy auto khi thuộc tính sample-code.active=true
    • Load config theo class SampleProperties
    • Tự động tạo bean của class SampleService
@Configuration
@ConditionalOnProperty(name = "active", prefix = "sample-code", havingValue = "true")
@EnableConfigurationProperties(SampleProperties.class)
public class SampleAutoConfiguration {

  @ConditionalOnMissingBean
  @Bean
  SampleService sampleService(SampleProperties sampleProperties) {
    return new SampleServiceImpl(sampleProperties);
  }

}
  • Thêm file spring.factories bên dưới thư mục src/main/resouces/META-INF
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
io.codebyexample.springbootstarter.autoconfiguration.SampleAutoConfiguration

Write a sample

  • Thêm config trong file application.yml
sample-code:
  active: true
  value: Sample Value
  • Lấy bean SampleService để sử dụng
@SpringBootApplication
public class Application {

	@Autowired
	SampleService sampleService;

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);

	}

	@EventListener(ApplicationReadyEvent.class)
	public void ready() {
		sampleService.doSample();
	}

}

Source code ở đây