繁体   English   中英

如何在 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()););
    }*/

}

应用程序属性

spring.r2dbc.url=r2dbc:postgresql://localhost:5432/sample
spring.r2dbc.username=postgres
spring.r2dbc.password=thirumal
spring.r2dbc.pool.enabled=true

Model

@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> {

}

REST CONTROLLER:

@GetMapping("/test")
public Mono<Test> test() {
   testRepository.findById(3L).subscribe(v->System.out.println("Value: " + v.toString()));
   return testRepository.findById(3L);
}

它在控制台中打印 output 但在 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() {
        ....
    }
}

更新:

如果它连接到数据库可能您的配置是正确的,您能否分享用于获取数据的代码?

您可能会得到MonoFlux的结果,但没有从中读取(尝试使用subscribe() )。

Mono<String> mono = db.getData();
mono.subscribe(value -> System.out.println(value));

我发现了问题。 它是Lombok库,我没有安装在 eclipse 中。

当我手动创建gettersetter方法时,它起作用了。

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并且它起作用了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM