英文:
How to construct a DB DataSource using parameterized custom driver class?
问题
在Spring Boot应用程序中,我正在连接到一个Postgres数据库。根据特定的要求,我需要使用一个参数化的DriverClass,它是org.postgresql.Driver
的子类。
如何使用参数化的driverClass构建DataSource
对象?
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("com.apps.CustomPostgresqlDriver") // 不确定如何将字符串参数传递给其构造函数
.build();
自定义的驱动程序com.apps.CustomPostgresqlDriver定义如下。
public class CustomPostgresqlDriver implements Driver {
public CustomPostgresqlDriver(String appParam){
....
}
...
}
我没有看到任何选项可以使用上述的单参数构造函数实例化(或让Spring实例化)驱动程序。示例:
new CustomPostgresqlDriver("my-app-db-param")
英文:
In a Spring Boot app, I am connecting to a Postgres DB. For a specific requirement, I need to use a parameterized DriverClass which is a subclass of org.postgresql.Driver
.
How can I construct the DataSource
object using a parameterized driverClass ?
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("com.apps.CustomPostgresqlDriver") // Not sure how to pass a string argument to its constructor
.build()
The customer driver com.apps.CustomPostgresqlDriver is defined like this.
Public class CustomPostgresqlDriver implements Driver {
public void CustomPostgresqlDriver(String appParam){
....
}
...
}
I don't see any option to instantiate (or let Spring instantiate) the driver with the above one-arg constructor. Example:
new CustomPostgresqlDriver("my-app-db-param")
答案1
得分: 1
你可以使用 DataSourceBuilder 完成这个任务:
首先,在 application.yml 中配置两个不同的数据源设置,如下所示:
spring:
datasource:
main:
driver-class-name: ${ds.driver}
url: ${ds.url}
username: ${ds.username}
password: ${ds.password}
hikari:
maximum-pool-size: ${ds.maximum.pool.size}
minimum-idle: ${ds.minimum.idle}
connection-timeout: 10000
connection-test-query: SELECT 1
read:
driver-class-name: ${ds.driver}
url: ${ds.read.url}
username: ${ds.read.username}
password: ${ds.read.password}
hikari:
maximum-pool-size: ${ds.read.maximum.pool.size}
minimum-idle: ${ds.read.minimum.idle}
connection-timeout: 10000
connection-test-query: SELECT 1
其次,使用以下代码通过 DataSourceBuilder 注入它们:
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
@Primary
@Bean
@ConfigurationProperties("spring.datasource.main")
public DataSource main() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.read")
public DataSource read() {
return DataSourceBuilder.create().build();
}
英文:
You can use DataSourceBuilder to finish this task:
The first config two different ds setting in application.yml like as below:
spring:
datasource:
main:
driver-class-name: ${ds.driver}
url: ${ds.url}
username: ${ds.username}
password: ${ds.password}
hikari:
maximum-pool-size: ${ds.maximum.pool.size}
minimum-idle: ${ds.minimum.idle}
connection-timeout: 10000
connection-test-query: SELECT 1
read:
driver-class-name: ${ds.driver}
url: ${ds.read.url}
username: ${ds.read.username}
password: ${ds.read.password}
hikari:
maximum-pool-size: ${ds.read.maximum.pool.size}
minimum-idle: ${ds.read.minimum.idle}
connection-timeout: 10000
connection-test-query: SELECT 1
The second inject them with DataSourceBuilder as below:
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
@Primary
@Bean
@ConfigurationProperties("spring.datasource.main")
public DataSource main() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.read")
public DataSource read() {
return DataSourceBuilder.create().build();
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论