Spring Io C: идентификатор для запроса - PullRequest
0 голосов
/ 17 февраля 2020

Я создал этот бин, чтобы получить Supplier<String>:

@Bean
public Supplier<String> auditIdSupplier() {
    return () -> String.join(
        "-",
        "KEY",
        UUID.randomUUID().toString()
    );
}

Как вы можете видеть, он предназначен только для генерации прямой строки идентификатора.

Каждый раз , это называется, предоставляется новый идентификатор.

Я хотел бы изменить это поведение, чтобы получить тот же сгенерированный идентификатор в области запроса. Я имею в виду, что при первом получении запроса генерируется новый идентификатор. С этого момента при следующих вызовах no this Supplier должен возвращать первый сгенерированный идентификатор в области запроса.

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 17 февраля 2020

Вам необходимо сконфигурировать bean-объект области действия запроса

@Configuration
public class MyConfig {

    @Bean
    @RequestScope
    public String myRequestScopedIdentifyer(NativeWebRequest httpRequest) {
        // You don't need request as parameter here, but you can inject it this way if you need request context

        return String.join(
          "-",
          "KEY",
          UUID.randomUUID().toString());
    }

, а затем внедрить его, где необходимо, с помощью инжекции поля

@Component
public class MyClass {

    @Autowired 
    @Qualifier("myRequestScopedIdentifyer")
    private String identifier

или фабрики объектов

@Component
public class MyClass {

    public MyClass(@Qualifier("myRequestScopedIdentifyer") ObjectFactory<String> identifyerProvider) {
        this.identifyerProvider= identifyerProvider;
    }


    private final ObjectFactory<String> identifyerProvider;

    public void someMethod() {
        String requestScopedId = identifyerProvider.getObject();
    }
0 голосов
/ 17 февраля 2020

Это моя версия:

@Component
@Scope(WebApplicationContext.SCOPE_REQUEST)
public class AuditIdPerRequest {
   private String key;

   @PostConstruct 
   public void calculateKey() {
      this.key = String.join(
        "-",
        "KEY",
        UUID.randomUUID().toString()
    );
   }

   public String getAuditId() {
      return this.key;
   }  
}

0 голосов
/ 17 февраля 2020

Как было написано в комментарии, может быть, что-то вроде ниже будет работать:

@Bean
@RequestScope
public Supplier<String> auditIdSupplier() {
    String val = String.join("-","KEY",UUID.randomUUID().toString());
    return () -> val;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...