Пользователь уже имеет более активных подключений, чем «max_user_connections», используя HikariCP.

Я пытаюсь использовать 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 :( ! Спасибо!


person Deewens    schedule 26.10.2020    source источник
comment
Ошибка из БД. На сервере mysql проверьте максимальное количество соединений для каждого пользователя. См. - stackoverflow.com/a/60434390/4158037. В вашем hikari CP похоже, что вы не настроили maxPoolSize. Таким образом, будет принято значение по умолчанию 10. Вам необходимо убедиться, что этот maxPoolSize hikari равен ‹= максимальному соединению на пользователя в БД.   -  person Prasanna    schedule 27.10.2020
comment
Спасибо теперь работает! (Извините за задержку)   -  person Deewens    schedule 14.11.2020