Olá! Meu nome é Zhenya, sou um desenvolvedor Java na Usetech, recentemente tenho trabalhado muito com arquitetura de microsserviço, e neste artigo gostaria de compartilhar alguns pontos que podem ser úteis para prestar atenção ao escrever um novo microsserviço no Spring Boot.
Desenvolvedores experientes podem achar essas recomendações óbvias, mas todas foram tiradas da prática de trabalhar em projetos reais.
1. Deixando os controladores finos
Em uma arquitetura tradicional em camadas, a classe do controlador aceita solicitações e as roteia para o serviço, enquanto o serviço lida com a lógica de negócios. Porém, às vezes nos métodos do controlador você pode encontrar algum tipo de validação dos parâmetros de entrada, bem como a transformação da Entidade em DTO.
Por exemplo:
@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;
}
Por um lado, o mapeamento ocupa apenas uma linha e a verificação da ausência de um resultado parece bastante lógica. No entanto, em tal caso, o princípio da responsabilidade exclusiva do controlador é violado. Embora a validação ou mapeamento seja simples, algumas linhas extras de código no método do controlador não são nada surpreendentes, mas no futuro, a lógica de validação e mapeamento pode se tornar mais complicada, e então se torna óbvio que o controlador não só aceita e redireciona solicitações, mas também lida com logíca de negócios.
, , , "", , 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 -
@MockBeanMockito — , - -
@TestPropertySource— , -
@DirtiesContext— ,
, .. . , :
-
@SpringBootTest -
@ActiveProfiles("test") -
protected(@Autowired) - (@MockBean)
, (@AfterEach), / .
, , , , setUp .
@DirtiesContext.
, - .