Spring Boot与基于会话的数据源

Spring Boot与基于会话的数据源,第1张

Spring Boot与基于会话数据源

您的问题与身份验证管理器配置有关。所有示例和指南都将其设置在中

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中是必需的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5430876.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存