application.confに、DBコネクションに関する設定を細々書きたい!
元ネタはこちら。
勝手に意訳しながらまとめます。
最初にこれだけは言わせてくれ
Play2は、JDBCのデータソース管理にBoneCP使ってるぜ。
こんなURL設定もできる
MySQLとPostgreSQLではこんな書き方しても繋いであげるぜ。
# To configure MySQL db.default.url="mysql://user:password@localhost/database" # To configure PostgreSQL db.default.url="postgres://user:password@localhost/database"
他の設定項目
テンプレートから作成したproject/application.confは、「driver」「url」「user」「password」しか書いてないだろ。実は、他にもこんな項目がPlay2では設定できるんだ。必要なら追加してみな。
# どのJDBCドライバを使う? db.default.driver=org.h2.Driver # JDBCのURLは? db.default.url="jdbc:h2:mem:play" # DBのユーザ名は? db.default.user=sa # DBのパスワードは? db.default.password=secret # コネクションのautocommit初期設定はどうする? db.default.autocommit=true # コネクションのisolation level初期設定はどうする? # READ UNCOMMITTED (一番低い) # READ COMMITTED # REPEATABLE READ # SERIALIZABLE(一番高い) db.default.isolation=READ_COMMITTED # コネクションプールをいくつ持つ? # コネクションのロックを減らしたり、パフォーマンスを上げるため、 # スレッド毎にコネクションプールからコネクションを取得じゃん。 # 短い命のスレッドが大量にある場合、この設定値を大きくしとけば、パフォーマンスよくなるよ。 # くれぐれもパフォーマンスが悪くならないように調整してくれ。 db.default.partitionCount=2 # 各プールに何個ずつのコネクションをもたせるかい? # プールが3個で、ここでの設定値を5にした場合、全部で15本のコネクションを張ることになるぜ。 # 注意して欲しいのは、BoneCPは始めから15本作るわけではないことだ。 # 足りなくなったら15本まで作るってことだからな。 # 最大値ってことに注意してくれ。 db.default.maxConnectionsPerPartition=5 # 一方こちらはプール毎のコネクション最小値。 # 言い換えると、初期値になる。 # アプリを起動すると、ここでの設定値数までコネクションを作成するぜ。 db.default.minConnectionsPerPartition=5 # コネクションが足りなくなったとき、BoneCPは何本ずつ新しいコネクションを # 作るかを指定してくれ。とはいえ、maxConnectionsPerPartitionを超える # コネクションは作らないがな。 # この設定値は、プール毎の値なので注意してくれ。 db.default.acquireIncrement=1 # コネクションを取りにいったけどうまく取得できないとき、 # めげずに何回まで再取得にいかせるかい? db.default.acquireRetryAttempts=10 # コネクション取得失敗の後、再取得まで何秒開けるかい? db.default.acquireRetryDelay=5 seconds # 「惜しくも、時間切れ!こりゃ〜、コネクション取得失敗だ!」って諦めるのは、何秒待ったらにするかい? db.default.connectionTimeout=1 second # 何もせず寝てるだけのコネクションの寿命はどうする? db.default.idleMaxAge=10 minute # DBから「タイムアウトだぜ、さようなら。」って言われないように、 # 定期的にDBに挨拶しておいた方がいいんだ。 # その定期的に挨拶行く間隔はどうするかい? db.default.idleConnectionTestPeriod=5 minutes # コネクションを作った時に1発だけ流すSQLを決めてくれ。 db.default.initSQL="SELECT 1" # DB側がいけるならだけど、log取得用SQLも流そうか? db.default.logStatements=false # コネクションの最大寿命を決めてくれ。 # この時間を過ぎたコネクションは、使用が終わったとたんに殺されるよ。 # しかし心配しないでくれ。 # コネクション数がminConnectionsPerPartition以下なら新しいコネクション作ってあげるから。 db.default.maxConnectionAge=1 hour
おっけー。