Java Spring Security找不到数据源
我使用的是Spring Boot MVC,Spring的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 应用程序(使用自动配置)
ServletRegistrationBean
在数据源配置之前被调用,数据源配置在StandardContext
中加载
WebSecurityConfig
总是首先被调用,因此从来没有为AutowiredprodDatasource
定义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());
}
}