【问题标题】:Set password runtime with Hibernate / JPA使用 Hibernate / JPA 设置密码运行时
【发布时间】:2016-07-10 10:53:59
【问题描述】:

我有一个 web 应用程序,其 db 连接属性在 persistence.xml 中定义。

我正在使用包含管理器持久性和使用 @PersistenceContext 注入的实体管理器。

今天数据库的密码在 persistence.xml 文件中,但我宁愿设置它运行时(询问用户)。

我可以使用密码运行时创建一个新的 EntityManager,但是如何“覆盖”注入的呢?

还有其他好的想法/方法吗?

【问题讨论】:

  • 与其明确询问用户,不如使用属性或环境变量。
  • 客户端将在“本地”运行,并且没有安装在适当的生产环境中,我们不希望本地文件中的生产密码。他们知道对数据库使用什么密码,并会在运行时提供它。

标签: java hibernate jpa


【解决方案1】:

是的,这有点担心为不同环境配置配置文件。

虽然它不足以满足您的“运行时”密码设置并替换对象,但它将作为 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("production") 定义另一个配置文件并从类路径位置加载属性文件。

使用 spring boot,您可以将您的个人资料激活为

SPRING_PROFILES_ACTIVE=production mvn spring-boot:run

这可以让您在需要时更改密码并退回服务器。无论如何,当您更改密码时,连接需要重新启动。所以理想情况下,这应该会使工作变得容易。

【讨论】:

  • 我认为这有点偏颇。问题不在于拥有多个环境,而在于如何在应用程序已经运行时将容器管理的持久性与提供密码结合起来。
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2017-09-23
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多