【问题标题】:Handling Concurrent request with SpringBoot and Hibernate使用 SpringBoot 和 Hibernate 处理并发请求
【发布时间】:2017-11-20 07:07:48
【问题描述】:

我正在使用 SpringBoot 创建一个 Web 应用程序。在我的应用程序中,我有 RestController 层,它将调用服务层,而服务层又将调用 DAO 层。 我的服务层用 @Transactional(Spring transaction) 注释

我已经使用 Generic DAO Hibernate 实现了 DAO 层

    public class Dao{

        @Autowired(name = "sessionFactory")
        private SessionFactory sessionFactory;

        public <T> T save(final T o){
          return (T) sessionFactory.getCurrentSession().save(o);
        }


        public void delete(final Object object){
          sessionFactory.getCurrentSession().delete(object);
        }

        /***/
        public <T> T get(final Class<T> type, final Long id){
          return (T) sessionFactory.getCurrentSession().get(type, id);
        }

        /***/
        public <T> T merge(final T o)   {
          return (T) sessionFactory.getCurrentSession().merge(o);
        }

        /***/
        public <T> void saveOrUpdate(final T o){
          sessionFactory.getCurrentSession().saveOrUpdate(o);
        }
    }

在 application.properties 中,我有 spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext

所以我担心当多个并发请求到达我的 REST 控制器时 我是否需要将服务层 bean/DAO 层 bean 的范围保持为原型? 另外,我需要同步 DAO 层中的方法吗?或 getCurrentSession() 将始终返回新会话,因为休眠会话不是线程安全的。

P.S 由于某些特定原因,我不想使用 Spring Data JPA

【问题讨论】:

    标签: java spring hibernate spring-boot


    【解决方案1】:

    所以我担心当多个并发请求到达我的 REST 控制器我是否需要保持服务层 bean/DAO 层的范围 bean 作为原型?

    • 相反,您需要将 bean 保持为 Singleton。

    另外,我需要同步 DAO 层中的方法吗?要么 getCurrentSession() 自休眠后将始终返回新会话 session 不是线程安全的。

    你的 session 是一个 Spring Bean,默认是 Singleton,所以所有请求都只有一个实例。

    您是否考虑过使用 spring-rest-data 项目?

    【讨论】:

    • 考虑到上述配置,getcurrentsession 方法是否将始终返回新的会话对象,因为 Spring Boot 中的嵌入式 tomcat 将为每个请求创建新线程?
    • 请执行,检查是否相等,看看它是否真的是新对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多