Quarkus中手动注入DataSource遇依赖未解析异常,寻求无Hibernate解决方案
问题解决:Quarkus中注入DataSource失败(无需Hibernate)
核心问题分析
你遇到的UnsatisfiedResolutionException是因为缺少连接池依赖,且DAO类未被CDI容器管理,导致无法解析DataSource实例。Quarkus默认使用Agroal作为连接池实现,仅引入JDBC驱动不足以提供可注入的DataSource。
解决步骤
1. 添加Agroal连接池依赖
在pom.xml中补充Quarkus连接池依赖:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-agroal</artifactId> </dependency>
该依赖会自动提供可注入的DataSource实例,无需额外配置。
2. 确保DAO类是CDI托管Bean
你的DAO类需要添加CDI作用域注解(如@ApplicationScoped),让Quarkus容器管理该类,才能实现依赖注入:
import jakarta.enterprise.context.ApplicationScoped; import javax.sql.DataSource; import jakarta.inject.Inject; @ApplicationScoped public class YourDAO { @Inject DataSource dataSource; // 手动操作数据库的方法示例 public void queryData() { try (var conn = dataSource.getConnection()) { // 执行SQL逻辑 } catch (Exception e) { // 异常处理 } } }
3. 可选:明确指定默认数据源
如果存在多个数据源配置,可通过@Default限定符明确注入默认数据源:
@Inject @jakarta.enterprise.inject.Default DataSource dataSource;
关于避免使用Hibernate的可行性
完全可行。Quarkus支持直接通过DataSource手动操作数据库,无需依赖Hibernate或JPA。只要确保连接池依赖正确、DAO类被CDI管理,就能实现纯JDBC的数据库操作。
内容的提问来源于stack exchange,提问作者Lobs
相关产品推荐
相关产品推荐

