發現測試服務器一台muc啟動失敗,另一台是好的,本地也沒問題,報錯信息如下:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mucAccountLoginController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerEndpointsConfiguration': Unsatisfied dependency expressed through field 'configurers'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'pcAuthorizationServerConfig': Unsatisfied dependency expressed through field 'authenticationManager'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webSecurityConfig': Unsatisfied dependency expressed through field 'formAuthenticationConfig'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'formAuthenticationConfig' defined in URL [jar:file:/home/rockysaas/muc/rockysaas-provider-muc.jar!/BOOT-INF/lib/rockysaas-security-core-1.0.jar!/com/rockysaas/security/core/authentication/FormAuthenticationConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pcAuthenticationSuccessHandler': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'defaultAuthorizationServerTokenServices': Requested bean is currently in creation: Is there an unresolvable circular reference?
原因是原先有
public class PcAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { @Resource private ObjectMapper objectMapper; @Resource private ClientDetailsService clientDetailsService; @Autowired private PasswordEncoder passwordEncoder; @Resource private MucAccountService mucAccountService; @Resource private MucPlatformMapper mucPlatformMapper; @Resource private AuthorizationServerTokenServices authorizationServerTokenServices;
后來mucAccountLoginController加了段代碼
@RestController
public class MucAccountLoginController extends BaseController { @Resource private MucLoginService mucLoginService; @Resource private MucAccountTokenService mucUserTokenService; @Resource private ClientDetailsService clientDetailsService; @Autowired private PasswordEncoder passwordEncoder; @Resource private MdcApplicationFeignApi mdcApplicationFeignApi; @Resource private AuthorizationServerTokenServices authorizationServerTokenServices;
原先只有一個AuthorizationServerTokenServices需要注入,現在變成兩個,如果同時發生注入的時候就會報錯。在其中一個要注入的類上上加上@Lazy就好了
@RestController @RequestMapping(value = "", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @Api(tags = "Web - 賬號登錄相關", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public class MucAccountLoginController extends BaseController { @Resource private MucLoginService mucLoginService; @Resource private MucAccountTokenService mucUserTokenService; @Resource private ClientDetailsService clientDetailsService; @Autowired private PasswordEncoder passwordEncoder; @Resource private MdcApplicationFeignApi mdcApplicationFeignApi; @Resource @Lazy private AuthorizationServerTokenServices authorizationServerTokenServices;