Уменьшите количество обращений к базе данных, сохраняя при этом состояние приложенияJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Уменьшите количество обращений к базе данных, сохраняя при этом состояние приложения

Сообщение Anonymous »

Мне нужно сократить количество обращений к базе данных в приложении Quarkus, которое постоянно обращается к ней для получения одной и той же информации снова и снова. Это приложение состоит из двух конечных точек:
  • PUT /external-service. Выбирает услугу среди доступных вариантов. Допустим, варианты: A, B и C.
  • POST /send. Отправляет данные в вышеупомянутую внешнюю службу.
Теперь, чтобы отправить данные в правильную внешнюю службу, это приложение следует подходу производителя:

Код: Выделить всё

@Singleton
public class ServiceProducer {

@Inject
ExternalServiceRepository externalServiceRepository;

@Inject
AService aService;

@Inject
BService bService;

@Inject
CService cService;

@Produces
@ApplicationScoped
public Uni getExternalService() {
return getEnabledServiceType()
.map(Unchecked.function(provider -> {
return switch(provider) {
case A -> awsService;
case B -> clickatellService;
case C -> twilioService;
default -> throw new IllegalStateException();
};
}));
}

private Uni getEnabledServiceType() {
return externalServiceRepository.listAll()
.map(externalServices ->
externalServices.stream()
.filter(ExternalService::isEnabled)
.findFirst()
.map(ExternalService::getServiceType)
.orElseThrow());
}

}

@ApplicationScoped
@Typed(AService.class)
public class AService implements ExternalService {

@Override
public Uni send() {
return Uni.createFrom().voidItem(); // we do not care about this
}

@Override
public ServiceType getServiceType() {
return Provider.A;
}

}
Это позже используется в ресурсе, вызывающем соответствующую внешнюю службу:

Код: Выделить всё

@Path("/")
@RequiredArgsConstructor
public class Resource {

private final ProviderService providerService;
private final Uni externalService;

@POST
@Path("send")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Uni send(Request request) {
return externalService.flatMap(ExternalService::send)
.map(ignored -> Response.ok().build())
.onFailure().recoverWithItem(failure -> Response.serverError().build());
}

@PUT
@Path("external-service")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Uni putExternalService(ServiceType serviceType) {
return providerService.updateExternalService(serviceType) // enables this external service, disabling the rest
.map(ignored -> Response.noContent().build())
.onFailure().recoverWithItem(failure -> Response.serverError().build());
}

}
Теперь вопрос в том, как я могу запретить этому приложению доступ к базе данных для проверки включенной внешней службы, сохраняя при этом ее состояние без сохранения состояния? Есть ли простой способ добиться этого?


Подробнее здесь: https://stackoverflow.com/questions/798 ... -stateless
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»