■概要
本ナレッジでは、MySQL8.xとConnector /J 8の組み合わせを利用する場合の手順を説明します。
Tomcat構築作業手順書では、MySQL5.xとMySQL Connector /J 5の組み合わせを想定して設定が記載されています。
※ご利用にはBizRobo! PORTALのアカウントが必要です。詳しくはこちらを参照くださいますようお願い致します。
そのため、MySQL8.xを使用する場合や、MySQL Connector /J 8を使用する場合、記載されている内容と一部設定が異なります。
MySQL8.xとConnector /J 5の組み合わせを利用する場合は各項目に記載している※に注意して設定してください。
MySQLとMySQL Connector の互換性に関しては以下をご確認下さい。
<外部参考URL>
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html
■注意事項
既存のTomcat環境(MySQL5.x)で本手順を実施する場合、事前に以下のバックアップ作業を実施してください。
・MCのバックアップ
参考資料:MCのバックアップを作成/復元する方法
・編集対象となるmc.xml等のバックアップ
DB連携で必要なパラメタはDB側の設定等によっても異なる場合がございます。
このため、以下記載の設定内容はあくまで一例となります旨は予めご了承ください。
■前提
Tomcat構築作業手順書を基に、本ナレッジは使用するMySQLのバージョンがV8.0を前提として記載します。
■作業手順
基本的な作業の流れはTomcat構築作業手順書の通りとなります。
尚、Tomcat構築作業手順書を基に、以下に記載した修正事項を実施くださいますようお願い致します。
1、設定ファイルについて
mc.xmlについては変更が必要となりますので、以下の通りの変更内容を記載します。
①XML要素の「Resource 」>「driverClassName」
※Connector /J 8を利用する場合のみ変更が必要です。
Connector /J 5を利用する場合はTomcat構築作業手順書通りに指定してください。
driverClassName="com.mysql.cj.jdbc.Driver"
②XML要素の「Resource 」>「URL」
※serverTimezoneの指定が必要なのは、Connector /J 8を使用する場合のみです。
Connector /J 5を使用する場合は、serverTimezoneの指定をする必要はありません。
Tomcat構築作業手順書に記載されている設定に、allowPublicKeyRetrieval=trueのみ追加してください。
url="jdbc:mysql://{DBサーバホスト名orIPアドレス}:{DB接続ポート番号}/{リポジトリDB名}?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&useCursorFetch=true&defaultFetchSize=1000&serverTimezone=GMT%2B9&allowPublicKeyRetrieval=true
※{〇〇〇}部分の内容は、環境に合わせて適宜変更をお願いいたします。
設定後の動作確認
mc.xmlファイルを修正後、Tomcatサービスを再起動し、以下MCのログイン画面が正しく表示できることを確認くださいますようお願い致します。
http://localhost:8080/mc
※本Stepを実施しないと、Tomcat環境構築手順書の「9.設定ファイル設置・mc.warを展開」>「Step14」の http://localhost:8080/mc を開く際に、以下のエラーが発生する可能性があります。
localhost.2020-0X-XX.log
24-Apr-2020 13:43:49.674 重大 [http-nio-8080-exec-2] org.apache.catalina.session.StandardSession.tellNew セッションイベントリスナが例外を投げました
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'platformDataSource' defined in ServletContext resource [/WEB-INF/spring/common.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'createPlatformDataSource' threw exception; nested exception is java.lang.RuntimeException: Could not connect to the platform database (JNDI resource 'jdbc/kapow/platform') Please verify that you JNDI data source is configured correctly, and that your database server is started.
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:590)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1247)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:535)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:409)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
at com.kapowtech.scheduler.server.spring.SpringContextListener.contextInitialized(SpringContextListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4701)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:614)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1823)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'createPlatformDataSource' threw exception; nested exception is java.lang.RuntimeException: Could not connect to the platform database (JNDI resource 'jdbc/kapow/platform') Please verify that you JNDI data source is configured correctly, and that your database server is started.
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:582)
... 28 more
Caused by: java.lang.RuntimeException: Could not connect to the platform database (JNDI resource 'jdbc/kapow/platform') Please verify that you JNDI data source is configured correctly, and that your database server is started.
at com.kapowtech.scheduler.server.spring.ProductionDataSourceFactory.createPlatformDataSource(ProductionDataSourceFactory.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 29 more
2、MC上でのDB設定について
[管理]-[設定]-[データベースタイプ]-[MySql Database]ウィンドウでは以下の通りに設定くださいますようお願い致します。
①JDBC ドライバ
※Connector /J 8を利用する場合のみ変更が必要です。
Connector /J 5を利用する場合は変更する必要はありません。
com.mysql.cj.jdbc.Driver
②接続URLテンプレート
※serverTimezoneの指定が必要なのは、Connector /J 8を使用する場合のみです。
Connector /J 5を使用する場合は、serverTimezoneの指定をする必要はありません。
allowPublicKeyRetrieval=trueのみ追加してください。
jdbc:mysql://${ServerName}/${Schema}?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B9&allowPublicKeyRetrieval=true
設定後の動作確認
MC設定を変更後、[管理]-[RoboServer]-[任意のクラスタ・サーバー]-[データベース]-[MySql Database]ウィンドウでは、接続テストが成功することをご確認くださいますようお願い致します。
※MySQL8.0の場合、
・「allowPublicKeyRetrieval」の説明は以下にご参考ください。
https://dev.mysql.com/doc/connector-net/en/connector-net-8-0-connection-options.html
・「serverTimezone」を設定しないと、Tomcat環境構築手順書の「12.MCログ設定」>「5.DBの各種情報を入力したら、Testをクリック」を実施する際に、以下のエラーが発生する可能性があります。
エラーメッセージ
Error connecting to the database: The server time zone value '���� (�W����)' 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.
3,【11.1~のみ対象】Kappletについて
11.1以降のバージョンではKappletsがMCより独立している為、Kappletでも設定が必要となります。<Tomcatインストール先>\conf\Catalina\localhost\kapplets.xmlで次の変更が必要となります。
①「driverClassName」
※Connector /J 8を利用する場合のみ変更が必要です。
Connector /J 5を利用する場合は"com.mysql.jdbc.Driver"を指定します。
driverClassName="com.mysql.cj.jdbc.Driver"
②「URL」
※serverTimezoneの指定が必要なのは、Connector /J 8を使用する場合のみです。
Connector /J 5を使用する場合は、serverTimezoneの指定をする必要はありません。
以下を参考にallowPublicKeyRetrieval=true等を追加してください。
url="jdbc:mysql://{DBサーバホスト名orIPアドレス}:{DB接続ポート番号}/{リポジトリDB名}?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&useLegacyDatetimeCode=false&serverTimezone=GMT"/>
※{〇〇〇}部分の内容は、環境に合わせて適宜変更をお願いいたします。
③「"spring.jpa.database-platform"」
Connector /J 8を使用する場合は以下を指定します。
<Environment name="spring.jpa.database-platform"
value="org.hibernate.dialect.MySQL8Dialect"
Connector /J 5を使用する場合は以下を指定します。
<Environment name="spring.jpa.database-platform"
value="org.hibernate.dialect.MySQL55Dialect"
<Tomcatインストール先>\webapps\kapplets\WEB-INF\classes¥application.propertiesでは次の変更が必要となります。
Connector /J 8を使用する場合は以下を指定します。
spring.datasource.url=jdbc:mysql://{DBサーバホスト名orIPアドレス}:{DB接続ポート番号}/{リポジトリDB名}?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B9
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
Connector /J 5を使用する場合は以下を指定します。
spring.datasource.url=jdbc:mysql://{DBサーバホスト名orIPアドレス}:{DB接続ポート番号}/{リポジトリDB名}?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL55Dialect
allowPublicKeyRetrieval=trueの指定がない場合、次のようなエラーが発生する場合がございます。
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62):
■参考
別のデータベース(Microsoft SQL Server 或いは Oracle Database)をご利用の場合、以下のナレッジにご参考ください。
Tomcat環境でMicrosoft SQL Serverを使用した場合の設定について
Tomcat環境でOracle Databaseを使用した場合の設定
■確認Ver
区分 | 確認Ver |
手順 | 10.4.0.4 11.1.0.4 |