0

Mysql db を操作するために Scala slick を使用しています。

scala.util.Try を使用してすべての呼び出しをラップしています

問題に基づいて異なる動作をしたい

  • DB がダウンしている場合、最終的には webapp が 503 を返すようにしたい

  • 奇妙なクエリがデータベース層に到達し、コードにバグがある場合は、500 を返したい

グーグルで調べたところ、エラーコードでさまざまな例外が発生する可能性があるようで、何を探すべきかわかりません。

巧妙に私は com.mysql.jdbc.driver を使用しています

ありがとう

4

1 に答える 1

3

MySQLSyntaxErrorExceptionSlick/MySQL は、構文が正しくない場合やCommunicationsException、データベースに到達できない場合にスローします。

これらのタイプの例外の両方をキャッチする簡単な例を次に示します。

try {
    Database.forURL("jdbc:mysql://some-host:3306/db-name", 
                    driver = "com.mysql.jdbc.Driver", 
                    user="", 
                    password="") withSession { session: Session =>
      implicit val s = session
      ...
    }
} catch {
    case e: MySQLSyntaxErrorException =>
        ... handle the syntax error ...
        // You may want to define your own Exception that wraps the MySQL one
        // and adds more context
    case e: CommunicationsException =>
        ... handle the connection error ...
}

次に、webapp コードでカスタム例外をキャッチし (コード内のコメントを参照)、それに応じて HTTP コードを返します。

于 2013-03-22T17:00:20.450 に答える