回答編集履歴

4

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

2019/01/23 09:35

投稿

退会済みユーザー
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  スタックトレースをもとにソースコードを調べましたが、かなり変更されているようで、該当の行番号を持つソースが見つかりませんでした。以下は解決策の提案です。playのプロパティ名を使う。
4
4
 
5
-
5
+ ~~打ち消し線~~
6
6
 
7
7
  ```
8
8
 
@@ -234,39 +234,39 @@
234
234
 
235
235
  ```
236
236
 
237
- db.defaultは省略できません。db.default.hikaricpがないと設定に失敗します。
237
+ db.defaultは省略できません。~~db.default.hikaricpがないと設定に失敗します。~~
238
238
 
239
239
 
240
240
 
241
241
  ### application.confの設定が正しく反映されない問題
242
242
 
243
- play-java-ebean-exampleを調査中に設定に関するエラーに遭遇しました。設定についてコメントします。
243
+ ~~play-java-ebean-exampleを調査中に設定に関するエラーに遭遇しました。設定についてコメントします。~~
244
-
245
-
246
-
244
+
245
+
246
+
247
- 以下のようにdb.default=“deafult”を設定しておき、defaultをオブジェクトとして設定しようとするとエラー。
247
+ ~~以下のようにdb.default=“deafult”を設定しておき、defaultをオブジェクトとして設定しようとするとエラー。~~
248
-
248
+
249
- またHikariCPのvalidate()で、jdbcUrlがnullになるなどのエラーが発生しました。
249
+ ~~またHikariCPのvalidate()で、jdbcUrlがnullになるなどのエラーが発生しました。~~
250
-
250
+
251
- ```
251
+ ~~``` ~~
252
-
252
+
253
- db {
253
+ ~~db { ~~
254
-
254
+
255
- default=“deafult”
255
+ ~~ default=“deafult”~~
256
-
256
+
257
- ...
257
+ ~~ ...~~
258
-
258
+
259
- deafult {
259
+ ~~ deafult { ~~
260
-
260
+
261
- url=
261
+ ~~ url= ~~
262
-
262
+
263
- ...
263
+ ~~ ...~~
264
-
264
+
265
- hikaricp {
265
+ ~~ hikaricp {~~
266
-
266
+
267
- jdbcUrl=
267
+ ~~ jdbcUrl=~~
268
-
268
+
269
- ```
269
+ ~~``` ~~
270
270
 
271
271
 
272
272
 
@@ -300,6 +300,8 @@
300
300
 
301
301
  質問に、バージョンや設定ファイルの内容が全て添付されていないので、以下は推測になります。
302
302
 
303
+ - 代替設定を使用している可能性 (<--- 2019-01-23 に追加)
304
+
303
305
  - 設定値がオーバライドされている可能性。後に同じプロパティの設定があり値が’’/nullのものがある。
304
306
 
305
307
  - 設定方法が根本的に誤っている可能性。play-java-ebean-exampleの設定方法が誤っている。
@@ -308,40 +310,118 @@
308
310
 
309
311
 
310
312
 
311
- これまでやってみて、うまくいったのは以下です。
313
+ ~~これまでやってみて、うまくいったのは以下です。~~
312
-
314
+
313
- - デフォルトの設定はすでにreference.confにあるので、設定全体を記述しないで、差分だけを記述する
315
+ ~~- デフォルトの設定はすでにreference.confにあるので、設定全体を記述しないで、差分だけを記述する~~
314
-
316
+
315
- (デフォルト設定のreference.confは、playのjarの中にあると書かれています)
317
+ ~~(デフォルト設定のreference.confは、playのjarの中にあると書かれています)~~
316
-
318
+
317
- - 差分は完全修飾名を使って記述する
319
+ ~~- 差分は完全修飾名を使って記述する~~
318
-
319
-
320
-
320
+
321
+
322
+
321
- 例えば、以下のように全体を記述しない。この記述方法だと必須項目チェックが行われ、playの設定全体、dbの設定全体を再定義しなければならないのではないかと考えます。
323
+ ~~例えば、以下のように全体を記述しない。この記述方法だと必須項目チェックが行われ、playの設定全体、dbの設定全体を再定義しなければならないのではないかと考えます。~~
322
-
324
+
323
- ```
325
+ ~~``` ~~
324
-
326
+
325
- play {
327
+ ~~play {~~
328
+
326
-
329
+ ~~ db {~~
330
+
331
+ ~~ }~~
332
+
333
+ ~~}~~
334
+
335
+ ~~```~~
336
+
337
+
338
+
339
+ ~~代わりにできるだけ完全修飾名を使って差分のみを記述する。~~
340
+
341
+ ~~``` ~~
342
+
343
+ ~~db.default.url=~~
344
+
345
+ ~~```~~
346
+
347
+
348
+
349
+ 再び、試行錯誤をお願いすることになり申し訳ありません。差分を試してみてもうまくいかないなら、この質問はオープンにしておき、application.confの設定について新たに質問してはいかがでしょうか。
350
+
351
+
352
+
353
+ ### play-java-ebean-example 最小設定
354
+
355
+ 資料を調べて、動作を試した結果、最小設定は以下で良いことがわかりました。
356
+
357
+
358
+
359
+ ``` conf
360
+
361
+ ## 追加 mysqlに接続するには以下の4行があれば良い。
362
+
327
- db {
363
+ db {
364
+
365
+ default.driver=com.mysql.cj.jdbc.Driver
366
+
367
+ default.username=rootuser
368
+
369
+ default.password=nfgwe4706
370
+
371
+ default.url="jdbc:mysql://10.0.1.2:3306/sample_db"
372
+
373
+ }
374
+
375
+ ## 追加 evolutionが実行されるのを抑制
376
+
377
+ evolutions {
378
+
379
+ enabled=false
380
+
381
+ db.default.enabled=false
382
+
383
+ }
384
+
385
+ ## 以下はダウンロードしたオリジナルのapplication.confに含まれていた内容
386
+
387
+ ## (dispatcher の設定がないと実行エラー)
388
+
389
+ ebean.default="models.*"
390
+
391
+ "assets.cache./public/stylesheets/bootstrap.min.css"="max-age=3600"
392
+
393
+ ## オリジナルのfixedConnectionPool 7 -> 2 に変更
394
+
395
+ fixedConnectionPool=2
396
+
397
+ play.db {
398
+
399
+ prototype {
400
+
401
+ hikaricp.minimumIdle = ${fixedConnectionPool}
402
+
403
+ hikaricp.maximumPoolSize = ${fixedConnectionPool}
328
404
 
329
405
  }
330
406
 
331
407
  }
332
408
 
409
+ database.dispatcher {
410
+
411
+ type=Dispatcher
412
+
413
+ executor="thread-pool-executor"
414
+
415
+ throughput=1
416
+
417
+ thread-pool-executor {
418
+
419
+ fixed-pool-size = ${fixedConnectionPool}
420
+
421
+ }
422
+
423
+ }
424
+
333
- ```
425
+ ```
334
-
335
-
336
-
426
+
337
- 代わりるだけ完全修飾名を使って差分のみを記述
427
+ 「上記の4行があればmysql接続可能」とします。続は新しいQ&Aに書きます。
338
-
339
- ```
340
-
341
- db.default.url=
342
-
343
- ```
344
-
345
-
346
-
347
- 再び、試行錯誤をお願いすることになり申し訳ありません。差分を試してみてもうまくいかないなら、この質問はオープンにしておき、application.confの設定について新たに質問してはいかがでしょうか。

3

設定について追記

2019/01/23 09:35

投稿

退会済みユーザー
test CHANGED
@@ -235,3 +235,113 @@
235
235
  ```
236
236
 
237
237
  db.defaultは省略できません。db.default.hikaricpがないと設定に失敗します。
238
+
239
+
240
+
241
+ ### application.confの設定が正しく反映されない問題
242
+
243
+ play-java-ebean-exampleを調査中に設定に関するエラーに遭遇しました。設定についてコメントします。
244
+
245
+
246
+
247
+ 以下のようにdb.default=“deafult”を設定しておき、defaultをオブジェクトとして設定しようとするとエラー。
248
+
249
+ またHikariCPのvalidate()で、jdbcUrlがnullになるなどのエラーが発生しました。
250
+
251
+ ```
252
+
253
+ db {
254
+
255
+ default=“deafult”
256
+
257
+ ...
258
+
259
+ deafult {
260
+
261
+ url=
262
+
263
+ ...
264
+
265
+ hikaricp {
266
+
267
+ jdbcUrl=
268
+
269
+ ```
270
+
271
+
272
+
273
+ **playの設定**
274
+
275
+ playの設定は、HOCONフォーマットを使って、typesafe Config で管理しています。
276
+
277
+
278
+
279
+ typesafe Configは以下にあります。
280
+
281
+ https://github.com/lightbend/config
282
+
283
+ withFallbackを使うと、前に設定された値を優先させることができる。
284
+
285
+ Javaのシステムプロパティ、application.conf、reference.confは、左が優先する。
286
+
287
+
288
+
289
+ HOCONフォーマットの説明は以下です。
290
+
291
+ https://www.playframework.com/documentation/ja/2.1.x/Configuration
292
+
293
+ https://github.com/lightbend/config/blob/master/HOCON.md
294
+
295
+ ファイルに同じプロパティ設定があるならオーバーライドまたはマージしてくれる。「重複したキー」を参照してください。
296
+
297
+
298
+
299
+ **解決のヒント**
300
+
301
+ 質問に、バージョンや設定ファイルの内容が全て添付されていないので、以下は推測になります。
302
+
303
+ - 設定値がオーバライドされている可能性。後に同じプロパティの設定があり値が’’/nullのものがある。
304
+
305
+ - 設定方法が根本的に誤っている可能性。play-java-ebean-exampleの設定方法が誤っている。
306
+
307
+ - 該当バージョンのplayの動作がバグを含んでいる。(この可能性は低いでしょう)
308
+
309
+
310
+
311
+ これまでやってみて、うまくいったのは以下です。
312
+
313
+ - デフォルトの設定はすでにreference.confにあるので、設定全体を記述しないで、差分だけを記述する
314
+
315
+ (デフォルト設定のreference.confは、playのjarの中にあると書かれています)
316
+
317
+ - 差分は完全修飾名を使って記述する
318
+
319
+
320
+
321
+ 例えば、以下のように全体を記述しない。この記述方法だと必須項目チェックが行われ、playの設定全体、dbの設定全体を再定義しなければならないのではないかと考えます。
322
+
323
+ ```
324
+
325
+ play {
326
+
327
+ db {
328
+
329
+ }
330
+
331
+ }
332
+
333
+ ```
334
+
335
+
336
+
337
+ 代わりにできるだけ完全修飾名を使って差分のみを記述する。
338
+
339
+ ```
340
+
341
+ db.default.url=
342
+
343
+ ```
344
+
345
+
346
+
347
+ 再び、試行錯誤をお願いすることになり申し訳ありません。差分を試してみてもうまくいかないなら、この質問はオープンにしておき、application.confの設定について新たに質問してはいかがでしょうか。

2

動作確認

2019/01/21 10:32

投稿

退会済みユーザー
test CHANGED
@@ -115,3 +115,123 @@
115
115
  参考にした設定
116
116
 
117
117
  https://www.playframework.com/documentation/2.6.x/SettingsJDBC
118
+
119
+
120
+
121
+ ### 最新版 play-java-ebean-example による試行
122
+
123
+ とりあえず動いたのですが、何が正しいかは確認できていません。
124
+
125
+ https://github.com/playframework/play-java-ebean-example/tree/2.6.x
126
+
127
+ 最新版を git cloneしました。
128
+
129
+
130
+
131
+ ```Bash
132
+
133
+ git clone https://github.com/playframework/play-java-ebean-example
134
+
135
+ ```
136
+
137
+
138
+
139
+ 実行環境 macOs 10.13.6
140
+
141
+ データベース環境 fedora 4.19.15-300.fc29.x86_64
142
+
143
+ データベース mariadb 10.3.11-1
144
+
145
+
146
+
147
+ データベースURL jdbc:mysql://10.0.1.2:3306/sample_db
148
+
149
+ ユーザー rootuser
150
+
151
+ パスワード nfgwe4706
152
+
153
+
154
+
155
+ build.sbt
156
+
157
+ 以下のjdbcドライバーを追加しました。
158
+
159
+ ``` sbt
160
+
161
+ libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.13"
162
+
163
+ ```
164
+
165
+
166
+
167
+ application.conf
168
+
169
+ db.default.userは、db.default.usernameに変更になりました。
170
+
171
+ db.default.driverは、com.mysql.cj.jdbc.Driverを使えといっています。
172
+
173
+ ``` conf
174
+
175
+ modules {
176
+
177
+ enabled += "play.api.db.DBModule"
178
+
179
+ enabled += "play.api.db.HikariCPModule"
180
+
181
+ }
182
+
183
+ fixedConnectionPool=2
184
+
185
+ db.default.driver=com.mysql.cj.jdbc.Driver
186
+
187
+ db.default.username=rootuser
188
+
189
+ db.default.password=nfgwe4706
190
+
191
+ db.default.url="jdbc:mysql://10.0.1.2:3306/sample_db"
192
+
193
+ db.default.hikaricp {
194
+
195
+ driverClassName=com.mysql.cj.jdbc.Driver
196
+
197
+ username=rootuser
198
+
199
+ password=nfgwe4706
200
+
201
+ jdbcUrl="jdbc:mysql://10.0.1.2:3306/sample_db"
202
+
203
+ minimumIdle=${fixedConnectionPool}
204
+
205
+ maximumPoolSize=${fixedConnectionPool}
206
+
207
+ }
208
+
209
+ evolutions.db.default {
210
+
211
+ enabled=false
212
+
213
+ }
214
+
215
+ ebean.default="models.*"
216
+
217
+ "assets.cache./public/stylesheets/bootstrap.min.css"="max-age=3600"
218
+
219
+ database.dispatcher {
220
+
221
+ type=Dispatcher
222
+
223
+ executor="thread-pool-executor"
224
+
225
+ throughput=1
226
+
227
+ thread-pool-executor {
228
+
229
+ fixed-pool-size = ${fixedConnectionPool}
230
+
231
+ }
232
+
233
+ }
234
+
235
+ ```
236
+
237
+ db.defaultは省略できません。db.default.hikaricpがないと設定に失敗します。

1

提案理由を追加

2019/01/19 13:33

投稿

退会済みユーザー
test CHANGED
@@ -25,3 +25,93 @@
25
25
  default.port = "3306"
26
26
 
27
27
  ```
28
+
29
+ ### 提案理由(推測)
30
+
31
+ 様々なバージョンのソースコードを読んで考えたことをメモとして残します。
32
+
33
+
34
+
35
+ **エラーの状況**
36
+
37
+ playからコネクションプールのHikariCPを使っているようです。
38
+
39
+ https://github.com/brettwooldridge/HikariCP/blob/dev/src/main/java/com/zaxxer/hikari/HikariConfig.java
40
+
41
+
42
+
43
+ validate()メソッドの該当箇所(調べたソースコードのバージョンが異なるので参考です)
44
+
45
+ ``` Java
46
+
47
+ else if (driverClassName != null) {
48
+
49
+ LOGGER.error("{} - jdbcUrl is required with driverClassName.", poolName);
50
+
51
+ throw new IllegalArgumentException("jdbcUrl is required with driverClassName.");
52
+
53
+ }
54
+
55
+ ```
56
+
57
+
58
+
59
+ エラーメッセージの意味は「jdbcUrlが指定されていないのに、driverClassNameが指定されている」
60
+
61
+ しかし、jdbcUrlは指定している。なぜか?
62
+
63
+
64
+
65
+ **playの処理**
66
+
67
+ play側でHikariCPに渡すプロパティの名前を変換している。playがdb.defaultで指定するプロパティ名と、HikariCPが使用するプロパティ名が異なるようだ。(調べたソースコードのバージョンが異なるので参考です)
68
+
69
+ https://github.com/giabao/play-hikaricp/blob/com.sandinh/module-code/app/com/edulify/play/hikaricp/HikariCPConfig.scala
70
+
71
+
72
+
73
+ |playのプロパティ名|HikariCPのプロパティ名|
74
+
75
+ |:--|:--|
76
+
77
+ |driver|driverClassName|
78
+
79
+ |url|jdbcUrl|
80
+
81
+ |user|username|
82
+
83
+ |password|password|
84
+
85
+ |defaultAutoCommit|autocommit|
86
+
87
+ |connectionTestStatement|connectionTestQuery|
88
+
89
+ |defaultCatalog|catalog|
90
+
91
+ |defaultTransactionIsolation|transactionIsolation|
92
+
93
+ |defaultReadOnly|readOnly|
94
+
95
+ |statisticsEnabled|registerMbeans|
96
+
97
+ |initSQL|connectionInitSql|
98
+
99
+
100
+
101
+ https://github.com/openbouquet/HikariCP/blob/master/src/main/java/com/zaxxer/hikari/HikariConfig.java
102
+
103
+ バージョンが新しくなるとHikariCPのプロパティが増えているようです。
104
+
105
+
106
+
107
+ **解決策(推測)**
108
+
109
+ db.defaultを使うなら、上記のplayのプロパティ名を使用すれば良いのではないか。
110
+
111
+ db.hikaricpを指定できれば、上記のHikariCPのプロパティ名を使用できるのではないか。
112
+
113
+
114
+
115
+ 参考にした設定
116
+
117
+ https://www.playframework.com/documentation/2.6.x/SettingsJDBC