2016-06-01 13 views
1

データソースを動的に設定する方法は?春で以下のように:実行時のDataSourceの設定Java EE 7

@Bean(name = "dataSource") 
    public DriverManagerDataSource dataSource() { 
     DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(); 
     driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/userbase"); 
     driverManagerDataSource.setUsername("root"); 
     driverManagerDataSource.setPassword("root"); 
     return driverManagerDataSource; 
    } 

私は春からのJava EE 7のエンタープライズ・アプリケーションにだけこの機能をインポートすることはできますか?

+1

dataSourceマネージャの代わりにdataSourceを使用するように切り替える必要があります。 –

+1

この投稿はあなたに役立つかもしれません:http://stackoverflow.com/questions/13507522/dynamically-change-spring-data-source –

+0

@MatthewFontana http://docs.oracle.com/javaee/7/api /javax/annotation/sql/DataSourceDefinition.html? –

答えて

1

いずれのJava EE 7実装でも、サーバーのJNDIディレクトリに名前を持つjavax.sql.DataSourceを定義する機能があります。

あなたはそれが何かjavax.annotations.Resource注釈を使用して、アプリケーションのクライアントクラスで、それへの参照を注入して使用することができます:あなたは、動的に、彼らは含めることができ、データベースの資格情報を指定する必要がない場合は

public class SomeDatabaseClient { 

    @Resource("jdbc/myDataSource") 
    javax.sql.DataSource myDataSource; 

    public void useTheDatabase(String username, String password) { 

     try (Connection con = myDataSource.getConnection(username, password); 
       PreparedStatement ps = con.prepareStatement(...); 
       ResultSet rs = ps.executeQuery() { 
       // process the result set 
      ... 
     } catch (SQLException e) { 
       // handle errors 
     } 
    } 
} 

をサーバーのDataSource定義に追加します。

ユーザーパスワードを安全に管理することは簡単ではないため、この方法でユーザーパスワードを使用するにはかなりの理由が必要です。

また、同じコードで必要な場合は、このように動作するようにSpring Frameworkの設定を設定することもできます。

+0

私は、OPが明示的にサーバー側ではなくWebアプリケーション側でデータソースを作成して管理したいという印象を受けました(これは本当に不思議で怪しいですが、Springのスニペットが実際に行うことです) 。 – BalusC

+0

@ Steve C、私は実際にはフレームワークを使いたくないので、Java EE 7で作業しています。これは私の企業の要件です。その理由は、DBのテーブルの監査情報を管理するためです。あなたはトリガを知っています:NEW。[FieldName]:= USER; (Oracle)ユーザーは資格情報でログインします。私はこのSpringのスニペットを見て、私が実際に望む機能のように見えます。それともそれを得るための最適なアプローチを知っていますか? –

+1

上記のソリューションは純粋なJava EEです。フレームワークは必要ありません –

関連する問題