【问题标题】:Any way to inject/choose datasource at runtime?有什么方法可以在运行时注入/选择数据源?
【发布时间】:2011-04-25 18:08:50
【问题描述】:

我有一个 MySQL 数据库,其中包含许多数据库,每个数据库都以特定的客户命名。

为每个客户部署一个 web 应用。 webapp 的名称决定了底层数据库的名称。当 webapp 启动时,我有一个修改过的 Spring PropertyPlaceholderConfigurer 来获取 ServletContext(如果可以)并确定名称。然后我在我的数据源设置中取消引用它。工作精美。完全相同的代码可以部署给所有客户,他们可以毫无问题地找到他们的数据库(也是用于定位 MySQL 主机的 DNS 名称)。

我想切换到 GlassFish 或 JBoss AS 6,并且仍然使用直接的 JEE6 API/注释做同样的事情。

有没有办法做到这一点?我不担心安全性——数据集足够大,足以证明它们自己的机器和 web 应用程序的合理性,而且由于数据库模型与代码相关联,它们需要保持同步。由于并非每个客户都需要手头任务的最新代码,因此他们以不同的速度进行修订。

我喜欢 JEE6 的便利性,它整合了 Spring 过去拥有的很多东西,但我讨厌不得不处理应用程序服务器和它们的白痴,但将 Spring 拼凑在一起也不好玩。

【问题讨论】:

  • 那么您希望 JPA 在运行时选择数据源吗?但是你是如何使用它的?容器管理的实体管理器?我不确定是否有足够的细节来给出答案......
  • 是的,我想使用容器管理的 JPA。我已经看到了 @DataSourceDefinition 注释,我一生都无法在 JBoss AS 6Mlatest 下工作。 blogs.sun.com/Lance/entry/… 我可以在启动时加载 EJB 来确定应用程序名称并注册 JNDI 数据源吗?希望不必使用供应商扩展。

标签: annotations jpa-2.0 java-ee-6 cdi


【解决方案1】:

我想切换到 GlassFish 或 JBoss AS 6,并且仍然使用直接的 JEE6 API/注释做同样的事情。

恐怕这是不可能的。据我所知,使用容器管理的实体管理器,您将无法在运行时配置其底层数据源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2019-08-03
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2012-07-05
    相关资源
    最近更新 更多