回答編集履歴
4
誤りを訂正、最小設定を追加
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
|
-
|
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
設定について追記
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
動作確認
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
提案理由を追加
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
|