hibernate的问题是,你需要将数据库信息(用户名/密码等)放在xml文件中。但是,如果您在Amazon Web服务上部署应用程序,例如在Beanstalk上,您将通过System.getProperty("RDS_DATABASE_USER")
等传递数据信息。优点是,如果创建了更多应用程序实例,则会传递数据库信息自动启动,无需手动编辑配置文件。
有没有办法在运行时将db info传递给hibernate?如果没有,是否有另一个优秀的java ORM库,您可以在运行时传递此信息?我正在使用MySQL。
答案 0 :(得分:2)
事实上,方法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文件,并且可以从其他一些地方动态读取这些属性,例如环境变量。