2016-03-23 7 views
2

私はpersistence.xmlで定義されたdb接続プロパティを持つWebアプリケーションを持っています。Hibernate/JPAでパスワードランタイムを設定する

@PersistenceContextを使用して挿入されたエンティティマネージャで、保持されているマネージャの永続性を使用しています。

今日、DBのパスワードはpersistence.xmlファイルにありますが、私はむしろランタイムを設定します(ユーザーに問い合わせてください)。

パスワードランタイムで新しいEntityManagerを作成することはできますが、注入されたものをどのように「無効にする」ことができますか?

その他の良いアイデアやアプローチはありますか?

+0

明示的にユーザーに問い合わせるのではなく、プロパティまたは環境変数を使用することをお勧めします。 – chrylis

+0

クライアントは "ローカル"で実行され、適切な運用環境にはインストールされません。また、運用用パスワードはローカルファイルには入れません。彼らは、データベースに対して使用するパスワードを知っており、それを実行時に提供します。 – Ziggy000

答えて

0

はい、これは異なる環境のプロファイルを設定することで少し気になります。

パスワードの「実行時」の設定で十分ではありませんが、オブジェクトを置き換えることはできますが、スプリング・ビーン・プロファイルとして維持されます。

このようなものです。

@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_PROFILES_ACTIVE=production mvn spring-boot:run

としてあなたのプロフィールをアクティブにすることができます。パスワードを変更すると、接続は再起動する必要があります。理想的には、これは仕事を簡単にするはずです。

+0

これはちょっとしたことだと思います。この問題は、複数の環境を持つことではなく、アプリケーションがすでに実行されているときにコンテナ管理による永続性とパスワードの入力を組み合わせる方法です。 – Ziggy000

関連する問題