From cf93e78f277e918285c7b812f757885e841ca8ac Mon Sep 17 00:00:00 2001 From: Jay Date: Mon, 6 Jan 2020 20:58:51 -0800 Subject: [PATCH] updating README.md and adding docker-compose.yml --- README.md | 19 +++++ docker-compose.yml | 24 ++++++ pom.xml | 2 +- .../repository/CustomerRepository.java | 75 +++++++++++++++++++ .../repository/CustomerRepositoryCombo.java | 8 ++ .../service/CustomerServiceImpl.java | 17 ++--- src/main/resources/application.yml | 1 + 7 files changed, 135 insertions(+), 11 deletions(-) create mode 100644 docker-compose.yml create mode 100644 src/main/java/com/ehsaniara/multidatasource/repository/CustomerRepository.java create mode 100644 src/main/java/com/ehsaniara/multidatasource/repository/CustomerRepositoryCombo.java diff --git a/README.md b/README.md index 24b6e94..7796283 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,12 @@ Or Select the following share link: Spring Initializr Initializr generates spring boot project with just what you need to start quickly!start.spring.io +for simplicity just run: +```docker-compose up --force-recreate``` + +the docker-compose.yml is already in the project which contains 2 PostgresSql in 2 different ports, with ```demo``` DataBase + +Note: you can always uninstall it as: ```docker-compose down``` if you needed to. Once you Generate and download the zip file, you should have similar POM file as: ```xml @@ -219,4 +225,17 @@ public class CustomerServiceImpl implements CustomerService { } } ``` +Now if run this line you create customer in DB1: +``` +curl -H "Content-Type: application/json" --request POST --data '{"name":"Jay"}' http://localhost:8080/customer +``` +OR +``` +curl -H "Content-Type: application/json" --request PUT --data '{"id":1 , "name":"Jay ehsaniara"}' http://localhost:8080/customer +``` +But if you run this line you getting data from DB2: +``` + curl --request GET http://localhost:8080/customer/1 +``` +Note: you need to insert customer manually in DB2 since it has no pre customer. and we haven't setup Postgres Replication yet \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1a4e2f0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,24 @@ +version: '3.1' +services: + db1: + image: postgres + container_name: postgres1 + volumes: + - ./postgres-data1:/var/lib/postgresql/data + ports: + - "5432:5432" + environment: + POSTGRES_PASSWORD: postgres_user_for_db_write + POSTGRES_USER: postgres + POSTGRES_DB: demo + db2: + image: postgres + container_name: postgres2 + volumes: + - ./postgres-data2:/var/lib/postgresql/data + ports: + - "5433:5432" + environment: + POSTGRES_PASSWORD: postgres_user_for_db_read + POSTGRES_USER: postgres + POSTGRES_DB: demo \ No newline at end of file diff --git a/pom.xml b/pom.xml index 649246b..f754e0c 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.example demo 0.0.1-SNAPSHOT - demo + Spring Boot Multiple DataSource Demo project for Spring Boot diff --git a/src/main/java/com/ehsaniara/multidatasource/repository/CustomerRepository.java b/src/main/java/com/ehsaniara/multidatasource/repository/CustomerRepository.java new file mode 100644 index 0000000..5404c74 --- /dev/null +++ b/src/main/java/com/ehsaniara/multidatasource/repository/CustomerRepository.java @@ -0,0 +1,75 @@ +package com.ehsaniara.multidatasource.repository; + +import com.ehsaniara.multidatasource.model.Customer; +import com.ehsaniara.multidatasource.repository.readRepository.CustomerReadRepository; +import com.ehsaniara.multidatasource.repository.writeRepository.CustomerWriteRepository; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class CustomerRepository implements CustomerRepositoryCombo { + + private final CustomerReadRepository readRepository; + private final CustomerWriteRepository writeRepository; + + public CustomerRepository(CustomerReadRepository customerReadRepository, CustomerWriteRepository customerWriteRepository) { + this.readRepository = customerReadRepository; + this.writeRepository = customerWriteRepository; + } + + @Override + public S save(S s) { + return writeRepository.save(s); + } + + @Override + public Iterable saveAll(Iterable iterable) { + return writeRepository.saveAll(iterable); + } + + @Override + public Optional findById(Long aLong) { + return readRepository.findById(aLong); + } + + @Override + public boolean existsById(Long aLong) { + return readRepository.existsById(aLong); + } + + @Override + public Iterable findAll() { + return readRepository.findAll(); + } + + @Override + public Iterable findAllById(Iterable iterable) { + return readRepository.findAllById(iterable); + } + + @Override + public long count() { + return readRepository.count(); + } + + @Override + public void deleteById(Long aLong) { + writeRepository.deleteById(aLong); + } + + @Override + public void delete(Customer customer) { + writeRepository.delete(customer); + } + + @Override + public void deleteAll(Iterable iterable) { + writeRepository.deleteAll(iterable); + } + + @Override + public void deleteAll() { + writeRepository.deleteAll(); + } +} diff --git a/src/main/java/com/ehsaniara/multidatasource/repository/CustomerRepositoryCombo.java b/src/main/java/com/ehsaniara/multidatasource/repository/CustomerRepositoryCombo.java new file mode 100644 index 0000000..9612596 --- /dev/null +++ b/src/main/java/com/ehsaniara/multidatasource/repository/CustomerRepositoryCombo.java @@ -0,0 +1,8 @@ +package com.ehsaniara.multidatasource.repository; + +import com.ehsaniara.multidatasource.repository.readRepository.CustomerReadRepository; +import com.ehsaniara.multidatasource.repository.writeRepository.CustomerWriteRepository; + +public interface CustomerRepositoryCombo extends CustomerReadRepository, CustomerWriteRepository { + +} diff --git a/src/main/java/com/ehsaniara/multidatasource/service/CustomerServiceImpl.java b/src/main/java/com/ehsaniara/multidatasource/service/CustomerServiceImpl.java index f8defcc..083e983 100644 --- a/src/main/java/com/ehsaniara/multidatasource/service/CustomerServiceImpl.java +++ b/src/main/java/com/ehsaniara/multidatasource/service/CustomerServiceImpl.java @@ -1,8 +1,7 @@ package com.ehsaniara.multidatasource.service; import com.ehsaniara.multidatasource.model.Customer; -import com.ehsaniara.multidatasource.repository.readRepository.CustomerReadRepository; -import com.ehsaniara.multidatasource.repository.writeRepository.CustomerWriteRepository; +import com.ehsaniara.multidatasource.repository.CustomerRepository; import org.springframework.stereotype.Service; import org.springframework.util.Assert; @@ -14,16 +13,14 @@ import java.util.Optional; @Service public class CustomerServiceImpl implements CustomerService { - private final CustomerReadRepository customerReadRepository; - private final CustomerWriteRepository customerWriteRepository; + private final CustomerRepository customerRepository; - public CustomerServiceImpl(CustomerReadRepository customerReadRepository, CustomerWriteRepository customerWriteRepository) { - this.customerReadRepository = customerReadRepository; - this.customerWriteRepository = customerWriteRepository; + public CustomerServiceImpl(CustomerRepository customerRepository) { + this.customerRepository = customerRepository; } public Optional getCustomer(Long id) { - return customerReadRepository.findById(id); + return customerRepository.findById(id); } public Customer createCustomer(Customer customer) { @@ -32,7 +29,7 @@ public class CustomerServiceImpl implements CustomerService { Assert.isNull(customer.getId(), "customer id should be null"); Assert.notNull(customer.getName(), "Invalid customer name"); - return customerWriteRepository.save(customer); + return customerRepository.save(customer); } public Customer updateCustomer(Customer customer) { @@ -40,6 +37,6 @@ public class CustomerServiceImpl implements CustomerService { Assert.notNull(customer, "Invalid customer"); Assert.notNull(customer.getId(), "Invalid customer id"); - return customerWriteRepository.save(customer); + return customerRepository.save(customer); } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index fe1eaee..1cc2814 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -23,3 +23,4 @@ spring: minimum-idle: 5 pool-name: ReadHikariPool +