gpt4 book ai didi

java - JDBC 模板表锁定问题

转载 作者:行者123 更新时间:2023-12-02 09:06:05 25 4
gpt4 key购买 nike

我正在使用 JDBC 模板插入/更新数据库表。我有以下数据源配置:

@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
SQLServerDataSource ds = new SQLServerDataSource();
ds.setUser("user name");
ds.setPassword("Password");
ds.setPortNumber(123);
ds.setDatabaseName("DB name");
ds.setServerName("Server");
ds.setEncrypt(true);
ds.setTrustServerCertificate(true);
dataSource.setAutoCommit(true);
dataSource.setMaximumPoolSize(size);
dataSource.setMinimumIdle(idle);
dataSource.setDataSource(ds);

return dataSource;
}

我的问题是表锁。我通过公开 API 端点来访问、插入和更新表 my_table。因此,当我第一次点击端点时,端点会在预期的表中插入三行。第一次点击后,接下来的另一次点击端点需要 2/3 分钟才能插入数据。在此期间,我什至无法使用 MS SQL 客户端应用程序访问我的 my_table

我认为这可能是因为开放提交,这就是我这样做的原因:

dataSource.setAutoCommit(true);

但运气不好。在第一个命中表被锁定一段时间后,所有其他后续命中或直接访问该数据库表花费的时间太长。

Java 应用程序在本地主机上完美运行,但在部署到 Azure(应用程序服务)后,我遇到了表锁定问题。我不确定它的表锁定问题或导致该表繁忙的原因。我使用的 MS SQL Server 也在云端。

注意:在我的 DAO 级别,我只是使用 jdbcTemplate.update() 来添加或编辑数据,在我的服务级别方法上,我使用 @Transactional

最佳答案

我创建了一个新项目并对其进行了测试,效果很好。您可以通过以下方式获取:DataSource

用户表:

enter image description here

我使用jdbcTemplate.update()来添加和更新用户,并且还在JdbcUserRepository上启用了@Transactional。但是,当我尝试添加用户时,表并未被阻止:

enter image description here

从屏幕截图中,您可以看到我发出了很多添加用户的 POST 请求,每个请求都立即得到了响应。

所以,我认为问题的根本原因可能仍然出在代码的逻辑部分。您能否分享更多代码以供进一步调查。

关于java - JDBC 模板表锁定问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59804863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com