gpt4 book ai didi

java - 在使用 DropWizard JDBI 时使用自定义凭据

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:00 26 4
gpt4 key购买 nike

我正在使用 Dropwizard JDBI 框架开发网络服务。

现在,我不想在 yaml 文件中使用数据库配置,而是想使用“用户指定的参数”,我的意思是,数据库配置将通过端点 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
}

如果有人能指出我的方向,我将不胜感激。

最佳答案

为什么不直接使用 JDBI?

@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 = "dbPass") String dbPass) {
DataSource ds = JdbcConnectionPool.create(dbUrl, dbUname, dbPass);
DBI dbi = new DBI(ds);
ProductDAO dao = dbi.open(ProductDao.class);
Product product = dao.findById(id);
dao.close();
ds.dispose();
return product;
}

@RegisterMapper(ProductMapper.class)
static interface ProductDao {
@SqlQuery("select id from product_table where id = :id") // Whatever SQL query you need to product the product
Product findById(@Bind("id") int id);

@SqlQuery("select * from product_table")
Iterator<Product> findAllProducts();
}

static class ProductMapper implements ResultSetMapper<Product> {
public Product map(int index, ResultSet r, StatementContext ctx) throws SQLException {
return new Product(r.getInt("id")); // Whatever product constructor you need
}
}

关于java - 在使用 DropWizard JDBI 时使用自定义凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23613492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com