【发布时间】:2020-10-09 23:34:47
【问题描述】:
在 Spring Boot 应用程序中,我连接到 Postgres 数据库。对于特定要求,我需要使用参数化的 DriverClass,它是 org.postgresql.Driver 的子类。
如何使用参数化的 driverClass 构造 DataSource 对象?
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("com.apps.CustomPostgresqlDriver") // Not sure how to pass a string argument to its constructor
.build()
客户驱动程序com.apps.CustomPostgresqlDriver是这样定义的。
Public class CustomPostgresqlDriver implements Driver {
public void CustomPostgresqlDriver(String appParam){
....
}
...
}
我没有看到使用上述单参数构造函数实例化(或让 Spring 实例化)驱动程序的任何选项。示例:
new CustomPostgresqlDriver("my-app-db-param")
【问题讨论】:
-
方法错误。您可以通过“连接属性”将属性传递给驱动程序,这些属性作为 JDBC URL 的一部分给出。
-
嗨@Andreas,感谢您的回复。我在 qts 中添加了更多说明。您对建议的方法有任何 ex/ref 吗?
-
您的意思是类似于 PostgreSQL JDBC driver documentation 显示可以添加到 URL 的属性?
-
没有。如果我们只提到
dataSourceBuilder.driverClassName("com.apps.CustomPostgresqlDriver"),那么spring 将实例化一个CustomPostgresqlDriver 对象。正确的 ?我想将一个字符串参数传递给类(CustomPostgresqlDriver)的构造函数。我相信应该有某种方法来处理这种结构,或者让spring绕过字符串参数进行实例化(我猜是Spring使用反射)。 -
为什么它绝对必须是构造函数?为什么不能是
Driver的connect()方法?您知道,该方法接收 JDBC URL 和具有所有不错属性的Properties对象。您知道,您可以在驱动程序类名称旁边 指定属性。停止如此专注于构造函数。那是XY problem。
标签: java spring postgresql spring-boot spring-data-jpa