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 extends Customer> 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
+