View Javadoc
1   package rest.db2;
2   
3   import static java.util.Collections.singletonMap;
4   
5   import javax.persistence.EntityManagerFactory;
6   import javax.sql.DataSource;
7   
8   import org.springframework.beans.factory.annotation.Qualifier;
9   import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
10  import org.springframework.boot.context.properties.ConfigurationProperties;
11  import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
12  import org.springframework.context.annotation.Bean;
13  import org.springframework.context.annotation.Configuration;
14  import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
15  import org.springframework.orm.jpa.JpaTransactionManager;
16  import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
17  import org.springframework.transaction.PlatformTransactionManager;
18  import org.springframework.transaction.annotation.EnableTransactionManagement;
19  
20  import com.zaxxer.hikari.HikariDataSource;
21  
22  @Configuration
23  @EnableJpaRepositories(entityManagerFactoryRef = "secondEntityManagerFactory",
24      transactionManagerRef = "secondTransactionManager", basePackages = "rest.db2")
25  @EnableTransactionManagement
26  public class SecondDsConfig {
27    @Bean
28    @ConfigurationProperties("app.datasource.second")
29    public DataSourceProperties secondDataSourceProperties() {
30      return new DataSourceProperties();
31    }
32  
33    @Bean
34    @ConfigurationProperties("app.datasource.second.configuration")
35    public HikariDataSource secondDataSource() {
36      return secondDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class)
37          .build();
38    }
39  
40    @Bean(name = "secondEntityManagerFactory")
41    public LocalContainerEntityManagerFactoryBean secondEntityManagerFactory(
42        final EntityManagerFactoryBuilder builder,
43        @Qualifier("secondDataSource") DataSource dataSource) {
44      return builder.dataSource(secondDataSource()).packages("rest.db2").persistenceUnit("secondDb")
45          .properties(singletonMap("hibernate.hbm2ddl.auto", "create-drop")).build();
46    }
47  
48    @Bean(name = "secondTransactionManager")
49    public PlatformTransactionManager secondTransactionManager(
50        @Qualifier("secondEntityManagerFactory") EntityManagerFactory secondEntityManagerFactory) {
51      return new JpaTransactionManager(secondEntityManagerFactory);
52    }
53  }