将 Spring Boot JDBCTemplate 连接到 Azure SQL,连接字符串和 TCP/IP 问题

Connect Spring Boot JDBCTemplate to Azure SQL, Issues with Connection String and TCP/IP

提问人:mattsmith5 提问时间:11/12/2023 更新时间:11/12/2023 访问量:30

问:

我似乎无法使用 JDBCTemplate 将我的 Java Spring Boot 项目连接到 Azure SQL。我不断收到错误,无论是通过自动连线、连接字符串还是选项 2) 手动设置数据源。如何解决此问题? 但是,这两个选项都适用于我计算机上的 localhost sql 数据库。

错误:与主机的 TCP/IP 连接 tcp:food-server.database.windows.net,端口 1433 出现故障。 错误:“tcp:food-server.database.windows.net。验证 连接属性。确保 SQL Server 的实例是 在主机上运行并在端口接受 TCP/IP 连接。做 确保与端口的 TCP 连接未被防火墙阻止。

选项 1) 在 application.properties 文件中带有 connectionString,不起作用@Autowired

spring.datasource.url= jdbc:sqlserver://tcp:food-server.database.windows.net,1433;encrypt=true;trustServerCertificate=true;databaseName=Test
spring.datasource.username=sauser
spring.datasource.password=password12345*

选项 2) 使用 DataSource 配置 Bean,当前也不起作用

@Configuration
public class ServerConfiguration {
 
    @Bean
    public DataSource getDataSource() {
        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setUser("sauser");
        ds.setPassword("password12345*");
        ds.setServerName("tcp:food-server.database.windows.net");
        ds.setPortNumber(1433);
        ds.setTrustServerCertificate(true);
        ds.setDatabaseName("test");
        return ds;
    }

    @Bean
    public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
        return new NamedParameterJdbcTemplate(getDataSource());
    }

Azure IP 安全设置:

我还确保允许我的 IP 地址在 Azure SQL 门户、数据库、设置防火墙中

https://learn.microsoft.com/en-us/azure/azure-sql/database/firewall-create-server-level-portal-quickstart?view=azuresql

enter image description here

java spring-boot azure-sql-database jdbctemplate

评论

0赞 tgdavies 11/12/2023
我想说的是,应该删除您的主机名。tcp:
1赞 tgdavies 11/12/2023
我读 learn.microsoft.com/en-us/azure/azure-sql/database/...
0赞 tgdavies 11/12/2023
它给出了 JDBC URL 的开头,因此很明显其中没有。jdbc:sqlserver://$AZ_DATABASE_NAME.database.windows.net:1433;tcp:
0赞 mattsmith5 11/17/2023
@tgdavies随意写答案,我可以发积分,谢谢——

答:

1赞 Bhavani 12/1/2023 #1

与主机 tcp:food-server.database.windows.net 端口 1433 的 TCP/IP 连接失败。错误:“tcp:food-server.database.windows.net。验证连接属性。确保 SQL Server 实例正在主机上运行,并在端口上接受 TCP/IP 连接。确保与端口的 TCP 连接未被防火墙阻止。

正如@tgdavies所评论的,您提供的 URL 格式不正确,这可能是您收到此错误的原因。“tcp:应删除主机名中的”URL。您可以按以下格式提供 URL:

spring.datasource.url= jdbc:sqlserver://<serverName>.database.windows.net,1433;encrypt=true;trustServerCertificate=true;databaseName=<databaseName>

通过执行此操作,您应该能够成功连接到数据库。有关详细信息,可以参考 MS 文档,了解如何准备配置文件以连接到 Azure SQL 数据库。

评论

0赞 mattsmith5 12/1/2023
请加上“tcp:在您的主机名中应该删除”,我会发送积分,谢谢
0赞 Bhavani 12/1/2023
@mattsmith5我更新了我的答案。
0赞 mattsmith5 12/2/2023
给分,谢谢,也请随时对我的问题投赞成票