0

I'm getting the following error after my upgrade when running @SpringBootTest and @AutoConfigureTestDatabase No qualifying bean of type 'org.springframework.r2dbc.core.DatabaseClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

Am upgrading my springboot application to 2.7.10 and encountering the above when using @AutoConfigureTestDatabase annotation.

For the version used, it's as stated here: https://github.com/asyncer-io

<dependency>
            <groupId>io.asyncer</groupId>
            <artifactId>r2dbc-mysql</artifactId>
            <version>0.9.3</version>
        </dependency>

Project is creating a ConnectionFactory using the following as I would like to retain the spring.datasource details that's passed in via CICD

import io.r2dbc.spi.Option;
import io.asyncer.r2dbc.mysql.constant.SslMode;
import io.asyncer.r2dbc.mysql.constant.TlsVersions;
import io.r2dbc.spi.ConnectionFactories;
import io.r2dbc.spi.ConnectionFactory;
import io.r2dbc.spi.ConnectionFactoryOptions;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.r2dbc.config.AbstractR2dbcConfiguration;
import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories;

@Configuration
@EnableR2dbcRepositories
public class MySqlConnectionFactories extends AbstractR2dbcConfiguration {
  
  @Value("${spring.datasource.host}")
  public String host;
  
  @Value("${spring.datasource.db}")
  public String db;
  
  @Value("${spring.datasource.username}")
  public String userName;

  @Value("${spring.datasource.password}")
  public String password;

  @Override
  @Bean
  public ConnectionFactory connectionFactory() {
    ConnectionFactoryOptions options = ConnectionFactoryOptions.builder()
        .option(ConnectionFactoryOptions.DRIVER, "mysql")
        .option(ConnectionFactoryOptions.HOST, host)
        .option(ConnectionFactoryOptions.USER, userName)
        .option(ConnectionFactoryOptions.PORT, 3306)
        .option(ConnectionFactoryOptions.PASSWORD, password)
        .option(ConnectionFactoryOptions.DATABASE, db)
        .option(Option.valueOf("sslMode"), SslMode.VERIFY_IDENTITY)
        .option(Option.valueOf("tlsVersion"), TlsVersions.TLS1_2)
        .option(Option.valueOf("useServerPrepareStatement"), true)
        .option(Option.valueOf("tcpKeepAlive"), true) // optional, default false
        .option(Option.valueOf("tcpNoDelay"), true) // optional, default false
        .build();
    return ConnectionFactories.get(options);
  }
}

I tired upgrading some dependencies version and still it isn't working, current configuration as follows

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-r2dbc</artifactId>
        </dependency>
        <dependency>
            <groupId>io.asyncer</groupId>
            <artifactId>r2dbc-mysql</artifactId>
            <version>0.9.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
                <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>8.0.26</version>
        </dependency>
so_kirin
  • 1
  • 1

0 Answers0