БД:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.27, for osx10.10 (x86_64) using EditLine wrapper
Spring Boot: 2.1.1.RELEASE
Ошибка:
2019-01-01 15:56:25.849 ERROR 39957 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.
> :bootRun
java.sql.SQLException: The server time zone value 'AEDT' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
Соответствующие части моего файла свойств:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/avmaint-local?useSSL=false&serverTimezone=UTC
spring.datasource.username=#####
spring.datasource.password=########
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
Что мне кажется странным, так это то, что ошибка указывает на то, что используемый часовой пояс - это AEDT, и тем не менее я указал UTC в spring.datasource.url. Читает ли Hikari что-нибудь еще при инициализации?
Это очень похоже на то, что Hikari игнорирует настройку часового пояса сервера в URL-адресе базы данных в пользу использования часового пояса моего собственного компьютера, который оказывается AEDT (Мельбурн, Австралия) - это нежелательное поведение. Я бы хотел, чтобы Хикари игнорировала часовой пояс моей машины. Кто-нибудь знает, как это сделать?






Установите useLegacyDatetimeCode false и установите ServerTimezone.
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/avmaint-local?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
Я использую mysql 8.0.16, не могу запустить приложение Spring Boot с жалобами на часовой пояс, поэтому я попробовал указанные выше настройки, и приложение запустилось.
Добавьте useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false в строку подключения:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/avmaint-local?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
Спасибо за ответы, но я нашел решение.
Как я и подозревал, Hikari игнорирует все, что вы помещаете в URL-адрес источника данных (извините, ребята, не имеет значения, что вы туда забиваете), по сути, он считывает настройку часового пояса из самого MySQL, то есть независимо от результата, который вы видите при выдаче команда
SELECT @@GLOBAL.time_zone;
в MySQL. В моем случае результатом была «СИСТЕМА», которая соответствует настройке моей локальной машины. Это был AEDT, который не поддерживается драйвером MySQL и, следовательно, мое исключение.
Выполнение того же запроса в AWS дало значение «UTC», которое поддерживается (и фактически то, что я хотел).
Поэтому мне пришлось установить часовой пояс на моем локальном сервере MySQL.
Во-первых, мне пришлось загрузить доступные часовые пояса с моего хоста (Mac OS X) в MySQL. Мне нужно было выяснить, где находится файл zoneinfo (в моем случае / usr / share / zoneinfo), затем выяснить, где находится утилита mysql_tzinfo_to_sql (каталог bin установки MySQL), и использовать ее для загрузки поддерживаемых часовых поясов моего локального компьютера. . В Mac OS X я выполнил команду:
/usr/local/mysql/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Затем в MySQL я мог запустить команду
SET GLOBAL time_zone = UTC;
этот является является допустимым часовым поясом и синхронизируется с облачными экземплярами.
Я думаю, что это настоящая ловушка для многих людей, использующих MySQL с Spring Boot. Он будет работать, пока люди находятся в поддерживаемых часовых поясах, но если ваша машина разработки переключится на неподдерживаемый часовой пояс, он загадочным образом сломается, я удивлен, что это нигде не задокументировано. Исходный код MySQL Connector / J делает это очевидным, но иначе вы бы этого не узнали.
Может быть, это потому, что MySQL только что появился 5 лет назад, а я старый ископаемый и, ну, ну, ну просто слезай с моей лужайки!
Я добавил следующую переменную в URL-адрес db под application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/db_name?serverTimezone=GMT-6
и Spring Boot теперь работает нормально.
Это сработало для меня. Я установил переменную в URL-адресе db как таковую в application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/db_name?serverTimezone=America/Los_Angeles
Это тот, который у меня сработал. Никогда не думал об использовании этого формата для указания часового пояса! Я использовал Australia/Melbourne
Отличный ответ, если кто-то хочет использовать нулевой часовой пояс, установите значение serverTimezone=Etc/UTC.
Установить useLegacyDatetimeCode false у меня работает. Спасибо..
spring.datasource.url: jdbc:mysql://localhost:3306/employee_directory?
useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
Вслед за Шоном мне хватило вот этого: spring.datasource.url = jdbc: mysql: // $ {MYSQL_HOST: localhost}: 3306 / ДЕМОС? serverTimezone = UTC
Другой способ - поместить в файл application.properties следующую строку:
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
Поставляется как опция в: https://www.baeldung.com/mysql-jdbc-timezone-spring-boot
Используя jdk 14, мне пришлось сделать это с моим application.properties
spring.jpa.properties.hibername.jdbc.time_zone=US/Michigan
изменить: форматирование
Я столкнулся с той же проблемой, но добавил
?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
после того, как ваше имя схемы исправило эту проблему для меня. Должно выглядеть примерно так
spring.datasource.url = jdbc:mysql://localhost:3306/my-schema-name?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
В настоящее время я использую MySQL v8, и мне это хорошо подходит.
Я использую MySQL 8 и решил этот вопрос, введя значение свойства user.timezone.
Использование Java 8 в моем проекте.
Соответствующие настройки в application.properties:
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.datasource.url=jdbc:mysql://localhost:3306/mudi?serverTimezone=${user.timezone}
Использование 2.3.4.RELEASE в качестве родительского проекта.
Используемые зависимости:
HTH,
ВБ ::
отличный материал ... из всех этих ответов мне больше всего нравится этот.
Пробовал 3 метода.
Я также пробовал устанавливать свойства через URL-адрес JDBC;
Ничего из вышеперечисленного не помогло мне. Я заметил, что самый маловероятный подозреваемый Джексон переопределял мой часовой пояс.
spring.jackson.time-zone=Asia/Colombo (The Answer)
Включите это в свой application.properties (этого достаточно)
Проверено при загрузке Spring - 2.1.5.RELEASE, MYSQL8.
спасибо, но я уже пробовал - никакого эффекта. Как я уже упоминал, я не думаю, что Хикари смотрит на строку подключения для настроек часового пояса. Кроме того, я думаю, что обходной путь
useLegacyDatetimeCodeв основном предназначен для Hibernate (который я не использую)