Java JPA/Eclipselink-动态选择数据源/JDBCURL

Java JPA/Eclipselink-动态选择数据源/JDBCURL,java,jakarta-ee,jpa,eclipselink,multi-tenant,Java,Jakarta Ee,Jpa,Eclipselink,Multi Tenant,有没有一种方法可以让JPA Eclipselink根据绑定到当前线程的某些属性来动态选择连接池 我试图解决的问题是扩展一个多租户系统,租户可能会在多个DB实例上被拆分。每个DB实例都是多租户的,但要扩展,我可能无法在一个DB实例中轻松容纳所有租户 我熟悉@Multitenant以支持单表多租户,并成功地使用Eclipselink会话事件回调来动态设置Eclipselink会话中的值。我正在尝试下一步更改EntityManager将使用的数据源,因此我不必使用集群数据库 谢谢 看看这个 它创建了一

有没有一种方法可以让JPA Eclipselink根据绑定到当前线程的某些属性来动态选择连接池

我试图解决的问题是扩展一个多租户系统,租户可能会在多个DB实例上被拆分。每个DB实例都是多租户的,但要扩展,我可能无法在一个DB实例中轻松容纳所有租户

我熟悉@Multitenant以支持单表多租户,并成功地使用Eclipselink会话事件回调来动态设置Eclipselink会话中的值。我正在尝试下一步更改EntityManager将使用的数据源,因此我不必使用集群数据库

谢谢

看看这个

它创建了一个将负载平衡加载到后端数据源的数据源。

看看这个

它创建了一个将负载平衡加载到后端数据源的数据源。

您可以使用EntityManager Factory,该工厂允许通过字符串属性为特定数据源创建EntityManager,如下所述

您可以使用EntityManager Factory,它允许通过字符串属性为特定的DatsSource创建EntityManager,如中所述


你可能想检查一下。它可能会对您有所帮助,或者为您提供如何实现解决方案的线索。

您可能需要查看。它可能会对您有所帮助,或者为您提供如何实现解决方案的线索。

不幸的是,我不仅仅是在尝试负载平衡,我正试图根据当前请求/线程的某些属性显式指定目标数据源。extend LoadBalancingDataSource和override getConnection将基于threadlocal变量从connectionPools中选择特定的connectionPool。我没有使用LoadBalancingDataSource,因此无法保证其质量。请注意Eclipselink共享的二级缓存,它可能会被不一致的数据库毒害。幸运的是,我不仅仅是在尝试负载平衡,我正试图根据当前请求/线程的某些属性显式指定目标数据源。extend LoadBalancingDataSource和override getConnection将基于threadlocal变量从connectionPools中选择特定的connectionPool。我没有使用LoadBalancingDataSource,因此无法保证其质量。请注意Eclipselink共享的二级缓存,它可能会被不一致的数据库毒害。显示许多数据源?它们可以在启动时初始化还是太多?有多少数据源?它们是在启动时初始化的还是太多了?我正在为EntityManager使用@PersistenceContext注入,并希望保持这种方式。我不想在应用程序代码中管理EntityManager的创建和关闭。如果您知道如何通过EclipseLink会话回调执行完全相同的操作,那么这将是一个理想的选择。@wrschneider您是否能够得到一个解决方案。我也面临着同样的问题,我想了解您是否能够使用PersistenceContext或persistenceuniti实现它。我正在为我的EntityManager使用@PersistenceContext注入,并希望保持这种方式。我不想在应用程序代码中管理EntityManager的创建和关闭。如果您知道如何通过EclipseLink会话回调执行完全相同的操作,那么这将是一个理想的选择。@wrschneider您是否能够得到一个解决方案。我还面临着同样的scneario,我想了解您是否能够使用PersistenceContext或Persistence Unit实现它,它们可以在单个安装/实例中用于切换架构/数据库,但它不允许我动态选择主机。这可以用于在单个安装/实例中切换架构/数据库,但它不允许我动态选择主机。