頭痛がしないようにSpringBootでマイクロサービスの作成を開始する方法

こんにちは!私の名前はZhenyaです。UsetechのJava開発者です。最近、マイクロサービスアーキテクチャで多くの作業を行っています。この記事では、SpringBootで新しいマイクロサービスを作成するときに注意が必要ないくつかのポイントを紹介します。



経験豊富な開発者はこれらの推奨事項を明白に感じるかもしれませんが、それらはすべて実際のプロジェクトに取り組む実践から取られています。



1.コントローラーを薄くする



従来の階層化アーキテクチャでは、サービスがビジネスロジックを処理している間、コントローラクラスは要求を受け入れてサービスにルーティングします。ただし、コントローラーのメソッドで、入力パラメーターの何らかの検証や、エンティティのDTOへの変換を見つけることができる場合があります。



例えば:



@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;
}


一方では、マッピングは1行しかかからず、結果がないかどうかのチェックは非常に論理的に見えます。ただし、そのような場合、管理者の単独責任の原則に違反します。検証またはマッピングは単純ですが、コントローラーメソッドの数行の余分なコードはまったく印象的ではありませんが、将来的には検証とマッピングの両方のロジックがより複雑になる可能性があり、コントローラーが要求を受け入れてリダイレクトするだけでなく、処理することも明らかになります。ビジネスの論理。



, , , "", , 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