Nuestros mejores desarrolladores agotaron sus reservas de café, en su búsqueda todo el tiempo por la resolución, hasta que Raúl halló la respuesta en GitLab por lo tanto en este momento la compartimos con nosotros.
Solución:
Establecer useLegacyDatetimeCode
false y configure ServerTimezone.
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/avmaint-local?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
Esto funcionó para mí. Configuré la variable en la URL de db como tal en application.properties
:
spring.datasource.url=jdbc:mysql://localhost:3306/db_name?serverTimezone=America/Los_Angeles
Gracias por sus respuestas, pero he encontrado la solución.
Como sospechaba, Hikari ignora todo lo que pones en la URL de la fuente de datos (lo siento chicos, no importa lo que arrojes allí), esencialmente, lee la configuración de la zona horaria de MySQL, es decir, cualquiera que sea el resultado que veas al emitir El comando
SELECT @@GLOBAL.time_zone;
en MySQL. En mi caso, el resultado fue “SISTEMA”, que es cualquiera que sea mi máquina local en la que se configuró. Este fue AEDT, que no es compatible con el controlador MySQL y, por lo tanto, mi excepción.
Ejecutar esta misma consulta en AWS produjo el valor “UTC”, que es compatible (y, en realidad, lo que quería).
Por lo tanto, tuve que configurar la zona horaria en mi servidor MySQL local.
En primer lugar, tuve que cargar las zonas horarias disponibles de mi host (Mac OS X) en MySQL. Tenía que averiguar dónde estaba el archivo zoneinfo (/usr/share/zoneinfo en mi caso) y luego averiguar dónde estaba la utilidad `mysql_tzinfo_to_sql’ (directorio bin de la instalación de MySQL) y usarla para cargar las zonas horarias admitidas por mi máquina local . En Mac OS X, terminé ejecutando el comando:
/usr/local/mysql/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Entonces en MySQL podría ejecutar el comando
SET GLOBAL time_zone = UTC;
este es una zona horaria válida y está sincronizada con las instancias basadas en la nube.
Creo que esto es una verdadera trampa para mucha gente que usa MySQL con Spring Boot. Funcionará mientras las personas estén en zonas horarias compatibles, pero si su máquina de desarrollo cambia a una zona horaria no compatible, se romperá misteriosamente, me sorprende que no esté documentado en ninguna parte. El código fuente de MySQL Connector/J lo hace obvio, pero no lo sabrías de otra manera.
Tal vez sea porque MySQL es tan solo hace 5 años, y yo soy un viejo fósil y, bueno, ¡salgan de mi césped!