jdbc的DriverManager是否支持多线程日志记录

时间:2014-07-07 21:15:44

标签: java multithreading logging jdbc

我正在使用一些现有且非常古老的应用程序代码,它们使用DriverManager通过不同的驱动程序处理数据库连接。它是一个多线程应用程序,其中每个连接都是一个线程(无论是新的还是现有的),它设置一个日志编写器来获取/重定向连接错误消息到应用程序的日志文件中。 PrintWriter作为一个内部匿名类实现,该类处理与DB和其他组件的交互。这个外部类不是一个线程,并且在创建一个新的连接线程时被实例化,这意味着,如果我的理解是正确的,那么外部和内部类都被认为只能从“他们的”线程访问。 但是,当我们设置DriverManager的记录器时,我注意到: 1.最后设置的编写器被所有连接“使用”。 2.当我尝试从Writer中的方法(例如flush())访问外部类中的一些本地变量时,所有线程/连接都使用相同的(最后一组)记录器的外部类,这构成了竞争条件。 这是否意味着DriverManager的日志记录不是线程安全的?或者,我应该说, - 可能不安全。我们的日志记录似乎工作正常,因为我们设置的Writer也没有引用特定文件,但使用外部类的静态引用来重定向到我们的日志记录工具。但是,我没有看到任何我不能做的限制, - 将作者传递给某个文件。或者,如果一个线程在完成时将logger设置为null会发生什么, - 所有线程都会从DriverManager或/和正在使用的驱动程序中丢失日志? 如果有人能为我澄清这一点,我真的很感激。 谢谢。

0 个答案:

没有答案