您的问题与身份验证管理器配置有关。所有示例和指南都将其设置在中
GlobalAuthenticationConfigurerAdapter,例如,它看起来像是您的内部类
SimpleEmbeddedSecurityConfiguration:
@Configurationpublic static class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter{ @Bean(name = Global.AUTHENTICATION_DATA_QUALIFIER + "DataSource") public DataSource dataSource() { return new EmbeddedDatabaseBuilder().setName("authdb").setType(EmbeddedDatabaseType.H2).addscripts("security/schema.sql", "security/data.sql").build(); } @Override public void init(AuthenticationManagerBuilder auth) throws Exception { auth.jdbcAuthentication().dataSource(dataSource()).passwordEnprer(passwordEnprer()); }}
如果您不使用,
GlobalAuthenticationConfigurerAdapter那么
DataSource在创建安全性过滤器时(
@Primary
DataSource甚至在bean尚未注册之前),Spring Data
REST就会获取这些获取的内容,并且整个JPA初始化会非常早地开始(不好的主意)。
更新:身份验证管理器不是唯一的问题。如果您需要进行会话范围的 *** 作
@Primary
DataSource(我会说这很不寻常),则需要在启动时关闭所有需要访问数据库的内容(Hibernate和Spring Boot在各个地方)。例:
spring.datasource.initialize: falsespring.jpa.hibernate.ddlAuto: nonespring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: falsespring.jpa.properties.hibernate.dialect: H2
进一步更新:如果您使用的是执行器,它还希望在启动时将主要数据源用于运行状况指示器。您可以通过私有相同类型的bean来覆盖它,例如
@Bean@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)@Lazypublic DataSourcePublicMetrics dataSourcePublicMetrics() { return new DataSourcePublicMetrics();}
PS我相信
GlobalAuthenticationConfigurerAdapter在Spring Boot
1.2.2中可能并不需要,但在1.2.1或1.1.10中是必需的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)