#java #mysql #jdbc #c3p0
#java #mysql #jdbc #c3p0
Вопрос:
У меня есть простое приложение JDBC (не использующее Spring или Hibernate), которое подключается к MySQL. В рабочей среде соединение MySQL использует SSL, но оно не использует SSL в режиме разработки. В режиме разработки я добавил "amp;useSSL=false"
URL-адрес базы данных, чтобы предотвратить заполнение моих файлов журналов предупреждением MySQL «Установление SSL-соединения без проверки подлинности сервера не рекомендуется».
Теперь я добавляю пул подключений к базе данных, используя C3P0. Вместо получения соединения от DriverManager.getConnection
, я получаю соединение от C3P0, вызывая POOL.getConnection()
.
Код, который устанавливает C3P0, довольно прост:
POOL = new ComboPooledDataSource();
POOL.setDriverClass("com.mysql.cj.jdbc.Driver");
POOL.setJdbcUrl(DB_URL);
POOL.setUser(USER);
POOL.setPassword(PASSWORD);
Проблема в том, что это не работает. Если строка DB_URL содержит "amp;useSSL=false"
, то POOL.getConnection()
зависает. Я удалился "amp;useSSL=false"
из DB_URL
, и все работает нормально, за исключением того, что теперь я получаю предупреждения MySQL SSL.
Может кто-нибудь посоветовать мне, как правильно настроить C3P0, чтобы я больше не получал предупреждения MySQL SSL?
Комментарии:
1. Используете ли вы тот же драйвер в старой ситуации? c3p0 также вызывает
DriverManager.getConnection
; так что, если один работает, другой тоже должен. Рассмотрите возможность публикации вашего старого кода.2. Отметьте — драйвер один и тот же («com.mysql.cj.jdbc.Driver») в обоих случаях.
Ответ №1:
Соединения JDBC автоматически собирают предупреждения, которые необходимо активно проверять, чтобы их можно было увидеть. Большинство приложений никогда не проверяют их. c3p0 проверяет. Всякий раз, когда соединение возвращается, c3p0 проверяет, регистрирует и удаляет предупреждения о соединении, прежде чем снова сделать соединение доступным в пуле.
Если ведение журнала предупреждений вас раздражает, просто настройте свою библиотеку ведения журнала для их фильтрации. Все предупреждения регистрируются в INFO вызываемому регистратору com.mchange.v2.c3p0.SQLWarnings
. Просто настройте любую библиотеку ведения журнала, которую вы используете, чтобы не регистрировать `com.mchange.v2.c3p0.SQLWarnings или фильтровать его до более высокого уровня серьезности, чем INFO.
См. SQLWarnings .
Комментарии:
1. Это не совсем соответствует описанию проблемы, что «POOL.getConnection() зависает»
2. Это только в том случае, если poster предоставляет параметр подключения
amp;useSSL=false
, который, похоже, его СУБД не поддерживает. Если он использует SSL, т.Е. Если он пропускаетamp;useSSL=false
, то ему удается получить соединения, но получает предупреждение о том, что SSL-соединение относится к непроверяемому идентификатору. Очевидно, что лучше всего было бы настроить SSL с проверяемыми сертификатами, чтобы обеспечить безопасную, проверенную идентификацию. Но если пользователь не беспокоится об атаках типа «человек посередине» и просто хочет, чтобы предупреждения исчезли, их отключение при протоколировании сработает.