HikariCP本身是线程安全的。据我了解,您正在尝试做的是阻止调用者通过方法初始化
getConnection()之前的。大概您还想防止多次调用数据源。
HikariDataSource``init()``init()
getConnection()通常,对于池吞吐量而言,使用同步包装是一个坏主意。根据上面的代码,我建议使用以下模式:
public class ConnectionProviderHikariCP implements IConnectionProvider { private static final ConnectionProviderHikariCP INSTANCE; private final HikariDataSource hikariDataSource; private AtomicBoolean initialized; //class initializer: static { INSTANCE = new ConnectionProviderHikariCP(); } private ConnectionProviderHikariCP() { hikariDataSource = new HikariDataSource(); initialized = new AtomicInteger(); } public static ConnectionProviderHikariCP getInstance() { return INSTANCE; } @Override public void init(String jdbcUrl, String user, String password) { if (initialized.compareAndSet(false, true)) { hikariDataSource.setJdbcUrl(jdbcUrl); hikariDataSource.setUsername(user); hikariDataSource.setPassword(password); } else { throw new IllegalStateException("Connection provider already initialized."); } } @Override public Connection getConnection() throws SQLException { if (initialized.get()) { return hikariDataSource.getConnection(); } throw new UnsupportedOperationException("Debe inicializar mediante el método Init() primero!!!!!."); }}


