Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Method springSecurityFilterChain in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration required a bean of type 'com.xx.HttpApi' that could not be found. #128

Closed
JakeWoki opened this issue Sep 13, 2022 · 9 comments

Comments

@JakeWoki
Copy link

JakeWoki commented Sep 13, 2022

[ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :


APPLICATION FAILED TO START


Description:

Method springSecurityFilterChain in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration required a bean of type 'com.xx.HttpApi' that could not be found.

Action:

Consider defining a bean of type 'com.xx.HttpApi' in your configuration.

Process finished with exit code 1

@RetrofitClient(
        baseUrl = "https://api.weixin.qq.com/",
        fallbackFactory = HttpDegradeFallbackFactory.class
)
@Logging(logStrategy = LogStrategy.BODY)
/*默认策略情况下,每5s平均响应时间不得超过500ms,否则启用熔断降级*/
@SentinelDegrade(count = 500)
public interface HttpApi {

    @GET("sns/jscode2session")
    Response<WeChatMiniProgramCode2Session> jsCodeToSession(@Query("js_code") String jsCode, @Query("appid") String appId, @Query("secret") String secret, @Query("grant_type") String grantType);
}

一台电脑这样正常,另一台这样却报上面错误

@Component
public class HttpApiFallback implements HttpApi {
    @Override
    public Response<WeChatMiniProgramCode2Session> jsCodeToSession(String jsCode, String appId, String secret, String grantType) {
        return null;
    }
}

@RetrofitClient(
        baseUrl = "https://api.weixin.qq.com/",
        fallback = HttpApiFallback.class,
        fallbackFactory = HttpDegradeFallbackFactory.class
)
@Logging(logStrategy = LogStrategy.BODY)
/*默认策略情况下,每5s平均响应时间不得超过500ms,否则启用熔断降级*/
@SentinelDegrade(count = 500)
public interface HttpApi {

    @GET("sns/jscode2session")
    Response<WeChatMiniProgramCode2Session> jsCodeToSession(@Query("js_code") String jsCode, @Query("appid") String appId, @Query("secret") String secret, @Query("grant_type") String grantType);
}

那台报错的改成这样正常,改成这样后前一台又出错,不知道是什么问题

@chentianming11
Copy link
Collaborator

麻烦提供一下完整的堆栈,应该有HttpApi没找到的具体原因。

@JakeWoki
Copy link
Author

堆栈是指哪些?
RetrofitClient加上fallback就用不了

@chentianming11
Copy link
Collaborator

完整的错误日志

RetrofitClient加上fallback就用不了,这个我没复现出来。因此得依据你具体的情况才可以分析。

@JakeWoki
Copy link
Author

JakeWoki commented Sep 30, 2022

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by retrofit2.Platform (file:/C:/Users/888/.m2/repository/com/squareup/retrofit2/retrofit/2.9.0/retrofit-2.9.0.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of retrofit2.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2022-09-30 09:40:19.046 WARN 30148 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.test.app.api.wx.HttpApi' available: expected single matching bean but found 2: httpApiFallback,httpApi
2022-09-30 09:40:23.164 INFO 30148 --- [ restartedMain] com.test.app.api.websocket.WSServer : Close cim server success!!!
2022-09-30 09:40:23.164 INFO 30148 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2022-09-30 09:40:23.164 INFO 30148 --- [ restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closing ...
2022-09-30 09:40:23.179 INFO 30148 --- [ restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed
2022-09-30 09:40:23.195 INFO 30148 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2022-09-30 09:40:23.211 INFO 30148 --- [ restartedMain] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-09-30 09:40:23.243 ERROR 30148 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :


APPLICATION FAILED TO START


Description:

Method springSecurityFilterChain in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration required a single bean, but 2 were found:
- httpApiFallback: defined in file [C:\Users\888\git\Test\app-api\target\classes\com\test\app\api\wx\fallback\HttpApiFallback.class]
- httpApi: defined in file [C:\Users\888\git\Test\app-api\target\classes\com\test\app\api\wx\HttpApi.class]

Action:

Consider marking one of the beans as @primary, updating the consumer to accept multiple beans, or using @qualifier to identify the bean that should be consumed

Process finished with exit code 1

@chentianming11
Copy link
Collaborator

可以在注入HttpApi 的地方加上@qualifier("httpApi") 试试。这个报错是因为有两个HttpApi bean实例,注入的时候不知道该选择哪一个。

@chentianming11
Copy link
Collaborator

也可以使用2.3.8版本试试,这个版本指定了HttpApi 为Primary

@JakeWoki
Copy link
Author

JakeWoki commented Oct 8, 2022

没有qualifier这个注解,2.3.8还是一样的错误

@chentianming11
Copy link
Collaborator

没有qualifier这个注解,2.3.8还是一样的错误

  1. @Qualifier,这个注解从Spring2.5就有了,应该是有的。
  2. 请问下,你目前使用的Spring-boot是什么版本?

@JakeWoki
Copy link
Author

JakeWoki commented Oct 9, 2022

Spring是2.7.3,加上@qualifier可以了

@JakeWoki JakeWoki closed this as completed Oct 9, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants