3

Dropwizard JDBI フレームワークを使用して Web サービスを開発しています。

ここで、yaml ファイルに db 構成を含める代わりに、「ユーザー指定のパラメーター」を使用したいと思います。つまり、db 構成はエンドポイント URL を介して提供されます。

  • dropwizard jdbi を介してカスタム クレデンシャルを使用できますか?

はいの場合、これを参照しながらコードでどのような変更を行う必要がありますか? ->

http://dropwizard.readthedocs.org/en/latest/manual/jdbi.html

通常の流れでは、サービスメソッドは実行メソッドで構成の詳細を取得することを理解しています-

-- 構成クラス

public class ExampleConfiguration extends Configuration {
    @Valid
    @NotNull
    @JsonProperty
    private DatabaseConfiguration database = new DatabaseConfiguration();

    public DatabaseConfiguration getDatabaseConfiguration() {
        return database;
    }
}

-- サービスクラス

@Override
        public void run(ExampleConfiguration config,
                        Environment environment) throws ClassNotFoundException {
            final DBIFactory factory = new DBIFactory();
            final DBI jdbi = factory.build(environment, config.getDatabaseConfiguration(), "postgresql");
            final UserDAO dao = jdbi.onDemand(UserDAO.class);
            environment.addResource(new UserResource(dao));
        }

-- そして yaml

database:
  # the name of your JDBC driver
  driverClass: org.postgresql.Driver

  # the username
  user: pg-user

  # the password
  password: iAMs00perSecrEET

  # the JDBC URL
  url: jdbc:postgresql://db.example.com/db-prod

しかし、この場合、リソース レベルで構成の詳細を取得する可能性があります...

みたいな -

@GET
@Path(value = "/getProduct/{Id}/{dbUrl}/{dbUname}/{dbPass}")
@Produces(MediaType.APPLICATION_JSON)
public Product getProductById(@PathParam(value = "Id") int Id,
        @PathParam(value = "dbUrl") String dbUrl,
        @PathParam(value = "dbUname") String dbUname,
        @PathParam(value = "dbPath") String dbPass) {

     //I have to connect to the DB here! using the params i have.         
     return new Product(); //should return the Product
}

誰かが私に方向性を教えていただければ幸いです。

4

2 に答える 2

0

Spring の世界では、データベース ルーターを使用するという概念があります (参照: https://spring.io/blog/2007/01/23/dynamic-datasource-routing/ )。

DBI に渡されたデータベース接続ファクトリのプロキシをセットアップできます。そのプロキシは、スレッド ローカル (おそらく) から資格情報を取得し、実際の接続を返し、実行タイプのプロキシを使用できるようにします。

于 2015-10-21T23:18:31.380 に答える