Cara memulai menulis microservice di Spring Boot agar nantinya tidak pusing

Halo! Nama saya Zhenya, saya seorang developer Java di Usetech, akhir-akhir ini saya banyak bekerja dengan arsitektur microservice, dan pada artikel ini saya ingin membagikan beberapa poin yang mungkin berguna untuk diperhatikan ketika Anda menulis microservice baru di Spring Boot.



Pengembang berpengalaman mungkin menganggap rekomendasi ini jelas, tetapi semuanya diambil dari praktik mengerjakan proyek nyata.



1. Membiarkan pengontrol tipis



Dalam arsitektur berlapis tradisional, kelas pengontrol menerima permintaan dan mengarahkannya ke layanan, sementara layanan menangani logika bisnis. Namun, terkadang dalam metode pengontrol Anda dapat menemukan beberapa jenis validasi parameter input, serta transformasi Entitas menjadi DTO.



Misalnya:



@GetMapping
public OperationDto getOperationById(@PathVariable("id") Long id) {

    Optional<Operation> operation = operationService.getById(id);

    if (operation.isEmpty()) {
        return EMPTY_OPERATION_DTO;
    }

    OperationDto result = mapperFacade.map(operation.get(), OperationDto.class);
    return result;
}


Di satu sisi, pemetaan hanya membutuhkan satu baris, dan pemeriksaan untuk tidak adanya hasil terlihat cukup logis. Namun, dalam kasus seperti itu, prinsip tanggung jawab tunggal pengendali dilanggar. Meskipun validasi atau pemetaannya sederhana, beberapa baris kode tambahan dalam metode pengontrol sama sekali tidak mencolok, tetapi di masa mendatang, logika validasi dan pemetaan mungkin menjadi lebih rumit, dan kemudian menjadi jelas bahwa pengontrol tidak hanya menerima dan mengalihkan permintaan, tetapi juga menangani logika bisnis.



, , , "", , DTO.



:



@GetMapping
public OperationDto getOperationById(@PathVariable("id") Long id) {
    return operationService.getById(id);
}


:



public OperationDto getById(Long id) {

    Optional<Operation> operationOptional = ... //  operation

    return operationOptional
        .map(operation -> mapperFacade.map(operation, OperationDto.class))
        .orElse(EMPTY_OPERATION_DTO);
}


2. DTO



, DTO REST API, DTO Kafka. , REST Kafka, , DTO . , DTO .



, DTO, , DTO, , . DTO , .



3. WARN-,



, , , , , Spring Boot , , .



WARN, "" Spring Boot 2 Hibernate:

spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning



, - Spring Boot 2 Open Session In View, Hibernate HTTP-.



Open Session In View LazyInitializationException, , Hibernate , , -. , , , ( n+1). .



, Open Session In View , — application.yml :



spring:
  jpa:
    open-in-view: false


4.



, @SpringBootTest , , . , @SpringBootTest, , Spring . , . , , .



:



  • @Import,
  • @ActiveProfiles
  • @MockBean Mockito — , -
  • @TestPropertySource — ,
  • @DirtiesContext — ,


, .. . , :



  • @SpringBootTest
  • @ActiveProfiles("test")
  • protected ( @Autowired) - (@MockBean)


, (@AfterEach), / .



, , , , setUp .



@DirtiesContext.



, - .




All Articles