当前位置: 首页 > 知识库问答 >
问题:

如何从A使用r2dbc连接到Oracle DBpplication.yml?

李华茂
2023-03-14

如何从A使用r2dbc连接到Oracle DBpplication.yml?

application.yml
spring:
   r2dbc:
        url: r2dbc:oracle:thin//{host}:{port}/{service-name}
        username: {username}
        password: {password}

这不会初始化DB配置。

覆盖也不起作用。配置

@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());
    }
}

在生成中添加了这些依赖项。格拉德尔

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中隐式存在,也会被添加。数据不采用导致属性丢失错误的最新版本。

共有1个答案

景星华
2023-03-14

我没有在Oracle DB中测试以下内容,而是在MySQL上测试。因为应用程序配置和相关Java元数据都是通用的,所以它也应该适用于Oracle DB。

与JDBC一样,R2DBC需要具备:

  1. 属性类
@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。靴子自动配置。r2dbc。R2dbcProperties包含基本配置。驱动程序可以支持更多的选项,例如,在r2dbc mysql GH页面上,它至少有这些选项。

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();

 类似资料:
  • 在java reactor中,r2dbc。我有两个表A和B。我还为它们定义了存储库。如何获取由连接B组成的数据? 我只提出了以下方法:调用databaseClient。从A中选择,然后在循环调用中从B中选择。 但我想要更有效、更被动的方式。怎么做?

  • 我正在尝试使用reactive连接spring项目中的oracle数据库。我需要符合Oracle TNS规范的反应式数据库连接。你能帮忙吗?

  • 我无法使用spring webflux和r2dbc(使用r2dbc池驱动程序)打开超过10个连接。我的配置如下所示: 当我指定10个以上的连接时,会出现如下错误: 此外,连接的数量保持与初始大小相同。未创建新连接。

  • 由于SSL配置错误,队列管理器jmsdemo无法用于客户端连接。 (AMQ4199)由于SSL 配置错误,队列管理器jmsdemo无法用于客户端连接。(AMQ4199)严重程度:30(严重错误)说明:用户正试图使用安全连接连接到远程队列管理器。响应:检查目标队列管理器和本地SSL信任存储区的SSL配置。 b)以下错误信息提取为“AMQERR01”错误文件(来自服务器端) 谢谢JK

  • 问题内容: 我正在使用Weblogic,Ejb3.0。Java 1.6 我需要通过Java代码访问Active Directory。我读了几种方法(Kerberos,LDAP) 有人可以建议我这样做的舒适​​方式吗?在哪里可以找到一些完整的代码示例, 谢谢,雷。 问题答案: 这是一个简单的代码,用于在W2K3上的JNDI中进行身份验证并进行LDAP搜索:

  • 问题内容: 我想将无头铬用于使用selenium的自动化测试。(https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md) 我确实已经在9222上运行了无头版本。因此,如果我打开http://10.252.100.33:9222/json/,我会得到 下一步,我想将selenium连接到无头铬上。但是当我尝试