-1

我的 web 应用程序(这里没有 Spring-MVC,只有核心 IOC)使用了很多原型 bean,其中大多数都使用单例 dao-bean。是否应该同步单例 dao-bean 方法,因为许多不同的原型 bean(来自不同的请求)可能在同一时刻使用相同的方法 id dao?

比如dao方法

public void setLetterNotNew(int letterId) {

    final String sql = "UPDATE income SET isnew=? WHERE id=?";

    try( Connection con = HikariFactory.getConnection(); PreparedStatement ps = con.prepareStatement(sql); ) {

        ps.setInt(1, 0);
        ps.setInt(2, letterId);

        int i = ps.executeUpdate();
        if(i==0) throw new SQLException("setLetterNotNew");

    } catch (SQLException e) {
        log.error(e);
    }
}
4

1 回答 1

0

这取决于。

正如您在评论中所写,您使用 jdbc。JDBC API 上的所有操作都是同步的,默认是自动提交的。因此,如果您共享 JDBC 连接,但您的方法不需要事务(例如,它不会对之前选择的几行数据进行更新),则它不需要同步。

但是,如果您需要事务,则必须同步此方法或为每个线程提供其自己的 JDBC 连接,因为每个连接也是一个事务。为了实现这一点,您可以每次在方法中打开新连接或让Spring 处理该问题

于 2016-07-09T06:43:32.360 回答