Commit f06c5876 authored by Ravinder Pannala's avatar Ravinder Pannala

Added Real time scenarios for Webflux

parent f5a9e3dc
package com.example.nisum.webfluxmongodb.Aggregation.config;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration;
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
@Configuration
//@EnableMongoRepositories(basePackages = "com.example.nisum.webfluxmongodb.Aggregation.repository")
public class MongoDbConfig extends AbstractReactiveMongoConfiguration {
@Value("${mongodb.database.name}")
private String databaseName;
@Value("${mongodb.database.host}")
private String hostName;
@Override
protected String getDatabaseName() {
return databaseName;
}
@Override
public MongoClient reactiveMongoClient() {
String name = hostName;
return MongoClients.create(name);
}
@Bean
ReactiveMongoTemplate reactiveMongoTemplate() {
return new ReactiveMongoTemplate(reactiveMongoClient(), getDatabaseName());
}
}
package com.example.nisum.webfluxmongodb.Aggregation.controller;
import com.example.nisum.webfluxmongodb.Aggregation.model.Population;
import com.example.nisum.webfluxmongodb.Aggregation.model.StatePopulation;
import com.example.nisum.webfluxmongodb.Aggregation.service.AggregationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@RestController
@RequestMapping("/api/aggregation")
public class AggregationController {
@Autowired
private AggregationService aggregationService;
@RequestMapping("/pop")
private Flux<StatePopulation> getStatePopulation(){
Flux<StatePopulation> allStatePopulation = aggregationService.getAllStatePopulation();
return allStatePopulation;
}
@RequestMapping("/getAll")
private Mono<Population> getAll(){
Mono<Population> allStates = aggregationService.getAllStates();
allStates.subscribe(s->System.out.println("Output-->"+s));
return allStates;
}
}
package com.example.nisum.webfluxmongodb.Aggregation.model;
import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Data
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Document
public class Population {
@Id
private String id;
private String city;
private String[] location;
private String state;
private double population;
}
package com.example.nisum.webfluxmongodb.Aggregation.model;
import lombok.*;
@Data
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class StatePopulation {
String state;
double population;
}
package com.example.nisum.webfluxmongodb.Aggregation.service;
import com.example.nisum.webfluxmongodb.Aggregation.model.Population;
import com.example.nisum.webfluxmongodb.Aggregation.model.StatePopulation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
import org.springframework.data.mongodb.core.aggregation.*;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.Collections;
@Service
public class AggregationService {
@Autowired
private ReactiveMongoTemplate reactiveMongoTemplate;
public Flux<StatePopulation> getAllStatePopulation() {
GroupOperation groupOperation = Aggregation.group("state").sum("pop").as("StatePop");
SortOperation sort = Aggregation.sort(Sort.by(Collections.singletonList(Sort.Order.asc("state"))));
Aggregation aggregation = Aggregation.newAggregation(groupOperation, sort);
Flux<StatePopulation> aggregate = reactiveMongoTemplate.aggregate(aggregation, StatePopulation.class, StatePopulation.class);
return aggregate;
}
public Mono<Population> getAllStates(){
Query query = new Query(Criteria.where("city").is("AGAWAM"));
Mono<Population> all = reactiveMongoTemplate.findOne(query, Population.class);
return all;
}
}
......@@ -2,8 +2,10 @@ package com.example.nisum.webfluxmongodb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.reactive.config.EnableWebFlux;
@SpringBootApplication
@EnableWebFlux
public class webfluxMongoDBApplication {
public static void main(String[] args) {
......
spring.data.mongodb.uri=mongodb://localhost:27017/
spring.data.mongodb.database=school
mongodb.database.name=Population
mongodb.database.host=mongodb://localhost:27017/
logging.level.org.springframework.data.mongodb.core.ReactiveMongoTemplate=DEBUG
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment