Postgres spring boot R2dbc 应用程序中缺少 DatabaseClient
精选
转载
我认为您的问题在于您如何启动数据库 connectionFactory。根据您需要扩展和覆盖的文档AbstractR2dbcConfiguration#connectionFactory
@Configuration
@EnableR2dbcRepositories
public class PostgresConfig extends AbstractR2dbcConfiguration {
@Override
@Bean
public ConnectionFactory connectionFactory() {
return new PostgresqlConnectionFactory(
PostgresqlConnectionConfiguration.builder()
.host("localhost")
.port(5432)
.username("postgres")
.password("mysecretpassword")
.database("myDatabase")
.build());
}
}
@Configuration
@EnableR2dbcRepositories
public class DatabaseConfiguration {
@Value("${spring.data.postgres.host}") private String host;
@Value("${spring.data.postgres.port}") private int port;
@Value("${spring.data.postgres.database}") private String database;
@Value("${spring.data.postgres.username}") private String username;
@Value("${spring.data.postgres.password}") private String password;
@Bean
public PostgresqlConnectionFactory connectionFactory() {
return new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()
.host(host)
.port(port)
.database(database)
.username(username)
.password(password)
.build());
}
}
官方文档
这种方法允许您使用标准的 io.r2dbc.spi.ConnectionFactory 实例,容器使用 Spring 的 AbstractR2dbcConfiguration。
与直接注册 ConnectionFactory 实例相比,配置支持还有一个额外的优势,即还为容器提供了一个 ExceptionTranslator 实现,该实现将 R2DBC 异常转换为 Spring 的可移植 DataAccessException 层次结构中的异常,用于使用 @Repository 批注注释的数据访问类。
这个层次结构和@Repository 的使用在 Spring 的 DAO 支持特性中进行了描述。
AbstractR2dbcConfiguration 还注册了数据库交互和存储库实现所需的 DatabaseClient。
R2DBC 官方文档