0

我想从 Postgres 表中填充 Redis,并有一个可行的方法。我希望此方法在应用程序启动时运行。但是,当我尝试使用@PostConstruct时,似乎运行该方法但没有成功。我正在使用 R2DBC 连接 Postgres。

我通过创建一个调用此方法的端点对此进行了测试。启动时,我会看到打印的“测试”消息,这意味着该方法已执行。但是,没有填充 Redis。但是当我到达端点时,我看到“测试”消息并且 Redis 已填充。有没有搞错?

@PostConstruct
public Mono<List<Boolean>> writeRedisFromPostgres() {
    locationRepository.flushAll();
    System.out.println("test");
    return locationPostgresRepository.findAll().flatMap(
        location -> locationRepository.writeLocation(location)
    ).collectList();
}

看起来locationPostgresRepository.findAll()只有在启动时才返回空。我在上面的方法以及我的 PostgresConfiguration 类中都放了断点,并且首先执行配置类...

@Configuration
class PostgresConfig extends AbstractR2dbcConfiguration {

    @Value("${postgres.host}")
    private String host;

    @Value("${postgres.port}")
    private Integer port;

    @Value("${postgres.username}")
    private String username;

    @Value("${postgres.password}")
    private String password;

    @Value("${postgres.database}")
    private String database;

    @Override
    @Bean
    public ConnectionFactory connectionFactory() {
        return new PostgresqlConnectionFactory(
            PostgresqlConnectionConfiguration.builder()
                .host(host)
                .port(port)
                .username(username)
                .password(password)
                .database(database)
                .build()
        );
    }
}
4

1 回答 1

0

因为你没有订阅你的 Mono:https ://projectreactor.io/docs/core/release/reference/#reactive.subscribe

于 2019-11-28T22:50:44.803 回答