Spring boot не создает компонент из конфигурации, даже свойства определены

#java #spring #spring-boot

#java #spring #spring-boot

Вопрос:

У меня странная проблема, я пытаюсь интегрировать пользовательскую библиотеку, которая определяет несколько компонентов, которые должны быть прочитаны основным классом приложения spring boot.

Ниже приведен фрагмент кода моего основного класса.

 @EnableConfigurationProperties
@ConfigurationProperties(prefix = "application.frameworks")
@EnableCaching
@EnableAsync
@EnableWebMvc
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
@SpringBootApplication
@ComponentScan(basePackages = {"com.abc.order.sample"
        , "com.abc.alberta.logging"
        , "com.abc.enterprise"
        , "com.abc.platformservices.connectors.oracle"
        , "com.abc.order.emailframework"})
@EntityScan(basePackages = {"com.abc.order.sample.domain.model.entity",
        "com.abc.order.emailframework.domains"})
@EnableJpaRepositories(basePackages = {"com.abc.order.sample.repository", "com.abc.order.emailframework.repositories"})
@Slf4j
public class TestApplication implements CommandLineRunner {
 

Как вы можете видеть, я определил все возможные аннотации только из-за разочарования в основном классе, поскольку он не создает компонент, определенный в классе конфигурации, как показано ниже. (Это добавляется как зависимость в текущий проект с использованием maven dependency — Другие вещи опущены.)

 @Slf4j
@ConditionalOnProperty(prefix = "config.framework", name = "security.enabled", matchIfMissing = true)
@Configuration
@EnableScheduling
@EnableConfigurationProperties({ApplicationProperties.class, SSLProperties.class, SecurityPolicyProperties.class})
public class SecurityConfiguration {

    @Bean
    @ConditionalOnWebApplication
    public ServletSecurityInterceptor springBootInterceptor() throws PolicyAdminServiceConfigurationException {
        CertificatePropertyContext samlCertificatePropertyContext = new CertificatePropertyContext(
            sslProperties.getTrustStoreType(), sslProperties.getTrustStoreClean(),
            sslProperties.getTrustStorePassword(), sslProperties.getTrustStoreCryptovaultLabel());
        return new SpringBootSecurityInterceptor(remoteSynchonizer(), applicationProperties.getNamespace(), applicationProperties.getName(), samlCertificatePropertyContext, subjectHelper);
    }

}
 

Свойства, определенные в основном проекте, такие, как показано ниже

 server:
  port: 8080
  ssl:
    enabled: true
    client-auth: none
    trust-store: C:sample-appsrcmainresourcestruststore.jks
    trust-store-password: changeit
    key-store: C:sample-appsrcmainresourceskeystore.jks
    key-store-password: changeit
    client-alias: client-common


config:
  frameworks:
    namespace: com.abc.sampleApp
    name: sample-app
    security:
      token:
        host: abc.deployment.int
      policy:
        endpoint: abc.deployment.int
      enabled: true
 

Интересно, почему это не работает при добавлении того же в другие приложения только с аннотацией @SpringBootApplication, она работает безупречно. Я что-то пропустил здесь со стороны spring в конфигурации?

ОБНОВЛЕНИЕ com.abc.enterprise — содержит SecurityConfiguration (как часть зависимости maven) com.abc.order.sample — содержит тестовое приложение (как часть самого приложения)

Комментарии:

1. В какие пакеты SecurityConfiguration и TestApplication классы помещены?

2. попробуйте изменить настройку на @ConditionalOnProperty(name = "config.framework.security.enabled", havingValue = "true", matchIfMissing = true)

3. @ConditionalOnWebApplication действительно ли это требуется здесь вообще?

4. Я не уверен в этом @Andrey

5. Я не могу вносить изменения в эти файлы — это файлы библиотеки. (банки включены из зависимости maven)