如何解决Quarkus连接本地MSSQL数据库的依赖注入错误
解决Quarkus连接MSSQL的依赖注入与连接问题
核心问题分析
你遇到的jakarta.enterprise.inject.UnsatisfiedResolutionException,根源是注入了**io.agroal.pool.DataSource**类型,但Quarkus默认不提供该类型的CDI Bean,它暴露的标准JDBC数据源类型是jakarta.sql.DataSource。
修复步骤
1. 修正数据源注入类型
将代码中的io.agroal.pool.DataSource替换为Jakarta EE标准的jakarta.sql.DataSource,Quarkus会自动注入配置好的数据源实例:
修改后的端点代码:
package org.acme; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import jakarta.sql.DataSource; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import java.sql.ResultSet; @Path("/hello") public class GreetingResource { private final DataSource dataSource; @Inject public GreetingResource(DataSource dataSource) { this.dataSource = dataSource; } @GET @Produces(MediaType.APPLICATION_JSON) public List<String> hello() { List<String> results = new ArrayList<>(); String query = "SELECT nazwa FROM dbo.Table_2"; try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(query); ResultSet rs = stmt.executeQuery()) { while (rs.next()) { results.add(rs.getString("nazwa")); } } catch (SQLException e) { e.printStackTrace(); } return results; } }
2. 优化数据库连接配置
针对本地MSSQL无密码的Windows身份验证场景,调整配置项:
- 添加
integratedSecurity=true到JDBC URL,启用Windows身份验证 - 空密码可直接省略
quarkus.datasource.password配置
修改后的application.properties:
quarkus.datasource.db-kind=mssql quarkus.datasource.username=Mmm\\filip quarkus.datasource.jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=Test;integratedSecurity=true
3. 验证依赖完整性
确保已正确安装Quarkus MSSQL扩展,该扩展会自动包含Agroal连接池依赖:
quarkus extension add quarkus-jdbc-mssql
额外排查点
- 确认本地MSSQL服务正在运行,端口1433对外开放
- 检查SSMS中
Test数据库权限,确保Mmm\filip账号拥有Table_2的查询权限 - 若使用Windows身份验证,需保证运行Quarkus的进程以
Mmm\filip账号启动
内容的提问来源于stack exchange,提问作者Dexu
相关产品推荐
相关产品推荐

