如何处理Java EE并发

时间:2014-03-18 04:29:23

标签: spring hibernate concurrency

请告诉我在软件项目中提供应用程序并发性的最佳实践。我想将Hibernate用于ORM。 Spring管理事务。数据库为MySQL。

我的并发要求是让用户尽可能多地连接到数据库和
进行CRUD操作并使用服务。但我不喜欢陈旧的数据。

  1. 如何处理数据库中的数据并发问题。
  2. 如何处理应用程序并发。如果两个线程同时访问我的对象会破坏我的对象的状态怎么办?
  3. 最佳做法是什么。
  4. 您是否建议在spring方法中定义隔离级别 @Transactional(isolation=Isolation.READ_COMMITTED)。如何做出这个决定。?
  5. 我想出了以下项目想知道您的反馈和解决方法吗?

    一个。如何处理数据库中的数据并发问题。 使用版本标记和时间戳。

    湾如何处理应用程序并发。 提供乐观锁定。不使用同步,而是为每个请求创建对象(范围原型)。

    ℃。什么是最佳实践。 只要有可能就缓存对象。

1 个答案:

答案 0 :(得分:3)

  1. 如果需要,可以在您的实体中使用交易和@Version字段。
  2. 默认情况下,Spring bean是单例,因此由线程共享。但它们通常是无状态的,因此本质上是线程安全的。 Hibernate实体不应该在线程之间共享,除非你自己明确地做到这一点,否则它们不会:在自己的线程中运行的每个事务都有自己的Hibernate会话,加载自己的实体实例。
  3. 太宽泛而无法回答。
  4. 数据库的默认隔离级别通常是您想要的。与我所知道的大多数数据库都是READ_COMMITTED。
  5. 关于你的观点c(尽可能缓存对象),我会说这正是你不应该做的。缓存使您的应用程序有状态,难以集群,更复杂,并且您必须处理缓存的陈旧性。不要缓存任何东西,直到

    • 您遇到了性能问题
    • 您无法调整算法和查询以解决性能问题
    • 您已经证明缓存可以解决性能问题
    • 您已经证明缓存不会导致问题比性能问题更糟糕

    数据库速度很快,并且已经在内存中缓存数据。