我有 2 种带有 spring @Transactional 注释的方法。
@Transactional(readOnly = true)
public ConfigParameter getConfigParameter(String key) {
@Transactional(readOnly = false)
public void setConfigParameter(ConfigParameter param) {
readOnly = false 表示该方法将被同步。当在 setter 上设置readyOnly = false时,意味着对 setter 的访问是同步的。
您是否同意在这种情况下,getter 也应该将 readOnly 设置为 true(同步)。因为否则我们将面临返回对象状态不一致的风险。
当我用 FindBugs 检查这个类并收到警告时,我遇到了这个问题:
不同步的 get 方法,同步的 set 方法 此类包含名称相似的 get 和 set 方法,其中 set 方法是同步的,而 get 方法不是。这可能会导致运行时的错误行为,因为 get 方法的调用者不一定会看到对象的一致状态。get 方法应该是同步的。