【发布时间】:2015-08-09 07:39:27
【问题描述】:
问题设置基于 Web 服务(Spring/Java、Tomcat7 和 MySql),每个用户都有自己的数据库,因此每个请求都需要自己的连接。由于所有数据库都是在运行时动态创建的,因此不能在启动前对其进行静态配置。
为了优化数据库连接使用,数据库连接池的实现会很棒,对吧?
使用 Java/Spring:如何为动态数据库创建连接池?我对这里缺少 clean 选项感到有点震惊!
问题:Tomcat's Connection Pool(据我所知C3P0)将每个新的 DataSource 实例视为一个全新的连接池 -> stack-reference
- 创建一个带有通用 MySql 连接的静态数据源(不指定连接的数据库)并将连接池与该数据源一起使用以及经过调整的 SQL 语句是否是个好主意?
stack-reference - 如何开发基于自定义持久数据库的数据源池?有没有在这里表演的经验?有什么建议吗?有没有这样做的库?
- 或者通过从 Java 动态操作其 context.xml 来动态创建 Tomcat JNDI 数据源来解决 Tomcat 的数据源问题是否可行?
- 我不敢相信没有更多的简单/简单解决方案。 Grails/Hibernate 在这方面苦苦挣扎,Java/JDBC 在这方面苦苦挣扎,......通过动态创建用户特定的数据库来基于用户分离用户数据是一种罕见的用例吗?如果是这样,什么是更好的设置?
编辑
- 另一个选项是来自@M.Deinum 的建议,即使用单个配置的数据源并动态热交换它以获得正确的连接 ->M.Deinum Blog 和 stack-reference。
使用类似的连接池如何执行上面?
【问题讨论】:
-
不确定 hibernate 是如何解决这个问题的,因为它是开箱即用的多租户支持,这基本上是你想要的。
-
想举个例子吗?很高兴看到一个可行的解决方案!我对休眠多租户支持的经验让我明白,数据源在启动之前仍然必须存在/配置。如何在没有此类数据源的情况下使用休眠并动态创建连接?
-
是的,我什至在多租户成为一件事之前就有经验,我blogged 也对此有所了解。它适用于前端、后端或数据源......我们用一个应用程序实例替换了 50 个应用程序实例......在 2006 年......(稍后在博客中介绍)。
-
好的,感谢休眠帮助!也感谢您的博客条目!在您的博客中,您描述了一个使用 HotSwappableTargetSources 的解决方案。这不是上述选项(1-3)的变体吗?这对于无状态 REST 和连接池有何表现?
-
在有数千个并发用户的情况下非常好 :)... 但如前所述,那是在多租户流行之前。我建议先尝试可用的,然后再尝试自己的。 (我们需要的不仅仅是hibernate,比如模板网站,为此我们集成了Springs Theming支持)。
标签: java mysql tomcat jdbc connection-pooling