1

需要帮忙

@Configuration
@EnableR2dbcRepositories(basePackages = "com.paymentservice.repository", databaseClientRef = "databaseClient")
public class PaymentR2dbcConfiguration extends AbstractR2dbcConfiguration {

    @Value("${payment.data.mssql.host}")
    private String host;

    @Value("${payment.data.mssql.port}")
    private int port;

    @Value("${payment.data.mssql.database}")
    private String database;

    @Value("${payment.data.mssql.username}")
    private String username;

    @Value("${payment.data.mssql.password}")
    private String password;

    /**
     * An implementation of {@link ConnectionFactory} for creating connections to
     * a Microsoft SQL Server database using R2DBC.
     *
     * @return A factory for creating {@link Connection}s.
     */
    @Override
    public ConnectionFactory connectionFactory() {
        return new MssqlConnectionFactory(
            MssqlConnectionConfiguration.builder()
                .host(host)
                .port(port)
                .database(database)
                .username(username)
                .password(password).build());
    }
}

我越来越

quote 在类路径资源 [org/springframework/boot/autoconfigure/data/r2dbc/R2dbcDataAutoConfiguration.class] 中定义的 bean 'r2dbcDatabaseClient' 无法注册。已在类路径资源 [com/paymentservice/configurations/PaymentR2dbcConfiguration.class] 中定义了具有该名称的 bean,并且禁用了覆盖。

我在用着

       <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-r2dbc</artifactId>
            <version>1.1.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>io.r2dbc</groupId>
            <artifactId>r2dbc-mssql</artifactId>
            <version>0.8.4.RELEASE</version>
        </dependency>

4

3 回答 3

0

如果您使用 Spring Boot starter 自动配置 R2dbc。并且您想通过AbstractR2dbcConfiguration.

  1. 如果您在应用程序中使用多个连接,并使用此配置添加另一个连接工厂,请尝试添加一个name属性@Bean来识别多个 bean。

     @Bean(name="myConn")
     @Override
     public ConnectionFactory connectionFactory() {}
    
  2. 如果要覆盖ConnectionFactorySpring Boot starter 创建的默认值,请在其上添加一个额外@Primary的。

     @Bean
     @Primary
     @Override
     public ConnectionFactory connectionFactory() {}
    
于 2020-09-11T03:43:48.770 回答
0

你错过了connectionFactoryBean. 在此处查看文档

    @Bean
    @Override
    public ConnectionFactory connectionFactory() {
        return new MssqlConnectionFactory(
            MssqlConnectionConfiguration.builder()
                .host(host)
                .port(port)
                .database(database)
                .username(username)
                .password(password).build());
    }

如果您在任何配置类中定义了任何覆盖 bean,问题仍然存在,那么您应该使用此属性:

spring.main.allow-bean-definition-overriding=true

从 Spring 5.1 开始,BeanDefinitionOverrideException引入了允许开发人员自动抛出异常以防止任何意外的 bean 覆盖。

于 2020-07-23T09:55:52.967 回答
-1

这是 Spring-boot 和 spring-data-r2dbc 中的一个未解决问题,请参阅帖子:

https://github.com/spring-projects/spring-data-r2dbc/issues/296

https://github.com/spring-projects/spring-boot/issues/21586

对我有用的解决方案是使用默认的R2dbcDataAutoConfiguration并删除自定义配置AbstractR2dbcConfiguration直到 Spring 团队修复它。

以下属性用于初始化R2dbcDataAutoConfiguration

spring:
  r2dbc:
    url: r2dbc:mssql://xx.xxx.xxx.xxx:6515/*****
    username: xxxx_xxxx
    password: xxxxx

对我有用的第二个解决方案是使用以下代码排除R2dbcDataAutoConfiguration 。

@SpringBootApplication(exclude = { R2dbcDataAutoConfiguration.class,
 R2dbcAutoConfiguration.class })
于 2020-07-23T12:56:11.450 回答