如何在 r2dbc 中建立数据库连接?
How to set up database connection in r2dbc?
如何在 r2dbc Spring 引导项目中设置 PostgreSQL 数据库连接?
我试过下面的配置,它连接到数据库但没有返回任何值
@Configuration
@EnableR2dbcRepositories
public class DatabaseConfig extends AbstractR2dbcConfiguration {
@Override
public ConnectionFactory connectionFactory() {
return ConnectionFactories.get("r2dbc:postgresql://localhost:5432/sample");
}
/*@Override
public ConnectionFactory connectionFactory() {
return ConnectionFactories.get(new PostgresqlConnectionFactory(
PostgresqlConnectionConfiguration.builder()
.host("localhost")
.port(5432)
.username("postgres")
.password("thirumal")
.database("sample")
.build()););
}*/
}
application.properties
spring.r2dbc.url=r2dbc:postgresql://localhost:5432/sample
spring.r2dbc.username=postgres
spring.r2dbc.password=thirumal
spring.r2dbc.pool.enabled=true
型号
@Data@NoArgsConstructor@AllArgsConstructor@Getter@Setter
@ToString
@Table("public.test")
public class Test implements Serializable{
/**
*
*/
private static final long serialVersionUID = 4205798689305488147L;
@Id//@Column("id")
private Long id;
private String name;
}
存储库
public interface TestRepository extends ReactiveCrudRepository<Test, Long> {
}
休息控制器:
@GetMapping("/test")
public Mono<Test> test() {
testRepository.findById(3L).subscribe(v->System.out.println("Value: " + v.toString()));
return testRepository.findById(3L);
}
它在控制台中打印输出,但在 JSON 中,我只得到空括号 {}
正确的配置方法是什么?是否需要任何其他配置?
这个配置适用于我,但我使用 DatabaseClient
而不是 R2dbcRepositories
来查询数据:
@Configuration
public class DatabaseConfiguration extends AbstractR2dbcConfiguration {
@Override
@Bean
public ConnectionFactory connectionFactory() {
return new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()
.host("localhost")
.port(5432)
.username("username")
.password("password")
.database("mydb")
.build());
}
}
然后在存储库中:
@Repository
public class MyRepository {
@Autowired
private DatabaseClient client;
public Flux<String> getString() {
....
}
}
更新:
如果它连接到数据库可能你的配置是正确的,你能分享一下用于获取数据的代码吗?
您得到的结果可能是 Mono
或 Flux
,但不是从中读取(尝试使用 subscribe()
)。
Mono<String> mono = db.getData();
mono.subscribe(value -> System.out.println(value));
我发现了问题。它是 Lombok
库,我没有在 eclipse 中安装它。
当我手动创建 getter
和 setter
方法时,它起作用了。
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
然后,我设置了 lombok
并使用了 @getter
和 @setter
,它起作用了。
如何在 r2dbc Spring 引导项目中设置 PostgreSQL 数据库连接?
我试过下面的配置,它连接到数据库但没有返回任何值
@Configuration
@EnableR2dbcRepositories
public class DatabaseConfig extends AbstractR2dbcConfiguration {
@Override
public ConnectionFactory connectionFactory() {
return ConnectionFactories.get("r2dbc:postgresql://localhost:5432/sample");
}
/*@Override
public ConnectionFactory connectionFactory() {
return ConnectionFactories.get(new PostgresqlConnectionFactory(
PostgresqlConnectionConfiguration.builder()
.host("localhost")
.port(5432)
.username("postgres")
.password("thirumal")
.database("sample")
.build()););
}*/
}
application.properties
spring.r2dbc.url=r2dbc:postgresql://localhost:5432/sample
spring.r2dbc.username=postgres
spring.r2dbc.password=thirumal
spring.r2dbc.pool.enabled=true
型号
@Data@NoArgsConstructor@AllArgsConstructor@Getter@Setter
@ToString
@Table("public.test")
public class Test implements Serializable{
/**
*
*/
private static final long serialVersionUID = 4205798689305488147L;
@Id//@Column("id")
private Long id;
private String name;
}
存储库
public interface TestRepository extends ReactiveCrudRepository<Test, Long> {
}
休息控制器:
@GetMapping("/test")
public Mono<Test> test() {
testRepository.findById(3L).subscribe(v->System.out.println("Value: " + v.toString()));
return testRepository.findById(3L);
}
它在控制台中打印输出,但在 JSON 中,我只得到空括号 {}
正确的配置方法是什么?是否需要任何其他配置?
这个配置适用于我,但我使用 DatabaseClient
而不是 R2dbcRepositories
来查询数据:
@Configuration
public class DatabaseConfiguration extends AbstractR2dbcConfiguration {
@Override
@Bean
public ConnectionFactory connectionFactory() {
return new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()
.host("localhost")
.port(5432)
.username("username")
.password("password")
.database("mydb")
.build());
}
}
然后在存储库中:
@Repository
public class MyRepository {
@Autowired
private DatabaseClient client;
public Flux<String> getString() {
....
}
}
更新:
如果它连接到数据库可能你的配置是正确的,你能分享一下用于获取数据的代码吗?
您得到的结果可能是 Mono
或 Flux
,但不是从中读取(尝试使用 subscribe()
)。
Mono<String> mono = db.getData();
mono.subscribe(value -> System.out.println(value));
我发现了问题。它是 Lombok
库,我没有在 eclipse 中安装它。
当我手动创建 getter
和 setter
方法时,它起作用了。
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
然后,我设置了 lombok
并使用了 @getter
和 @setter
,它起作用了。