FusionAuthClient singleton - PullRequest
       16

FusionAuthClient singleton

0 голосов
/ 22 января 2020

Я хочу реализовать FusionAuth в среде микросервисов с пружинной загрузкой, поэтому я хочу сделать синглтон клиента FusionAuth для java. Но я получаю ошибку за использование переменных apiKey, baseUrl в контексте c.

@Configuration
public class FusionAuthClientConfig {

    private static FusionAuthClient INSTANCE = null;

    @Value("${fusionAuth.apiKey}")
    private String apiKey;

    @Value("${fusionAuth.baseUrl}")
    private String baseUrl;

    public static FusionAuthClient getInstance() {
        if(INSTANCE == null)
            INSTANCE = new FusionAuthClient(apiKey, baseUrl);

        return INSTANCE;
    }
}

В любом случае, используется ли эта область класса singleton? Я имею в виду для среды параллелизма и производительности, должен ли я использовать клиент для каждого запроса к fusion auth?

1 Ответ

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

Ваш private static FusionAuthClient INSTANCE = null не нужен. По умолчанию бобы определяются как одиночные. @see: Bean Scopes

Поскольку вы используете @Configuration, все, что вам нужно сделать, это изменить свой FusionAuthClientConfig на следующее, и вы сможете ссылаться на него в другом месте в ваше приложение как свойство @Autowire d.

@Configuration
public class FusionAuthClientConfig {

    @Value("${fusionAuth.apiKey}")
    private String apiKey;

    @Value("${fusionAuth.baseUrl}")
    private String baseUrl;

    @Bean
    public FusionAuthClient fusionAuthClient() {
        return new FusionAuthClient(apiKey, baseUrl);
    }
}

Теперь на ваш компонент fusionAuthClient можно ссылаться в другом месте, например так:

@Service
//or @Component etc
public class MyService {
    private final FusionAuthClient fusionAuthClient;

    public MyService(FusionAuthClient fusionAuthClient) {
        this.fusionAuthClient = fusionAuthClient;
    }

    public void doTheThing() {
        // use this.fusionAuthClient
    }
}
...