Я учусь R2DBC
с пружинным ботинком WebFlux
и Postgresql
. Я успешно настроил базу данных PostgreSQL, которая работает на моем локальном компьютере. Я использовал следующие зависимости и плагины.
plugins {
id 'org.springframework.boot' version '2.3.0.BUILD-SNAPSHOT'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
id 'eclipse'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
compile group: 'io.r2dbc', name: 'r2dbc-postgresql', version: '1.0.0.M7'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testImplementation 'io.projectreactor:reactor-test'
}
Пожалуйста, найдите мой код
@SpringBootApplication
@EnableR2dbcRepositories
public class DemoServiceApplication {
public static void main(String[] args) {
SpringApplication.run(DemoServiceApplication.class, args);
}
}
@RestController
@RequiredArgsConstructor
class ResourceController {
final ResourceRepository resourceRepository;
@GetMapping("/method1")
public Flux<Resource> getResourcesMethod1(){
return resourceRepository.deleteAll().thenMany(
Flux.just(new Resource("name1", "description1", new Date()), new Resource("name2", "description2", new Date()))
.flatMap(resourceRepository::save))
.thenMany(
resourceRepository.findAll()
.flatMap(data -> {
return Flux.just(data);
}));
}
@GetMapping("/method2")
public Flux<Resource> getResourcesMethod2(){
return resourceRepository.findAll();
}
}
@Configuration
class DatabaseConfig extends AbstractR2dbcConfiguration {
@Bean
public ConnectionFactory connectionFactory() {
return new PostgresqlConnectionFactory(
PostgresqlConnectionConfiguration.builder()
.host("localhost")
.port(5432)
.username("postgres")
.password("password")
.database("mydatabase")
.build());
}
}
interface ResourceRepository extends ReactiveCrudRepository<Resource, Integer> {
}
@Data
class Resource {
@Id
Integer id;
final String name;
final String description;
final Date createdDate;
public Resource(String name, String description, Date createdDate) {
this.name = name;
this.description = description;
this.createdDate = createdDate;
}
}
Из приведенного выше кода (используя getResourcesMethod1
) я смог удалить данные и успешно вставить данные в таблицу базы данных.
Однако я не смог получить никакого ответа от обеих этих конечных точек отдыха. Я использовал Postman для тестирования, и он не смог получить ничего ... Просто буферизовал ...
Что я здесь делаю не так? Я мог бы пропустить очень важную вещь c. Любая помощь будет благодарна.
РЕДАКТИРОВАТЬ
Если я распечатаю поток в getResourcesMethod2
, он будет напечатан как FluxOnErrorResume
вместо FluxArray
, хотя . Я думаю, что это может быть связано с конфигурацией базы данных. Но я не могу найти курс root для этого ..