Я немного запутался с определениями Бина в Spring.
Чтобы возобновить, мне нужен бин Keycloak для обслуживания.
Я создаю его на RootConfig.java так:
@Bean
public Keycloak keycloak(){
Keycloak keycloak = KeycloakBuilder
.builder()
.serverUrl(KEYCLOAK_AUTH_SERVER_URL)
.realm(KEYCLOAK_REALM)
.clientId(KEYCLOAK_RESOURCE)
.clientSecret(KEYCLOAK_CREDENTIALS_SECRET)
.grantType(OAuth2Constants.CLIENT_CREDENTIALS)
.resteasyClient(new ResteasyClientBuilder().connectionPoolSize(KEYCLOAK_REST_CLIENT_POOL_SIZE).build())
.build();
return keycloak;
}
Тогда на моих сервисах я хочу использовать это следующим образом:
@Autowired
private Keycloak keycloak;
Но я получил это исключение при запуске моего проекта:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'applicationManagementServiceImpl' defined in VFS resource ["/service/ApplicationManagementServiceImpl.class\"]: Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
Caused by: java.lang.ExceptionInInitializerError
Caused by: java.lang.IllegalArgumentException: Keycloak instance required"}}
Если кто-нибудь может сказать мне, почему я не могу получить доступ к этому бобу? Не должно быть объявлено, когда я запускаю свой сервер?
RootConfig:
@Configuration
@ComponentScan(basePackages = {
"xxx.config",
"xxx.controller",
"xxx.service",})
@PropertySource("classpath:application.properties")
@Import(SecurityConfig.class)
public class RootConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public MessageSource messageSource()
{
}
@Bean
public LocaleResolver localeResolver() {
}
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
}
@Bean
public Keycloak keycloak(){
Keycloak keycloak = KeycloakBuilder
.builder()
.serverUrl(KEYCLOAK_AUTH_SERVER_URL)
.realm(KEYCLOAK_REALM)
.clientId(KEYCLOAK_RESOURCE)
.clientSecret(KEYCLOAK_CREDENTIALS_SECRET)
.grantType(OAuth2Constants.CLIENT_CREDENTIALS)
.resteasyClient(new ResteasyClientBuilder().connectionPoolSize(KEYCLOAK_REST_CLIENT_POOL_SIZE).build())
.build();
return keycloak;
}
}
Мое обслуживание:
@Service
public class ApplicationManagementServiceImpl implements ApplicationManagementService{
//Variable def
@Autowired
private Keycloak keycloak;
private PaymentServiceProviderClientRepresentationRepository repository = new PaymentServiceProviderClientRepresentationRepositoryImpl(keycloak, KEYCLOAK_REALM_TARGET);
@Override
public void createApp(String appName, String registrationId, String clientRootUrl, String baseUrl, String clientRedirectUri) {
//myStuff
}
public Keycloak getKeycloak() {
return keycloak;
}
public void setKeycloak(Keycloak keycloak) {
this.keycloak = keycloak;
}
}
Спасибо