【问题标题】:Passing db info to Hibernate at runtime?在运行时将数据库信息传递给 Hibernate?
【发布时间】:2014-02-03 01:40:53
【问题描述】:

hibernate 的问题是,您需要将数据库信息(用户名/密码等)放在一个 xml 文件中。但是,如果您在 Amazon Web 服务上部署您的应用程序,例如在 Beanstalk 上,您将获得通过 System.getProperty("RDS_DATABASE_USER") 等传递的数据库信息。优点是,如果创建了更多应用程序实例,数据库信息会自动传递,无需手动编辑配置文件。

有没有办法在运行时将数据库信息传递给休眠?如果没有,是否有另一个好的 Java ORM 库,您可以在运行时将这些信息传递给它?我正在使用 MySQL。

【问题讨论】:

    标签: java hibernate jpa orm openjpa


    【解决方案1】:

    事实上,PersistenceUtil.createEntityManagerFactory 方法允许您提供属性映射。使用此地图,您可以以动态方式提供用户名和密码。

    您如何做到这一点可能取决于您使用的具体框架。

    根据您问题中的标签,不清楚您是使用 Hibernate 还是使用 OpenJPA。

    Obtaining an EntityManagerFactory 部分中的 Open JPA 文档提供了您可以使用的属性列表。

    Map<String,String> properties = new HashMap<>();
    properties.put("openjpa.ConnectionUserName", "userName");
    properties.put("openjpa.ConnectionPassword", "password");
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyPersistenceUnit",properties);
    

    Hibernate 支持一组类似的属性。很可能您已经在 persistence.xml 文件中包含了它们。

    一些依赖注入框架,比如 Spring,甚至不需要 persistence.xml 文件,并且可以从其他一些地方动态读取这些属性,比如环境变量。

    【讨论】:

    • 我只使用 openJPA 表示我愿意使用它作为 Hibernate 无法实现的替代方案。这种传入属性的方法可以与 Hibernate 一起使用,还是只能与 OpenJPA 一起使用?
    • @ClickUpvote 它适用于所有 JPA 实现,如休眠、eclipse 链接和打开 JPA。
    • 如果您可以添加一个如何与 hibernate 一起使用的示例,我可以接受
    • @ClickUpvote 对于拥有 27k 声誉的人,我对您的要求感到惊讶。您可以在另一个答案中看到 Hibernate 属性的示例:stackoverflow.com/a/18743562/697630。我很确定你可以弄清楚其余的。
    • 那个正在使用 XML 文件,我正在寻找一种在运行时传递它的方法。我以前没有使用过任何 ORM。
    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2013-11-06
    • 2013-12-05
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多