web-dev-qa-db-ja.com

サーバーのタイムゾーン値「AEST」が認識されないか、複数のタイムゾーンを表します

単純な休止状態のアプリケーションをセットアップしようとしていますが、それを実行するとスタックトレースにエラーがいっぱいになります。

pom.xmlファイルに次のMaven依存関係があります。

<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>

そして、ローカルで実行しているmysqlバージョンは次のとおりです。

5.7.9, for osx10.11 (x86_64)

私は実行しているようですが、非常に簡単な方法ですが、まだエラーが発生しています:

// 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);

上記の実行後、長いスタックトレースが取得されます... System.out.printlnも印刷されません...したがって、接続が接続されていないようです。

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

私はここでこのエラーに焦点を当てています:

サーバーのタイムゾーン値「AEST」が認識されないか、複数のタイムゾーンを表します。タイムゾーンサポートを利用する場合は、サーバーまたはJDBCドライバーを(serverTimezone構成プロパティを介して)構成して、より具体的なタイムゾーン値を使用する必要があります。

どのように修正したらいいのか分かりませんか?

編集:

タイムゾーン(System.out.println(TimeZone.getDefault());)を印刷すると、次の詳細が印刷されます。

Sun.util.calendar.ZoneInfo [id = "Australia/Melbourne"、offset = 36000000、dstSavings = 3600000、useDaylight = true、transitions = 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、endMonth = 3、endDay = 1、endDayOfWeek = 1、endTime = 7200000、endTimeMode = 1]]

編集:

そこで、フラグが付けられた質問を見て、接続文字列を変更しようとしましたが、それでも同じスタックトレースがスローされています。以下は私の新しい接続URLです。ご覧のとおり、serverTimezoneを印刷されたTimezone.getDefault()に変更しました

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

6.xは互換性がなかったため、5.1.39に移動すると修正されました。

25
James111

これらのパラメーターを追加してみてください。

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

私はmysql-connector-Java 6.0.4を使用しています

54
FuSsA

適切な解決策であるAEDTのIMHOは、次のようにURLを変更することです。

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

&amp;の代わりに&を使用します。

Mysqlのタイムゾーンも変更してみてください:

SET GLOBAL time_zone = '00:00'; 

現在の設定を確認します。

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

MySqlサーバーのタイムゾーン(システムのタイムゾーンから継承)がmysqlコネクターが予期するものとは異なる形式であるため、例外がスローされます。 MySqlタイムゾーンを「オーストラリア/シドニー」に設定する必要があります。詳細については、この素晴らしいレスポンスをご覧ください: MySQLのタイムゾーンをUTCに設定する必要がありますか?

  • mysqlスキーマにタイムゾーン情報を入力します。

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

  • mysqlから実行:

SET GLOBAL time_zone = 'Australia/Sydney';

  • mysqlサーバーを再起動します
4
gabi.m

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)

この組み合わせは私に適しています。

2
catch22

これは、MySQLWorkbenchのバージョンの問題です。 8.0である最新バージョンにアップグレードしてから、jdbc URLにserverTimezone = UTCを追加します。

文字列url = "jdbc:mysql:// localhost:3306/your_db?useSSL = false&serverTimezone = UTC";

2
2rahulsk

デフォルトを使用

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

こんにちは、次のようなURL指定子を指定する必要があります

 @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;
    }

上記のコードスニペットでは、setUrlプロパティを確認します。

0
Darshan