我正在四处寻找我的Web应用程序的多租户解决方案。 我想用独立的架构模型来实现应用程序。我想每个会话都有一个数据源。为了做到这一点,我把数据源和entitymanger放在会话范围内,但那不起作用。我想在用户输入用户名和密码以及tenantId时加载data-access-context.xml文件(包括数据源和其他存储库bean)文件。我想知道这是否是一个好的解决方案?多弹簧与弹簧JPA
3
A
回答
2
多租户是一个棘手的主题,它必须在JPA提供商一方处理,以便从客户端代码的角度来看没有或几乎没有变化。 eclipselink支持多租户(请参阅:EclipseLink/Development/Indigo/Multi-Tenancy),hibernate刚刚添加它。
另一种方法是使用AbstractRoutingDataSource
,参见:Multi tenancy in Hibernate。
使用会话范围风险太大(同时你最终会得到数千个数据库连接,每个会话/用户都会得到很少的连接,最后EntityManager
和底层数据库连接是不可序列化的,所以你不能迁移你的会话并扩展你的应用程序正常。
0
我曾与一些多租户系统的工作。这里的挑战是如何保持
- 开放式架构和
- 提供与您的业务发展的解决方案。
让我们先看看第二个挑战。多租户系统有发展的趋势,您需要支持多个拥有不同容量的租户可访问同一数据(记录)的用例(例如https://bugs.eclipse.org/bugs/show_bug.cgi?id=355458)。所以,系统最终需要访问控制列表。
为了保持开放式体系结构,您可以编码为标准(如JPA)。编码到EclipseLink或Hibernate让我感到不舒服。
Spring Security ACL为这些挑战提供了非常灵活的社区支持解决方案。试试看。我对它的表现感到满意。但是,我必须告诫你,我花了一些时间来探索它。
相关问题
- 1. Angular2与弹簧靴和弹簧安全
- 2. 与弹簧
- 3. Jhipster或弹簧数据JPA
- 4. 弹簧+ JPA + DAO + Tomcat的
- 5. 要通过弹簧JPA
- 6. 事务弹簧DATA JPA
- 7. 弹簧数据JPA获取
- 8. 弹簧引导数据redis集成弹簧数据jpa
- 9. 弹簧4 +弹簧数据的JPA +休眠+ PostgreSQL的
- 10. 混合弹簧数据jpa +弹簧数据neo4j。 users服务
- 11. NonUniqueResultException在投影弹簧数据JPA(弹簧引导)
- 12. Spring Boot多项目弹簧数据Jpa
- 13. 弹簧数据jpa与组之和
- 14. 分页与弹簧启动usiing jpa
- 15. 使用弹簧数据JPA与Spring 3.1.0
- 16. 弹簧prefixjson与responsebody
- 17. 休眠与弹簧
- 18. 在弹簧安全与弹簧websocket集成弹簧安全性和
- 19. IndexOutOfBoundsException弹簧批量和弹簧启动
- 20. 弹簧启动弹簧安全
- 21. 弹簧启动应用与弹簧批量不运行作业
- 22. 集成弹簧Websession与弹簧反应性网络通量
- 23. 与弹簧集成启动竞赛条件弹簧批次
- 24. 弹簧云与弹簧云:gradle构建失败
- 25. 弹簧配置
- 26. 弹簧安全
- 27. WatchService弹簧
- 28. 弹簧AMQP comsumer
- 29. 使用弹簧
- 30. 弹簧JDBC DAO
当您使用SessionFactory(即Hibernate native)而不是JPA(@ PersistenceContext/EntityManager)时,Hibernate仅支持多租户。 – pap 2012-03-15 11:07:30
嗨,谢谢你的回答。这真的很有帮助。而你说得对。它不支持JPA。但我选择使用'AbstractRoutingDataSource'。但问题是现在数据源和实体管理器bean在启动时初始化。有没有办法在春季配置这种方式,它将在用户认证后初始化? – mettok 2012-03-15 12:59:39
@ user1057347:请打开一个新问题,这太复杂了,不能在评论中解释(并且在将来不会有足够的支持)。还请发布一个新问题的链接,以便我可以跟进。 – 2012-03-15 13:02:39