Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- spring.primary.url=jdbc:postgresql://localhost:5432/kode12
- spring.primary.username=postgres
- spring.primary.password=root
- spring.primary.driverClassName=org.postgresql.Driver
- spring.secondary.url=jdbc:mysql://localhost:3306/kode12
- spring.secondary.username=root
- spring.secondary.password=root
- spring.secondary.driverClassName=com.mysql.jdbc.Driver
- package com.test;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- @SpringBootApplication
- public Application {
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
- }
- }
- package com.test.config;
- import javax.sql.DataSource;
- import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.Primary;
- @Configuration
- public class ApplicationConfiguration {
- @Primary
- @Bean(name = "primaryDB")
- @ConfigurationProperties(prefix = "spring.primary")
- public DataSource postgresDataSource() {
- return DataSourceBuilder.create().build();
- }
- @Bean(name = "primaryEM")
- public LocalContainerEntityManagerFactoryBean storingEntityManagerFactory(
- EntityManagerFactoryBuilder builder, @Qualifier("primaryDB") DataSource ds) {
- return builder
- .dataSource(ds)
- .packages("com.test")
- .persistenceUnit("primaryPU")
- .build();
- }
- @Bean(name = "secondaryDB")
- @ConfigurationProperties(prefix = "spring.secondary")
- public DataSource mysqlDataSource() {
- return DataSourceBuilder.create().build();
- }
- @Bean(name = "secondaryEM")
- public LocalContainerEntityManagerFactoryBean storingEntityManagerFactory(
- EntityManagerFactoryBuilder builder, @Qualifier("secondaryDB") DataSource ds) {
- return builder
- .dataSource(ds)
- .packages("com.test")
- .persistenceUnit("secondaryPU")
- .build();
- }
- }
- public abstract class GenericDAO<T extends Serializable> {
- private Class<T> clazz = null;
- @PersistenceContext
- protected EntityManager entityManager;
- public void setClazz(Class<T> clazzToSet) {
- this.clazz = clazzToSet;
- }
- public T findOne(Integer id) {
- return this.entityManager.find(this.clazz, id);
- }
- public List<T> findAll() {
- return this.entityManager.createQuery("from " + this.clazz.getName()).getResultList();
- }
- @Transactional
- public void save(T entity) {
- this.entityManager.persist(setModifiedAt(entity));
- }
- }
- @Repository
- public class PersonDAO extends GenericDAO<Person> {
- public PersonDAO() {
- this.setClazz(Person.class);
- }
- }
- @Repository
- public class ProductDAO extends GenericDAO<Product> {
- public ProductDAO() {
- this.setClazz(Product.class);
- }
- }
- @Service
- public class TestService {
- @Autowired
- @PersistenceContext(name = "primaryEm")
- PersonDAO personDao;
- @Autowired
- @PersistenceContext(name = "secondaryEm")
- ProductDAO productDao;
- // This should write to primary datasource
- public void savePerson(Person person) {
- personDao.save(person);
- }
- // This should write to secondary datasource
- public void saveProduct(Product product) {
- productDao.save(product);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement