春季数据如何从r2dbc从Application.yml连接到Oracle?
application.yml
spring:
r2dbc:
url: r2dbc:oracle:thin//{host}:{port}/{service-name}
username: {username}
password: {password}这并不初始化DB Config。
重写也不起作用。配置
@Configuration
@EnableR2dbcRepositories(basePackages = {package})
public class DbConfig extends AbstractR2dbcConfiguration
{
@Override
@Bean
public ConnectionFactory connectionFactory() {
return ConnectionFactories.get(ConnectionFactoryOptions.parse(
{url})
.mutate()
.option(ConnectionFactoryOptions.USER, {username})
.option(ConnectionFactoryOptions.PASSWORD, {password})
.build());
}
}在build.gradle中添加了这些依赖项
implementation group: 'com.oracle.database.r2dbc', name: 'oracle-r2dbc', version: '0.4.0'
implementation group: 'org.springframework.data', name: 'spring-data-r2dbc', version: '1.4.2'
implementation group: 'io.r2dbc', name: 'r2dbc-spi', version: '0.9.1.RELEASE'这也不会创建与R2dbc的连接。
虽然r2dbc-spi在springframework.data中隐式存在,但它并不采用导致属性丢失错误的最新版本,但添加了r2dbc-spi。
发布于 2022-03-16 07:12:45
我没有在Oracle中测试以下内容,而是在MySQL上进行了测试。因为应用程序配置和相关的Java元数据都是通用的,所以它也应该适用于Oracle DB。
就像JDBC一样,R2DBC需要有:
@Configuration
@EnableR2dbcRepositories
public class R2dbcConfig extends AbstractR2dbcConfiguration {
private R2dbcProperties r2dbcProperties; // 1. a property class R2dbcProperties
public R2dbcConfig(R2dbcProperties rp) {
this.r2dbcProperties = rp;
}
@Override
@Bean
public ConnectionFactory connectionFactory() {
// a connection class that loads properties.
return ConnectionFactoryBuilder.of(r2dbcProperties, ()->EmbeddedDatabaseConnection.NONE).build();
}
// other configurations...
}需要注意的一点是,org.springframework.boot.autoconfigure.r2dbc.R2dbcProperties包含基本配置。驱动程序可以支持更多的OPTION,例如,在r2dbc-mysql GH页面上,它至少有这些OPTION。
ConnectionFactoryOptions options = ConnectionFactoryOptions.builder()
.option(DRIVER, "mysql")
.option(HOST, "127.0.0.1")
.option(USER, "root")
.option(PORT, 3306) // optional, default 3306
.option(PASSWORD, "database-password-in-here") // optional, default null, null means has no password
.option(DATABASE, "r2dbc") // optional, default null, null means not specifying the database
.option(CONNECT_TIMEOUT, Duration.ofSeconds(3)) // optional, default null, null means no timeout
.option(Option.valueOf("socketTimeout"), Duration.ofSeconds(4)) // optional, default null, null means no timeout
.option(SSL, true) // optional, default sslMode is "preferred", it will be ignore if sslMode is set
.option(Option.valueOf("sslMode"), "verify_identity") // optional, default "preferred"
.option(Option.valueOf("sslCa"), "/path/to/mysql/ca.pem") // required when sslMode is verify_ca or verify_identity, default null, null means has no server CA cert
.option(Option.valueOf("sslCert"), "/path/to/mysql/client-cert.pem") // optional, default null, null means has no client cert
.option(Option.valueOf("sslKey"), "/path/to/mysql/client-key.pem") // optional, default null, null means has no client key
.option(Option.valueOf("sslKeyPassword"), "key-pem-password-in-here") // optional, default null, null means has no password for client key (i.e. "sslKey")
.option(Option.valueOf("tlsVersion"), "TLSv1.3,TLSv1.2,TLSv1.1") // optional, default is auto-selected by the server
.option(Option.valueOf("sslHostnameVerifier"), "com.example.demo.MyVerifier") // optional, default is null, null means use standard verifier
.option(Option.valueOf("sslContextBuilderCustomizer"), "com.example.demo.MyCustomizer") // optional, default is no-op customizer
.option(Option.valueOf("zeroDate"), "use_null") // optional, default "use_null"
.option(Option.valueOf("useServerPrepareStatement"), true) // optional, default false
.option(Option.valueOf("tcpKeepAlive"), true) // optional, default false
.option(Option.valueOf("tcpNoDelay"), true) // optional, default false
.option(Option.valueOf("autodetectExtensions"), false) // optional, default false
.build();https://stackoverflow.com/questions/71390390
复制相似问题