小编edu*_*edu的帖子

Kotlin 的 Arrow <Exception, X> 和交易

我正在尝试使用 Kotlin 的 Arrow 库Either对象来处理项目中的异常。

到目前为止,我的经验还不错,但我正在努力寻找一种方法来处理事务Either,特别是回滚。在 Spring 中抛出 aRuntimeException是导致事务回滚的可靠方法。但是,通过使用Either不会引发异常,因此不会触发回滚。

您可以将此视为一个多方面的问题:

  1. 是否Either适合真实Exception处理?不是替代控制流,我的意思是程序流需要停止的真正错误情况。
  2. 如果是这样,您如何通过它们实现回滚?
  3. 如果问题 2. 的答案是以transactionManager编程方式使用- 你能避免这种情况吗?
  4. 我把这个挤进去,你如何避免嵌套Either

spring spring-transactions spring-data-jpa kotlin arrow-kt

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

Java Spring 应用程序中缺少 volatile 变量及其后果

那些开发过专业的多线程 Java Spring 应用程序的人可能可以证明 volatile 关键字的使用几乎不存在(以及与此相关的其他线程控制),尽管在需要时错过它可能会带来灾难性的后果。

让我提供一个非常常见的代码示例

@Service
public class FeatureFlagHolder {
   private boolean featureFlagActivated = false;

   public void activateFeatureFlag() {
      featureFlagActivated = true;
   }

   // similar code to de-activate

   public boolean isFeatureFlagActivated() {
      return featureFlagActivated;
   }
}
Run Code Online (Sandbox Code Playgroud)

假设改变和读取状态的线程featureFlagActivated不同。AFAIK,读取布尔值的线程可以根据 JVM 缓存其值并且从不刷新它。在实践中,我从未见过这种情况发生。事实上,我什至从未见过布尔值在读取时没有立即更新。

这是为什么?

java spring java-threads

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