Added example for multiple data sources
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
package com.javadevjournal;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class MultipleDataSourcesWithSpringBootApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(MultipleDataSourcesWithSpringBootApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.javadevjournal.customer.config;
|
||||
|
||||
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
||||
import org.springframework.orm.jpa.JpaTransactionManager;
|
||||
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@Configuration
|
||||
@EnableTransactionManagement
|
||||
@EnableJpaRepositories(
|
||||
entityManagerFactoryRef = "customerEntityManagerFactory",
|
||||
transactionManagerRef = "customerTransactionManager",
|
||||
basePackages = {"com.javadevjournal.customer.repo"}
|
||||
)
|
||||
public class CustomerConfig {
|
||||
|
||||
@Primary
|
||||
@Bean(name = "customerDataSource")
|
||||
@ConfigurationProperties(prefix = "spring.datasource")
|
||||
public DataSource customerDataSource() {
|
||||
return DataSourceBuilder.create().build();
|
||||
}
|
||||
|
||||
@Primary
|
||||
@Bean(name = "customerEntityManagerFactory")
|
||||
public LocalContainerEntityManagerFactoryBean
|
||||
entityManagerFactory(
|
||||
EntityManagerFactoryBuilder builder,
|
||||
@Qualifier("customerDataSource") DataSource dataSource
|
||||
) {
|
||||
return builder
|
||||
.dataSource(dataSource)
|
||||
.packages("com.javadevjournal.customer.data")
|
||||
.persistenceUnit("db1")
|
||||
.build();
|
||||
}
|
||||
|
||||
@Primary
|
||||
@Bean(name = "customerTransactionManager")
|
||||
public PlatformTransactionManager customerTransactionManager(
|
||||
@Qualifier("customerEntityManagerFactory") EntityManagerFactory
|
||||
customerEntityManagerFactory
|
||||
) {
|
||||
return new JpaTransactionManager(customerEntityManagerFactory);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.javadevjournal.customer.data;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
@Entity
|
||||
public class CustomerModel {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy=GenerationType.IDENTITY)
|
||||
private Integer id;
|
||||
@Column(unique = true,nullable = false)
|
||||
private String email;
|
||||
private String firstName;
|
||||
private String lastName;
|
||||
|
||||
protected CustomerModel() {}
|
||||
|
||||
public CustomerModel(String email,String firstName, String lastName) {
|
||||
this.email=email;
|
||||
this.firstName = firstName;
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format(
|
||||
"Customer[id=%d, firstName='%s', lastName='%s',email='%s']",
|
||||
id, firstName, lastName,email);
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public String getFirstName() {
|
||||
return firstName;
|
||||
}
|
||||
|
||||
public String getLastName() {
|
||||
return lastName;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.javadevjournal.customer.repo;
|
||||
|
||||
import com.javadevjournal.customer.data.CustomerModel;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface CustomerRepository extends JpaRepository<CustomerModel,Integer> {
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.javadevjournal.product.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
||||
import org.springframework.orm.jpa.JpaTransactionManager;
|
||||
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
@Configuration
|
||||
@EnableTransactionManagement
|
||||
@EnableJpaRepositories(
|
||||
entityManagerFactoryRef = "productEntityManagerFactory",
|
||||
transactionManagerRef = "productTransactionManager",
|
||||
basePackages = {"com.javadevjournal.product.repo"}
|
||||
)
|
||||
|
||||
public class ProductConfig {
|
||||
|
||||
|
||||
@Bean(name = "productDataSource")
|
||||
@ConfigurationProperties(prefix = "db2.datasource")
|
||||
public DataSource dataSource() {
|
||||
return DataSourceBuilder.create().build();
|
||||
}
|
||||
|
||||
@Bean(name = "productEntityManagerFactory")
|
||||
public LocalContainerEntityManagerFactoryBean
|
||||
barEntityManagerFactory(
|
||||
EntityManagerFactoryBuilder builder,
|
||||
@Qualifier("productDataSource") DataSource dataSource
|
||||
) {
|
||||
return
|
||||
builder
|
||||
.dataSource(dataSource)
|
||||
.packages("com.javadevjournal.product.data")
|
||||
.persistenceUnit("db2")
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean(name = "productTransactionManager")
|
||||
public PlatformTransactionManager productTransactionManager(
|
||||
@Qualifier("productEntityManagerFactory") EntityManagerFactory
|
||||
productEntityManagerFactory
|
||||
) {
|
||||
return new JpaTransactionManager(productEntityManagerFactory);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.javadevjournal.product.data;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
@Entity
|
||||
public class ProductModel {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy=GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String code;
|
||||
private String name;
|
||||
private double price;
|
||||
|
||||
|
||||
protected ProductModel() {}
|
||||
|
||||
public ProductModel(String code, String name, double price) {
|
||||
this.code = code;
|
||||
this.name = name;
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format(
|
||||
"Product[id=%d, code='%s', name='%s', price='%s']",
|
||||
id, code, name,price);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public double getPrice() {
|
||||
return price;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.javadevjournal.product.repo;
|
||||
|
||||
import com.javadevjournal.product.data.ProductModel;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ProductRepository extends JpaRepository<ProductModel,Integer> {
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
spring.jpa.generate-ddl=true
|
||||
spring.jpa.database=default
|
||||
|
||||
#first db
|
||||
spring.datasource.jdbc-url = jdbc:mysql://localhost:3306/db1
|
||||
spring.datasource.username = root
|
||||
spring.datasource.password =
|
||||
spring.datasource.driverClassName = com.mysql.jdbc.Driver
|
||||
|
||||
#second db2 ...
|
||||
db2.datasource.jdbc-url = jdbc:mysql://localhost:3306/db2
|
||||
db2.datasource.username = root
|
||||
db2.datasource.password =
|
||||
db2.datasource.driverClassName = com.mysql.jdbc.Driver
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.javadevjournal;
|
||||
|
||||
import com.javadevjournal.customer.config.CustomerConfig;
|
||||
import com.javadevjournal.customer.data.CustomerModel;
|
||||
import com.javadevjournal.customer.repo.CustomerRepository;
|
||||
import com.javadevjournal.product.config.ProductConfig;
|
||||
import com.javadevjournal.product.data.ProductModel;
|
||||
import com.javadevjournal.product.repo.ProductRepository;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import static org.junit.Assert.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.dao.DataIntegrityViolationException;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class MultipleDataSourcesCustomerTests {
|
||||
|
||||
|
||||
@Autowired
|
||||
private CustomerRepository customerRepository;
|
||||
|
||||
@Test
|
||||
@Transactional("customerTransactionManager")
|
||||
public void create_check_customer() {
|
||||
|
||||
CustomerModel customer = new CustomerModel("user@javadevjournal.com","Robert","Hickle");
|
||||
customer = customerRepository.save(customer);
|
||||
|
||||
assertNotNull(customerRepository.findById(customer.getId()));
|
||||
assertEquals(customerRepository.findById(customer.getId()).get().getEmail() ,"user@javadevjournal.com");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.javadevjournal;
|
||||
|
||||
import com.javadevjournal.customer.data.CustomerModel;
|
||||
import com.javadevjournal.customer.repo.CustomerRepository;
|
||||
import com.javadevjournal.product.data.ProductModel;
|
||||
import com.javadevjournal.product.repo.ProductRepository;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class MultipleDataSourcesProductTests {
|
||||
|
||||
@Autowired
|
||||
private ProductRepository productRepository;
|
||||
|
||||
@Test
|
||||
@Transactional("productTransactionManager")
|
||||
public void create_check_product() {
|
||||
ProductModel product = new ProductModel("228781","Running Shoes", 20.0);
|
||||
product = productRepository.save(product);
|
||||
|
||||
assertNotNull(productRepository.findById(product.getId()));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user