Java Spring Security找不到数据源

Java Spring Security找不到数据源,java,spring-mvc,spring-security,spring-boot,spring-data,Java,Spring Mvc,Spring Security,Spring Boot,Spring Data,我使用的是Spring Boot MVC,Spring的ServletRegistrationBean在数据源配置之前被调用,数据源配置在StandardContext中加载 WebSecurityConfig总是首先被调用,因此从来没有为AutowiredprodDatasource定义bean 我尝试了从@Order到@ConditionalOnMissingBean的所有方法。我找不到像样的解释。但是我需要在运行WebSecurity之前为数据源创建一个Bean 应用程序(使用自动配置)

我使用的是Spring Boot MVC,Spring的
ServletRegistrationBean
在数据源配置之前被调用,数据源配置在
StandardContext
中加载

WebSecurityConfig
总是首先被调用,因此从来没有为Autowired
prodDatasource
定义bean

我尝试了从
@Order
@ConditionalOnMissingBean
的所有方法。我找不到像样的解释。但是我需要在运行WebSecurity之前为数据源创建一个Bean

应用程序(使用自动配置) PrimaryDataSource 网络安全配置
我想出了一个似乎有用的解决办法


而不是在我的Spring Security中使用@Autowire。我将它们替换为
@Resource
,它似乎在等待首先创建我的bean

我找到了一个似乎有用的解决方案

而不是在我的Spring Security中使用@Autowire。我将它们替换为
@Resource
,它似乎在等待首先创建我的bean

@EnableAutoConfiguration
@SpringBootApplication
@EnableCaching
public class Application {


    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("appInfo");
    }

}
@Configuration
@PropertySource({ "classpath:application.properties" })
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "App.Models",
        entityManagerFactoryRef = "prodEntityManager",
        transactionManagerRef = "transactionManager"
)
public class PrimaryDatasourceConfig {

    @Autowired
    private Environment env;

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.prod")
    public DataSource prodDataSource() {
        EmbeddedDatabaseFactory factory = new EmbeddedDatabaseFactory();
        factory.setDatabaseName("spring-social-quickstart");
        factory.setDatabaseType(EmbeddedDatabaseType.H2);
        return factory.getDatabase();
    }
}
@Configuration
@EnableWebSecurity
@Import(PrimaryDatasourceConfig.class)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource prodDataSource;

    SuperiorUserService jdbcDao;

.......

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .jdbcAuthentication()
                .dataSource(prodDataSource);
        auth.authenticationProvider(authProvider());
    }

}