小编ric*_*all的帖子

Rare and elusive deadlocks (select for update; then update) in case of multiple concurrent transactions

Database: MSSQL server 2012;

Isolation level: READ_COMMITTED_SNAPSHOT

Now I have a table "COV_HOLES_PERIODDATE". It has a composite primary key which is also a clustered index. No other indexes on this table.

There are many threads(via Java) working concurrently. Each thread will first do a "select for update" on a DIFFERENT primary key via lock hint (updlock, rowlock), then do some work, then update table for this row. It is guaranteed from Java side that each thread is operating on a …

sql sql-server deadlock database-deadlocks

6
推荐指数
1
解决办法
762
查看次数

调整一个特定JDBC错误的hibernate日志记录级别

环境:Hibernate 4.2.6

场景:hibernate为特定的"唯一约束PK_XXX违反"sql异常记录"ERROR".但是由于我们特定的多实例部署方案,我们需要将此调整为"INFO"级别,以用于此特定"唯一约束PK_XXX违反"sql异常.(所以它不会混淆IT人员).

换句话说,从技术上讲它是"错误",但从商业角度来看它是"信息".

目前:

2016.01.19 13.20.14,299 [ ERROR ][ ][ ][ ] org.hibernate.engine.jdbc.spi.SqlExceptionHelper - logExceptions() ORA-00001: unique constraint (PK_LOCKINFO) violated

期望:

2016.01.19 13.20.14,299 [ INFO ][ ][ ][ ] org.hibernate.engine.jdbc.spi.SqlExceptionHelper - logExceptions() ORA-00001: unique constraint (PK_LOCKINFO) violated

前进的最简单方法是什么?我能想到的选择:

  1. 修改hibernate内部类"org.hibernate.engine.jdbc.spi.SqlExceptionHelper",然后重新编译"hibernate"jar

具体的定制是:在"唯一约束PK_LOCKINFO违反"sql异常的情况下,将其记录为"INFO"级别而不是"ERROR"级别.但是任何其他sql异常仍应记录为"ERROR"级别.在我们前进的过程中,这一选择提出了挑战.每次hibernate升级时我们都必须这样做.

  1. 有一个类在我们自己的代码库中扩展和自定义hibernate类"org.hibernate.engine.jdbc.spi.SqlExceptionHelper"这样我们就不必编译一个"hibernate"jar了.这可能吗?

  2. 在我们的代码中添加一个事后监听器,它不断地扫描"log",然后对它做一些事情

不确定我是否喜欢选项#3.似乎太尴尬了.

还有其他选择吗?

java logging hibernate jdbc

5
推荐指数
1
解决办法
924
查看次数