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>