我正在编写一个需要与 Quarkus 和 Spring DI 兼容的代码。 我同时使用 DI 和 Spring Boot Properties 扩展,即 Spring Boot Extension。显然,它工作得很好,但是从被注释为 bean 的外部依赖项中注入(inject)任何其他对象都不会注入(inject)到任何地方。 Quarkus 似乎不认识它。
这是 Spring DI 扩展的某种限制吗?
我已经尝试使用 quarkus.index-dependency
属性,并尝试包含结构为 Quarkus 扩展的依赖项,但它不起作用。
编辑1:
正如 @Kolossus 所说,添加 beans.xml
解决了 DI 问题,但我遇到了另一个与属性类相关的错误:
java.lang.RuntimeException:io.quarkus.builder.BuildException:构建失败:由于错误而构建失败
[error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: Found 3 deployment problems:
[1] Ambiguous dependencies for type com.properties.IntegrationProperties and qualifiers [@Default]
- java member: com.authorization.AuthenticationService#<init>()
- declared on CLASS bean [types=[com.authorization.AuthenticationService, java.lang.Object], qualifiers=[@Named(value = "authenticationService"), @Default, @Any], target=com.authorization.AuthenticationService]
- available beans:
- CLASS bean [types=[com.properties.IntegrationProperties, java.lang.Object], qualifiers=[@Default, @Any], target=com.properties.IntegrationProperties]
- PRODUCER METHOD bean [types=[com.properties.IntegrationProperties, java.lang.Object], qualifiers=[@Default, @Any], target=com.properties.IntegrationProperties produceIntegrationProperties(org.eclipse.microprofile.config.Config), declaringBean=io.quarkus.arc.runtime.config.ConfigPropertiesProducer]
属性类的所有注入(inject)点中的依赖关系不明确。
最佳答案
将 beans.xml
添加到依赖项解决了我的问题。属性类的问题在于该类的注释如下:
@配置
@ConfigurationProperties(前缀=“一些前缀”)
公共(public)类IntegrationProperties
因此 Quarkus 创建了 2 个相同类型的 bean,一个是因为 @configuration
,另一个是因为 @ConfigurationProperties
。
我通过添加 @EnableConfigurationProperties(IntegrationProperties.class) 来修复它
在另一个配置类中。
关于dependency-injection - 当 CDI 来自外部依赖时,带有 Spring DI 注释的 CDI 是否可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62094235/