teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

誤りを訂正、最小設定を追加

2019/01/23 09:35

投稿

退会済みユーザー
answer CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 解決策(提案)
2
2
  スタックトレースをもとにソースコードを調べましたが、かなり変更されているようで、該当の行番号を持つソースが見つかりませんでした。以下は解決策の提案です。playのプロパティ名を使う。
3
-
3
+ ~~打ち消し線~~
4
4
  ```
5
5
  default.driver = com.mysql.jdbc.Driver
6
6
  default.user = root
@@ -116,23 +116,23 @@
116
116
  }
117
117
  }
118
118
  ```
119
- db.defaultは省略できません。db.default.hikaricpがないと設定に失敗します。
119
+ db.defaultは省略できません。~~db.default.hikaricpがないと設定に失敗します。~~
120
120
 
121
121
  ### application.confの設定が正しく反映されない問題
122
- play-java-ebean-exampleを調査中に設定に関するエラーに遭遇しました。設定についてコメントします。
122
+ ~~play-java-ebean-exampleを調査中に設定に関するエラーに遭遇しました。設定についてコメントします。~~
123
123
 
124
- 以下のようにdb.default=“deafult”を設定しておき、defaultをオブジェクトとして設定しようとするとエラー。
124
+ ~~以下のようにdb.default=“deafult”を設定しておき、defaultをオブジェクトとして設定しようとするとエラー。~~
125
- またHikariCPのvalidate()で、jdbcUrlがnullになるなどのエラーが発生しました。
125
+ ~~またHikariCPのvalidate()で、jdbcUrlがnullになるなどのエラーが発生しました。~~
126
- ```
126
+ ~~``` ~~
127
- db {
127
+ ~~db { ~~
128
- default=“deafult”
128
+ ~~ default=“deafult”~~
129
- ...
129
+ ~~ ...~~
130
- deafult {
130
+ ~~ deafult { ~~
131
- url=
131
+ ~~ url= ~~
132
- ...
132
+ ~~ ...~~
133
- hikaricp {
133
+ ~~ hikaricp {~~
134
- jdbcUrl=
134
+ ~~ jdbcUrl=~~
135
- ```
135
+ ~~``` ~~
136
136
 
137
137
  **playの設定**
138
138
  playの設定は、HOCONフォーマットを使って、typesafe Config で管理しています。
@@ -149,26 +149,66 @@
149
149
 
150
150
  **解決のヒント**
151
151
  質問に、バージョンや設定ファイルの内容が全て添付されていないので、以下は推測になります。
152
+ - 代替設定を使用している可能性 (<--- 2019-01-23 に追加)
152
153
  - 設定値がオーバライドされている可能性。後に同じプロパティの設定があり値が’’/nullのものがある。
153
154
  - 設定方法が根本的に誤っている可能性。play-java-ebean-exampleの設定方法が誤っている。
154
155
  - 該当バージョンのplayの動作がバグを含んでいる。(この可能性は低いでしょう)
155
156
 
156
- これまでやってみて、うまくいったのは以下です。
157
+ ~~これまでやってみて、うまくいったのは以下です。~~
157
- - デフォルトの設定はすでにreference.confにあるので、設定全体を記述しないで、差分だけを記述する
158
+ ~~- デフォルトの設定はすでにreference.confにあるので、設定全体を記述しないで、差分だけを記述する~~
158
- (デフォルト設定のreference.confは、playのjarの中にあると書かれています)
159
+ ~~(デフォルト設定のreference.confは、playのjarの中にあると書かれています)~~
159
- - 差分は完全修飾名を使って記述する
160
+ ~~- 差分は完全修飾名を使って記述する~~
160
161
 
161
- 例えば、以下のように全体を記述しない。この記述方法だと必須項目チェックが行われ、playの設定全体、dbの設定全体を再定義しなければならないのではないかと考えます。
162
+ ~~例えば、以下のように全体を記述しない。この記述方法だと必須項目チェックが行われ、playの設定全体、dbの設定全体を再定義しなければならないのではないかと考えます。~~
162
- ```
163
+ ~~``` ~~
163
- play {
164
+ ~~play {~~
165
+ ~~ db {~~
166
+ ~~ }~~
167
+ ~~}~~
168
+ ~~```~~
169
+
170
+ ~~代わりにできるだけ完全修飾名を使って差分のみを記述する。~~
171
+ ~~``` ~~
172
+ ~~db.default.url=~~
173
+ ~~```~~
174
+
175
+ 再び、試行錯誤をお願いすることになり申し訳ありません。差分を試してみてもうまくいかないなら、この質問はオープンにしておき、application.confの設定について新たに質問してはいかがでしょうか。
176
+
177
+ ### play-java-ebean-example 最小設定
178
+ 資料を調べて、動作を試した結果、最小設定は以下で良いことがわかりました。
179
+
180
+ ``` conf
181
+ ## 追加 mysqlに接続するには以下の4行があれば良い。
164
- db {
182
+ db {
183
+ default.driver=com.mysql.cj.jdbc.Driver
184
+ default.username=rootuser
185
+ default.password=nfgwe4706
186
+ default.url="jdbc:mysql://10.0.1.2:3306/sample_db"
187
+ }
188
+ ## 追加 evolutionが実行されるのを抑制
189
+ evolutions {
190
+ enabled=false
191
+ db.default.enabled=false
192
+ }
193
+ ## 以下はダウンロードしたオリジナルのapplication.confに含まれていた内容
194
+ ## (dispatcher の設定がないと実行エラー)
195
+ ebean.default="models.*"
196
+ "assets.cache./public/stylesheets/bootstrap.min.css"="max-age=3600"
197
+ ## オリジナルのfixedConnectionPool 7 -> 2 に変更
198
+ fixedConnectionPool=2
199
+ play.db {
200
+ prototype {
201
+ hikaricp.minimumIdle = ${fixedConnectionPool}
202
+ hikaricp.maximumPoolSize = ${fixedConnectionPool}
165
203
  }
166
204
  }
205
+ database.dispatcher {
206
+ type=Dispatcher
207
+ executor="thread-pool-executor"
208
+ throughput=1
209
+ thread-pool-executor {
210
+ fixed-pool-size = ${fixedConnectionPool}
211
+ }
212
+ }
167
213
  ```
168
-
169
- 代わりるだけ完全修飾名を使って差分のみを記述
214
+ 「上記の4行があればmysql接続可能」とします。続は新しいQ&Aに書きます。
170
- ```
171
- db.default.url=
172
- ```
173
-
174
- 再び、試行錯誤をお願いすることになり申し訳ありません。差分を試してみてもうまくいかないなら、この質問はオープンにしておき、application.confの設定について新たに質問してはいかがでしょうか。

3

設定について追記

2019/01/23 09:35

投稿

退会済みユーザー
answer CHANGED
@@ -116,4 +116,59 @@
116
116
  }
117
117
  }
118
118
  ```
119
- db.defaultは省略できません。db.default.hikaricpがないと設定に失敗します。
119
+ db.defaultは省略できません。db.default.hikaricpがないと設定に失敗します。
120
+
121
+ ### application.confの設定が正しく反映されない問題
122
+ play-java-ebean-exampleを調査中に設定に関するエラーに遭遇しました。設定についてコメントします。
123
+
124
+ 以下のようにdb.default=“deafult”を設定しておき、defaultをオブジェクトとして設定しようとするとエラー。
125
+ またHikariCPのvalidate()で、jdbcUrlがnullになるなどのエラーが発生しました。
126
+ ```
127
+ db {
128
+ default=“deafult”
129
+ ...
130
+ deafult {
131
+ url=
132
+ ...
133
+ hikaricp {
134
+ jdbcUrl=
135
+ ```
136
+
137
+ **playの設定**
138
+ playの設定は、HOCONフォーマットを使って、typesafe Config で管理しています。
139
+
140
+ typesafe Configは以下にあります。
141
+ https://github.com/lightbend/config
142
+ withFallbackを使うと、前に設定された値を優先させることができる。
143
+ Javaのシステムプロパティ、application.conf、reference.confは、左が優先する。
144
+
145
+ HOCONフォーマットの説明は以下です。
146
+ https://www.playframework.com/documentation/ja/2.1.x/Configuration
147
+ https://github.com/lightbend/config/blob/master/HOCON.md
148
+ ファイルに同じプロパティ設定があるならオーバーライドまたはマージしてくれる。「重複したキー」を参照してください。
149
+
150
+ **解決のヒント**
151
+ 質問に、バージョンや設定ファイルの内容が全て添付されていないので、以下は推測になります。
152
+ - 設定値がオーバライドされている可能性。後に同じプロパティの設定があり値が’’/nullのものがある。
153
+ - 設定方法が根本的に誤っている可能性。play-java-ebean-exampleの設定方法が誤っている。
154
+ - 該当バージョンのplayの動作がバグを含んでいる。(この可能性は低いでしょう)
155
+
156
+ これまでやってみて、うまくいったのは以下です。
157
+ - デフォルトの設定はすでにreference.confにあるので、設定全体を記述しないで、差分だけを記述する
158
+ (デフォルト設定のreference.confは、playのjarの中にあると書かれています)
159
+ - 差分は完全修飾名を使って記述する
160
+
161
+ 例えば、以下のように全体を記述しない。この記述方法だと必須項目チェックが行われ、playの設定全体、dbの設定全体を再定義しなければならないのではないかと考えます。
162
+ ```
163
+ play {
164
+ db {
165
+ }
166
+ }
167
+ ```
168
+
169
+ 代わりにできるだけ完全修飾名を使って差分のみを記述する。
170
+ ```
171
+ db.default.url=
172
+ ```
173
+
174
+ 再び、試行錯誤をお願いすることになり申し訳ありません。差分を試してみてもうまくいかないなら、この質問はオープンにしておき、application.confの設定について新たに質問してはいかがでしょうか。

2

動作確認

2019/01/21 10:32

投稿

退会済みユーザー
answer CHANGED
@@ -56,4 +56,64 @@
56
56
  db.hikaricpを指定できれば、上記のHikariCPのプロパティ名を使用できるのではないか。
57
57
 
58
58
  参考にした設定
59
- https://www.playframework.com/documentation/2.6.x/SettingsJDBC
59
+ https://www.playframework.com/documentation/2.6.x/SettingsJDBC
60
+
61
+ ### 最新版 play-java-ebean-example による試行
62
+ とりあえず動いたのですが、何が正しいかは確認できていません。
63
+ https://github.com/playframework/play-java-ebean-example/tree/2.6.x
64
+ 最新版を git cloneしました。
65
+
66
+ ```Bash
67
+ git clone https://github.com/playframework/play-java-ebean-example
68
+ ```
69
+
70
+ 実行環境 macOs 10.13.6
71
+ データベース環境 fedora 4.19.15-300.fc29.x86_64
72
+ データベース mariadb 10.3.11-1
73
+
74
+ データベースURL jdbc:mysql://10.0.1.2:3306/sample_db
75
+ ユーザー rootuser
76
+ パスワード nfgwe4706
77
+
78
+ build.sbt
79
+ 以下のjdbcドライバーを追加しました。
80
+ ``` sbt
81
+ libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.13"
82
+ ```
83
+
84
+ application.conf
85
+ db.default.userは、db.default.usernameに変更になりました。
86
+ db.default.driverは、com.mysql.cj.jdbc.Driverを使えといっています。
87
+ ``` conf
88
+ modules {
89
+ enabled += "play.api.db.DBModule"
90
+ enabled += "play.api.db.HikariCPModule"
91
+ }
92
+ fixedConnectionPool=2
93
+ db.default.driver=com.mysql.cj.jdbc.Driver
94
+ db.default.username=rootuser
95
+ db.default.password=nfgwe4706
96
+ db.default.url="jdbc:mysql://10.0.1.2:3306/sample_db"
97
+ db.default.hikaricp {
98
+ driverClassName=com.mysql.cj.jdbc.Driver
99
+ username=rootuser
100
+ password=nfgwe4706
101
+ jdbcUrl="jdbc:mysql://10.0.1.2:3306/sample_db"
102
+ minimumIdle=${fixedConnectionPool}
103
+ maximumPoolSize=${fixedConnectionPool}
104
+ }
105
+ evolutions.db.default {
106
+ enabled=false
107
+ }
108
+ ebean.default="models.*"
109
+ "assets.cache./public/stylesheets/bootstrap.min.css"="max-age=3600"
110
+ database.dispatcher {
111
+ type=Dispatcher
112
+ executor="thread-pool-executor"
113
+ throughput=1
114
+ thread-pool-executor {
115
+ fixed-pool-size = ${fixedConnectionPool}
116
+ }
117
+ }
118
+ ```
119
+ db.defaultは省略できません。db.default.hikaricpがないと設定に失敗します。

1

提案理由を追加

2019/01/19 13:33

投稿

退会済みユーザー
answer CHANGED
@@ -11,4 +11,49 @@
11
11
  ```
12
12
  default.schema = "sample_db"
13
13
  default.port = "3306"
14
- ```
14
+ ```
15
+ ### 提案理由(推測)
16
+ 様々なバージョンのソースコードを読んで考えたことをメモとして残します。
17
+
18
+ **エラーの状況**
19
+ playからコネクションプールのHikariCPを使っているようです。
20
+ https://github.com/brettwooldridge/HikariCP/blob/dev/src/main/java/com/zaxxer/hikari/HikariConfig.java
21
+
22
+ validate()メソッドの該当箇所(調べたソースコードのバージョンが異なるので参考です)
23
+ ``` Java
24
+ else if (driverClassName != null) {
25
+ LOGGER.error("{} - jdbcUrl is required with driverClassName.", poolName);
26
+ throw new IllegalArgumentException("jdbcUrl is required with driverClassName.");
27
+ }
28
+ ```
29
+
30
+ エラーメッセージの意味は「jdbcUrlが指定されていないのに、driverClassNameが指定されている」
31
+ しかし、jdbcUrlは指定している。なぜか?
32
+
33
+ **playの処理**
34
+ play側でHikariCPに渡すプロパティの名前を変換している。playがdb.defaultで指定するプロパティ名と、HikariCPが使用するプロパティ名が異なるようだ。(調べたソースコードのバージョンが異なるので参考です)
35
+ https://github.com/giabao/play-hikaricp/blob/com.sandinh/module-code/app/com/edulify/play/hikaricp/HikariCPConfig.scala
36
+
37
+ |playのプロパティ名|HikariCPのプロパティ名|
38
+ |:--|:--|
39
+ |driver|driverClassName|
40
+ |url|jdbcUrl|
41
+ |user|username|
42
+ |password|password|
43
+ |defaultAutoCommit|autocommit|
44
+ |connectionTestStatement|connectionTestQuery|
45
+ |defaultCatalog|catalog|
46
+ |defaultTransactionIsolation|transactionIsolation|
47
+ |defaultReadOnly|readOnly|
48
+ |statisticsEnabled|registerMbeans|
49
+ |initSQL|connectionInitSql|
50
+
51
+ https://github.com/openbouquet/HikariCP/blob/master/src/main/java/com/zaxxer/hikari/HikariConfig.java
52
+ バージョンが新しくなるとHikariCPのプロパティが増えているようです。
53
+
54
+ **解決策(推測)**
55
+ db.defaultを使うなら、上記のplayのプロパティ名を使用すれば良いのではないか。
56
+ db.hikaricpを指定できれば、上記のHikariCPのプロパティ名を使用できるのではないか。
57
+
58
+ 参考にした設定
59
+ https://www.playframework.com/documentation/2.6.x/SettingsJDBC