Я в настоящее время с помощью подключения к бассейну (Hikari) и абстрактной модели фабрики реализовать свои запросы MySQL в Java, как это:Абстрактный узор завод и HikariCP
MySqlFactoryDAO.java
public class MySqlFactoryDAO extends FactoryDAO {
private static HikariDataSource connPool_;
public static Connection createConnection() throws SQLException {
if (connPool_ == null) {
// Load database configuration
PropertiesFile props = FactoryConfig.getConfig().getDatabaseProperties();
connPool_ = new HikariDataSource();
connPool_.setJdbcUrl(props.getString(Params.DB_URL,""));
connPool_.setUsername(props.getString(Params.DB_USER,"root"));
connPool_.setPassword(props.getString(Params.DB_PASSWORD,"root"));
}
return connPool_.getConnection();
}
//-------------------------------------------------------------------------
public ProductDAO getProductDAO() {
return new ProductMySQLFactoryDAO();
}
}
ProductMySQLFactoryDAO. Java
public class ProductMySQLFactoryDAO implements ProductDAO {
public int insertProduct(String name) {
...
Connection conn = MySqlFactoryDAO.createConnection();
...
}
}
Мне было интересно, если этот код потокобезопасный, и я думаю, что есть проблема в момент инициализации coonPool_
. Я читал такие вещи, как «Initialization-on-demand_holder_idiom» в википедии, но я не уверен в этом. Кто-нибудь лучше реализует это для решения этой проблемы или просто лучше нового?
Да, он должен быть закрытым, я копирую его неправильно. Я думал о синхронизированном методе, но он считает, что синхронизация здесь значительно снижает производительность. – amarincolas