web-dev-qa-db-de.com

Der Serverzeitzonenwert 'AEST' wurde als eine Zeitzone erkannt

Ich versuche, eine einfache Anwendung für den Ruhezustand einzurichten. Wenn ich sie ausführe, erhalte ich eine Stapelverfolgung mit Fehlern.

Ich habe die folgenden Maven-Abhängigkeiten in meiner pom.xml-Datei:

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.0.Final</version>
    </dependency>
    <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-Java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-Java</artifactId>
        <version>6.0.2</version>
    </dependency>

Und die MySQL-Version, die ich lokal verwende, ist:

5.7.9, for osx10.11 (x86_64)

Ich laufe, wie es scheint, eine sehr einfache Methode und bekomme immer noch Fehler:

// create session factory
SessionFactory factory = new Configuration()
            .configure("hibernate.cfg.xml")
            .addAnnotatedClass(Model.class)
            .buildSessionFactory();

// create session
Session session = factory.getCurrentSession();

Model newModel = new Model("....", "...", "...");

// start a transaction
session.beginTransaction();

// save the student object
System.out.println("Saving the model...");
session.save(newModel);

Nachdem der obige Vorgang ausgeführt wurde, erhalte ich eine lange Stapelspur ... Das System.out.println druckt auch nicht ... Die Verbindung scheint also einfach nicht zu sein.

INFO: HHH000115: Hibernate connection pool size: 1 (min=1)
Thu Jun 09 17:36:28 EST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.Java:244)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:208)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:189)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.Java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:189)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.Java:352)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.Java:111)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.Java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.Java:418)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.Java:87)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:691)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:723)
    at com.parkingapi.tests.Test.main(Test.Java:17)
Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.Java:105)
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.Java:123)
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.Java:41)
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.Java:58)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.addConnections(PooledConnections.Java:106)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.Java:40)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.Java:19)
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections$Builder.build(PooledConnections.Java:138)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.Java:110)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.Java:74)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:189)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.Java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.Java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.Java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.Java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.Java:234)
    ... 14 more
Caused by: Java.sql.SQLException: The server time zone value 'AEST' 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.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.Java:695)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.Java:663)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.Java:653)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.Java:638)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.Java:606)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.Java:624)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.Java:620)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.Java:68)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:1683)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:656)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:349)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:221)
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.Java:38)
    ... 29 more
Caused by: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value 'AEST' 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.
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:408)
    at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.Java:54)
    at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.Java:73)
    at com.mysql.cj.jdbc.util.TimeUtil.getCanonicalTimezone(TimeUtil.Java:118)
    at com.mysql.cj.mysqla.MysqlaSession.configureTimezone(MysqlaSession.Java:308)
    at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.Java:2474)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.Java:1817)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:1673)
    ... 33 more

Ich konzentriere mich hier auf diesen Fehler:

Der Serverzeitzonenwert 'AEST' wurde nicht erkannt oder stellt mehr .__ dar. als eine Zeitzone. Sie müssen entweder den Server oder JDBC .__ konfigurieren. Treiber (über die Konfigurationseigenschaft serverTimezone), um eine weitere Spezifizierter Zeitzonenwert, wenn Sie die Zeitzonenunterstützung nutzen möchten.

Ich bin nicht sicher, wie ich das Problem beheben kann.

Bearbeiten:

Drucken der Zeitzone (System.out.println (TimeZone.getDefault ());) druckt die folgenden Details:

Sun.util.calendar.ZoneInfo [id = "Australia/Melbourne", offset = 36000000, dstSavings = 3600000, useDaylight = true, Übergänge = 142, lastRule = Java.util.SimpleTimeZone [id = Australia/Melbourne, offset = 36000000, dstSavings = 3600000, useDaylight = true, startYear = 0, startMode = 3, startMonth = 9, startDay = 1, startDayOfWeek = 1, startTime = 7200000, startTimeMode = 1, endMode = 3, endDayOfWe 1, endTime = 7200000, endTimeMode = 1]]

Bearbeiten:

Also schaute ich auf die Frage, die markiert wurde, und versuchte, meine Verbindungszeichenfolge zu ändern, aber sie wirft immer noch die gleiche Stapelverfolgung. Unten ist meine neue Verbindungs-URL. Wie Sie sehen, habe ich die Server-Zeitzone in die der gedruckten Timezone.getDefault() geändert

jdbc:mysql://localhost:3306/parking_hib?useLegacyDatetimeCode=false;serverTimezone=Australia/Melbourne;useSSL=false;
20
James111

Es stellte sich heraus, dass 6.x nicht kompatibel war und zu 5.1.39 verschoben wurde.

24
James111

versuchen Sie, diese Parameter hinzuzufügen ..

jdbc:mysql://localhost:3306/fussa?useLegacyDatetimeCode=false&serverTimezone=UTC

ich verwende mysql-connector-Java 6.0.4

24
FuSsA

Die richtige Lösung, IMHO für AEDT, besteht darin, die URL wie folgt zu ändern:

jdbc:mysql://localhost:3306/sampledb?serverTimezone=Australia/Sydney
8
Gunith D
jdbc:mysql://localhost:3306/fussa?useLegacyDatetimeCode=false&amp;serverTimezone=UTC

Verwenden Sie &amp; anstelle von &.

Sie können auch versuchen, die Zeitzone auf mysql zu ändern:

SET GLOBAL time_zone = '00:00'; 

Und die aktuelle Einstellung sehen:

SELECT @@global.time_zone, @@session.time_zone;
3
user2087635

Dies ist das Problem der Version von MySQLWorkbench. Aktualisieren Sie auf die neueste Version 8.0 und fügen Sie serverTimezone = UTC in Ihre jdbc-URL ein.

String url = "jdbc: mysql: // localhost: 3306/your_db? UseSSL = false & serverTimezone = UTC";

2
2rahulsk

Die Ausnahme wird ausgelöst, da die Zeitzone des MySQL-Servers (von der Systemzeitzone geerbt) ein anderes Format hat als das, was der MySQL-Connector erwartet. Sie müssen die MySql-Zeitzone auf "Australia/Sydney" einstellen. Sehen Sie sich diese großartige Antwort an, um Einzelheiten zu erfahren: Sollte die Zeitzone von MySQL auf UTC eingestellt sein?

  • füllen Sie das Mysql-Schema mit den Zeitzoneninformationen:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

  • von mysql run:

SET GLOBAL time_zone = 'Australia/Sydney';

  • starten Sie den MySQL-Server neu
2
gabi.m

Standardeinstellung verwenden  

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/web_student_tracker?user=root&password=&useLegacyDatetimeCode=false&serverTimezone=UTC");
1
antelove

build.gradle>

compile group: 'mysql', name: 'mysql-connector-Java', version: '8.0.11'

application.properties>

spring.datasource.url=jdbc:mysql://localhost:3306/bookworm?useLegacyDatetimeCode=false&serverTimezone=UTC

-

 mysql --version
 mysql  Ver 8.0.11 for osx10.13 on x86_64 (Homebrew)

Diese Kombination funktioniert für mich.

1
catch22

Hallo, Sie müssen in Ihrem URL-Bezeichner wie unten angeben

 @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/jpahibernate?useLegacyDatetimeCode=false&serverTimezone=UTC");
        dataSource.setUsername("root");
        dataSource.setPassword("Password");
        return dataSource;
    }

Sehen Sie sich im obigen Codefragment die Eigenschaft setUrl an

0
Darshan