我有一个 Web 应用程序,其数据库连接属性在 persistence.xml 中定义。
我正在使用包含管理器持久性以及使用 @PersistenceContext 注入(inject)的实体管理器。
现在数据库的密码位于 persistence.xml 文件中,但我宁愿在运行时设置它(询问用户)。
我可以使用密码运行时创建一个新的 EntityManager,但如何“覆盖”注入(inject)的实体管理器?
还有其他好的想法/方法吗?
最佳答案
是的,这有点担心为不同的环境配置配置文件。
虽然它不足以满足您的密码“运行时”设置并替换对象,但它将作为 spring bean 配置文件进行维护。
类似这样的东西;
@Configuration
@Profile("dev")
public class StandaloneDataConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:com/bank/config/sql/schema.sql")
.addScript("classpath:com/bank/config/sql/test-data.sql")
.build();
}
}
假设您想要加载生产配置文件?
您必须使用@Profile("product")
定义另一个配置文件,并从类路径位置加载属性文件。
使用 Spring Boot,您可以将您的个人资料激活为
SPRING_PROFILES_ACTIVE=生产 mvn spring-boot:run
这可以让您在需要时更改密码并退回服务器。无论如何,当您更改密码时,连接需要重新启动。因此,理想情况下,这应该会使工作变得容易。
关于java - 使用 Hibernate/JPA 设置密码运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173261/