我想从 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()
);
}
}