配置多数据源
1. yml数据源配置
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/test username: root password: root driver-class-name: com.mysql.jdbc.Driver first: url: jdbc:mysql://**** username: root password: root dirver-class-name: com.mysql.jdbc.Driver second: url: jdbc:mysql://127.0.0.1:3306/test username: root password: root driver-class-name: com.mysql.jdbc.Driver
2. 配置数据源配置类
package test.demo.tools; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Qualifier; 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 DataSourceConfig { @Primary @Bean(name = "defaultDatasource") @Qualifier("defaultDatasource") @ConfigurationProperties(prefix="spring.datasource") public DataSource defaultDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "firstDatasource") @Qualifier("firstDatasource") @ConfigurationProperties(prefix="spring.datasource.first") public DataSource firstDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "secondDatasource") @Qualifier("secondDatasource") @ConfigurationProperties(prefix="spring.datasource.second") public DataSource secondDataSource(){ return DataSourceBuilder.create().build(); } }
3. 配置单个的数据源
@Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "entityManagerFactoryPrimary",//配置连接工厂 entityManagerFactory transactionManagerRef = "transactionManagerPrimary", //配置 事物管理器 transactionManager basePackages = {"test.demo.dao.*2*"}//设置dao(repo)所在位置 切点语言(或者直接配置dao包) ) public class SecondConfig { @Autowired JpaProperties jpaProperties; @Autowired @Qualifier("secondDatasource") private DataSource secondDataSource; @Bean(name = "entityManagerFactoryPrimary") @Primary public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder builder) { return builder //设置数据源 .dataSource(secondDataSource) //设置数据源属性 .properties(getVendorProperties(secondDataSource)) //设置实体类所在位置.扫描所有带有 @Entity 注解的类 .packages("test.demo.entity") // Spring会将EntityManagerFactory注入到Repository之中.有了 EntityManagerFactory之后, // Repository就能用它来创建 EntityManager 了,然后 EntityManager 就可以针对数据库执行操作 .persistenceUnit("primaryPersistenceUnit") <--固定的选项? .build(); } private Map<String, String> getVendorProperties(DataSource dataSource) { return jpaProperties.getHibernateProperties(dataSource); } /** * 配置事物管理器 * * @param builder * @return */ @Bean(name = "transactionManagerPrimary") @Primary PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject()); } }
4. 使用时直接声明dao, 该dao用的就是声明过的数据源