- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类,看起来像这样:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class ConnectionPool {
private HikariDataSource hds;
private final String propertyFileName;
public ConnectionPool(String propertyFileName) {
if (propertyFileName == null) {
throw new IllegalArgumentException("propertyFileName can't be null");
}
this.propertyFileName = propertyFileName;
reloadFile();
}
public void reloadFile() {
if (hds != null) {
hds.close();
}
hds = new HikariDataSource(new HikariConfig(propertyFileName));
}
public HikariDataSource getHikariDataSource() {
return hds;
}
public String getPropertyFileName() {
return propertyFileName;
}
public void executeQuery(final String sql, final CallBack<ResultSet, SQLException> callBack) {
new Thread(new Runnable() {
@Override
public void run() {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = hds.getConnection();
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
callBack.call(resultSet, null);
} catch (SQLException e) {
callBack.call(null, e);
} finally {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException ignored) {}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException ignored) {}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException ignored) {}
}
}
}
}).start();
}
public void executeUpdate(final String sql, final CallBack<Integer, SQLException> callBack) {
//TODO
}
public void execute(final String sql, final CallBack<Boolean, SQLException> callBack) {
//TODO
}
public void connection(final String sql, final CallBack<Connection, SQLException> callBack) {
//TODO
}
}
问题在于,当使用 hds
时,可以从不同的线程调用 reloadFile()
方法。因此,当我在另一个线程中使用 hds 的连接对象时,它可能会关闭。解决这个问题的最佳方法是什么?创建新的 HikariDataSource
对象后,我是否应该等待几秒钟再关闭旧的对象(直到查询完成)?
编辑:另一个问题:hds
是否应该是 volatile
,以便 hds
的更改对所有线程都可见?
最佳答案
非常快速、简短地查看了 HikariDataSource
中的源代码。在其 close()
中,它调用其内部 HikariPool
的 shutdown()
方法,为此它将尝试正确关闭池化池连接。
如果您想避免正在进行的连接被强制关闭,一种方法是使用 ReadWriteLock
:
public class ConnectionPool {
private HikariDataSource hds;
private ReentrantReadWriteLock dsLock = ....;
//....
public void reloadFile() {
dsLock.writeLock().lock();
try {
if (hds != null) {
hds.close();
}
hds = new HikariDataSource(new HikariConfig(propertyFileName));
} finally {
dsLock.writeLock().unlock();
}
}
public void executeQuery(final String sql, final CallBack<ResultSet, SQLException> callBack) {
new Thread(new Runnable() {
@Override
public void run() {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
dsLock.readLock().lock();
try {
connection = hds.getConnection();
// ....
} catch (SQLException e) {
callBack.call(null, e);
} finally {
// your other cleanups
dsLock.readLock().unlock();
}
}
}).start();
}
//....
}
这将确保
关于Java:与 HikariDataSource 对象的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35005139/
Exception in thread "task-2" org.springframework.jdbc.datasource.init.UncategorizedScriptException:
我试图弄清楚当前打开了多少个连接,但我似乎找不到使用 Hikari 的明显方法。 HikariPool公开该信息( getActiveConnections ),但我没有看到从 HikariDataS
我有一个类,看起来像这样: import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultS
我将在我的 WEB 应用程序中使用 HikariCP 而不是 c3p0。好像, super 棒但对我来说,HikariCP 接口(interface)中仍然存在有问题的地方。它包含两个类 - Hika
嗨,我有一个奇怪的问题,我使用 Oracle db 并拥有带有简单端点的 miroservice,该端点只有 getById,速度极快 3-15 毫秒,但整个操作花费了 250 毫秒。我深入研究我们的
我想在新项目中使用 Spring Data JPA。我基本上遵循https://spring.io/guides/gs/accessing-data-jpa/中描述的设置. 当我启动应用程序或开始单个
当我使用 HikariDataSource 启动 JBOSS AS 6.1 时出现链接错误。如何解决? 我使用 hikariCP 1.3.3: com.zaxxer Hika
我是存储过程的新手,我正在尝试通过 this stored procedure tutorial. 来创建我的第一个存储过程。 在本教程中,他们使用 EmbeddedDatabaseBuilder 对
我在(Java8 + Oauth2 + MySql + Hazelcast +没有群集的http session )组合的生产方式下遇到错误。开发模式运行正常。 Unable to register
我在将 HikariCP 与 Spring 的 JdbcTemplate 集成时遇到错误。我正在使用 Spring 3.2.2、HikariCP 2.3.8 和 sybase jconn4 版本 7.
这是我使用 HikariDatasource 的 logback 配置: com.mysql.jdbc.Driver jd
我已经添加了 ojdbc ddriver 并将依赖项包含在 pom 中,但我仍然收到标题中提到的错误。请帮忙。 之前我使用本地 postgres 数据库运行了该应用程序。现在尝试连接远程oracle
我正在尝试使用 Spring Boot(STS) 创建一个 Web 应用程序,但我得到了 通过服务器运行时出现以下错误(JBoss) 12:01:24,091 INFO [stdout] (Serv
我该如何解决这个问题?哪个是最好的选择以及如何做到这一点 设置唯一的池名 销毁之前的连接池 org.apache.catalina.core.ApplicationContext.log Initia
我正在升级到 Spring Boot 2.0.1.RELEASE,使用带有 Eclipselink 作为我的提供程序和 Liquibase 的 Spring 数据 JPA。我在尝试启动服务器时遇到以下
我已经在 tomcat-8.5 中部署了我的 spring boot 应用程序。只要部署了一个 war 实例,它就可以正常工作,但是一旦我尝试部署同一 war 文件的下一个版本(我正在尝试在 tomc
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalin
当我尝试运行 Spring Boot 应用程序时出现以下错误。 Description: Failed to bind properties under '' to com.zaxxer.hikari
我是一名优秀的程序员,十分优秀!