updating README.md and adding docker-compose.yml

This commit is contained in:
Jay
2020-01-06 20:58:51 -08:00
parent 9710f543f4
commit cf93e78f27
7 changed files with 135 additions and 11 deletions

View File

@@ -15,6 +15,12 @@ Or Select the following share link:
Spring Initializr Spring Initializr
Initializr generates spring boot project with just what you need to start quickly!start.spring.io 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: Once you Generate and download the zip file, you should have similar POM file as:
```xml ```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

24
docker-compose.yml Normal file
View File

@@ -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

View File

@@ -11,7 +11,7 @@
<groupId>com.example</groupId> <groupId>com.example</groupId>
<artifactId>demo</artifactId> <artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<name>demo</name> <name>Spring Boot Multiple DataSource</name>
<description>Demo project for Spring Boot</description> <description>Demo project for Spring Boot</description>
<properties> <properties>

View File

@@ -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 extends Customer> S save(S s) {
return writeRepository.save(s);
}
@Override
public <S extends Customer> Iterable<S> saveAll(Iterable<S> iterable) {
return writeRepository.saveAll(iterable);
}
@Override
public Optional<Customer> findById(Long aLong) {
return readRepository.findById(aLong);
}
@Override
public boolean existsById(Long aLong) {
return readRepository.existsById(aLong);
}
@Override
public Iterable<Customer> findAll() {
return readRepository.findAll();
}
@Override
public Iterable<Customer> findAllById(Iterable<Long> 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();
}
}

View File

@@ -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 {
}

View File

@@ -1,8 +1,7 @@
package com.ehsaniara.multidatasource.service; package com.ehsaniara.multidatasource.service;
import com.ehsaniara.multidatasource.model.Customer; import com.ehsaniara.multidatasource.model.Customer;
import com.ehsaniara.multidatasource.repository.readRepository.CustomerReadRepository; import com.ehsaniara.multidatasource.repository.CustomerRepository;
import com.ehsaniara.multidatasource.repository.writeRepository.CustomerWriteRepository;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@@ -14,16 +13,14 @@ import java.util.Optional;
@Service @Service
public class CustomerServiceImpl implements CustomerService { public class CustomerServiceImpl implements CustomerService {
private final CustomerReadRepository customerReadRepository; private final CustomerRepository customerRepository;
private final CustomerWriteRepository customerWriteRepository;
public CustomerServiceImpl(CustomerReadRepository customerReadRepository, CustomerWriteRepository customerWriteRepository) { public CustomerServiceImpl(CustomerRepository customerRepository) {
this.customerReadRepository = customerReadRepository; this.customerRepository = customerRepository;
this.customerWriteRepository = customerWriteRepository;
} }
public Optional<Customer> getCustomer(Long id) { public Optional<Customer> getCustomer(Long id) {
return customerReadRepository.findById(id); return customerRepository.findById(id);
} }
public Customer createCustomer(Customer customer) { public Customer createCustomer(Customer customer) {
@@ -32,7 +29,7 @@ public class CustomerServiceImpl implements CustomerService {
Assert.isNull(customer.getId(), "customer id should be null"); Assert.isNull(customer.getId(), "customer id should be null");
Assert.notNull(customer.getName(), "Invalid customer name"); Assert.notNull(customer.getName(), "Invalid customer name");
return customerWriteRepository.save(customer); return customerRepository.save(customer);
} }
public Customer updateCustomer(Customer customer) { public Customer updateCustomer(Customer customer) {
@@ -40,6 +37,6 @@ public class CustomerServiceImpl implements CustomerService {
Assert.notNull(customer, "Invalid customer"); Assert.notNull(customer, "Invalid customer");
Assert.notNull(customer.getId(), "Invalid customer id"); Assert.notNull(customer.getId(), "Invalid customer id");
return customerWriteRepository.save(customer); return customerRepository.save(customer);
} }
} }

View File

@@ -23,3 +23,4 @@ spring:
minimum-idle: 5 minimum-idle: 5
pool-name: ReadHikariPool pool-name: ReadHikariPool