我有一个大型应用程序上下文,包含许多上下文文件,使用自动装配和包扫描,启动Web服务,建立与数据库的连接以及外部遗留系统等.我一直在考虑如何改善上下文加载时间,因为它需要一段时间没有真正占用CPU.有没有办法告诉应用程序上下文使用多个线程进行初始化?理论上应该是可能的,因为我们已经定义了依赖关系.我希望并行初始化资源(db,web services和legacy connections).
为了让 Spring WebClient 针对(可能是)OAuth2 端点验证我的服务,我已经奋斗了 2 天。流程很简单,我需要从某个端点获取令牌并将其设置为授权标头。我以为springboot可以透明地做到这一点。
\n这是配置我的网络客户端的一段代码:
\n private static final String SALES_FORCE = "sf";\n\n @Bean\n public WebClient salesforceClient(@Value("${salesforce.url}") String salesforceUrl,\n ReactiveClientRegistrationRepository clientRegistrationRepository, ReactiveOAuth2AuthorizedClientService clientService) {\n var clientManager = new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(clientRegistrationRepository, clientService);\n var oauth2Client = new ServerOAuth2AuthorizedClientExchangeFilterFunction(clientManager);\n oauth2Client.setDefaultClientRegistrationId(SALES_FORCE);\n\n return WebClient.builder()\n\n .baseUrl(salesforceUrl)\n\n .filter(oauth2Client)\n\n .build();\n }\n\nRun Code Online (Sandbox Code Playgroud)\n这是我的透明身份验证配置:
\nspring.security.oauth2.client.registration.sf.client-id=<secret_id>\nspring.security.oauth2.client.registration.sf.client-secret=<secret_key>\nspring.security.oauth2.client.registration.sf.authorization-grant-type=refresh_token\nspring.security.oauth2.client.registration.sf.user-info-authentication-method=form\nspring.security.oauth2.client.provider.sf.token-uri=https://auth.exacttargetapis.com/v1/requestToken\n\nRun Code Online (Sandbox Code Playgroud)\n我花了一段时间才弄清楚要使用哪些 oauth2 类,但最终应用程序启动了。我在本地主机上用 WireMock 替换了 token-uri,却发现 Spring 甚至没有尝试检索令牌。然后,我用 WireMock 替换了目标服务器,并返回 401,假设这会触发令牌检索或刷新,但 Spring 仍然没有获取令牌。
\n我已经开始考虑手动管理此令牌检索/过期,因为 Spring 对我来说似乎太神奇了。
\n我究竟做错了什么?
\n附言。
\n根据 ServerOAuth2AuthorizedClientExchangeFilterFunction 的 javadoc 建议,我还尝试了第二个构造函数,它(大概)也自动管理令牌过期。
\n private …Run Code Online (Sandbox Code Playgroud)