Я пытаюсь использовать HikariCP для приложения Java EE для школы, но не понимаю, почему оно не работает должным образом. Я делаю API и использую сервер MySQL с сервером Payara для мое приложение.
Я могу вызвать свой API примерно 4 раза, прежде чем получу сообщение об ошибке: http://prntscr.com/v7eopd Единственный способ, который я нашел для решения, - это полностью перезапустить Payara Server (даже повторное развертывание не работает)
Я следовал документу HikariCP и настроил свой файл mysql.properties следующим образом:
jdbcUrl = jdbc:mysql://mysql.iutrs.unistra.fr/devservweb?serverTimezone=UTC&useLegacyDatetimeCode=false
dataSource.user = user
dataSource.password = pwd
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
dataSource.useLocalSessionState=true
dataSource.rewriteBatchedStatements=true
dataSource.cacheResultSetMetadata=true
dataSource.cacheServerConfiguration=true
dataSource.elideSetAutoCommits=true
dataSource.maintainTimeStats=false
Я сделал шаблон DAO, вот моя DAOFactory для MySQL
public class MySQLDAOFactory extends DAOFactory {
private static final String PROPERTIES_FILE = "mysql.properties";
public Connection getConnection() throws SQLException, DAOConfigurationException {
Properties properties = new Properties();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream propertiesFile = classLoader.getResourceAsStream(PROPERTIES_FILE);
if(propertiesFile == null) {
throw new DAOConfigurationException("File " + PROPERTIES_FILE + " not found");
}
try {
properties.load(propertiesFile);
} catch (IOException e) {
throw new DAOConfigurationException("MySQL properties file could not be loaded " + PROPERTIES_FILE, e);
}
HikariConfig config = new HikariConfig(properties);
config.setDriverClassName("com.mysql.cj.jdbc.Driver");
HikariDataSource ds = new HikariDataSource(config);
return ds.getConnection();
}
@Override
public FlightDAO getFlightDAO() {
return new MySQLFlightDAO(this);
}
@Override
public UserDAO getUserDao() {
return new MySQLUserDAO(this);
}
}
public abstract class DAOFactory {
public static DAOFactory getInstance(Persistence target) {
DAOFactory daoF = null;
switch (target) {
case MySQL:
daoF = new MySQLDAOFactory();
break;
}
return daoF;
}
public abstract FlightDAO getFlightDAO();
public abstract UserDAO getUserDao();
}
@Override
public User findByUsername(String username) throws DAOException {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
User user = null;
try {
connection = dao.getConnection();
preparedStatement = initPreparedStatement(connection,
"SELECT user_id, username, password " +
"FROM user " +
"WHERE username = ?",
false,
username);
resultSet = preparedStatement.executeQuery();
if(resultSet.next()) {
user = map(resultSet);
}
} catch(SQLException e) {
throw new DAOException(e);
} finally {
closes(resultSet, preparedStatement, connection); // I'm using connection.close, statement.close and resultset.close inside this method
}
return user;
Перед использованием HikariCP я использовал JDBC по умолчанию для подключения, и мой код работал правильно.
Я не могу найти, как это решить, потому что HikariCP управляет пулом автоматически...
Я спешу, потому что в конце недели мне нужно отправить его моему профессору, поэтому, если кто-то может мне помочь, я не нахожу никакой помощи в Google :( ! Спасибо!