package org.superboot.config.datasource; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; import java.util.HashMap; import java.util.Map; /** * <b> 多数据源注入配置 </b> * <p> * 功能描述:提供对多数据的支持,传统模式无法支持JPA的读写分离及多数据源事物 * </p> */ @Configuration public class DataSourceConfig { public final static String WRITE_DATASOURCE_KEY = "writeDruidDataSource"; public final static String READ_DATASOURCE_KEY = "readDruidDataSource"; @Autowired @Qualifier(READ_DATASOURCE_KEY) private DruidDataSource readDruidDataSource; @Autowired @Qualifier(WRITE_DATASOURCE_KEY) private DruidDataSource writeDruidDataSource; /** * 构造包含多数据源的路由数据源实例类 * * @return * @throws Exception */ @Bean(name = "routingDataSource") public AbstractRoutingDataSource routingDataSource( ) throws Exception { DynamicDataSource dataSource = new DynamicDataSource(); Map<Object, Object> targetDataSources = new HashMap(); targetDataSources.put(WRITE_DATASOURCE_KEY, writeDruidDataSource); targetDataSources.put(READ_DATASOURCE_KEY, readDruidDataSource); dataSource.setTargetDataSources(targetDataSources); dataSource.setDefaultTargetDataSource(writeDruidDataSource); return dataSource; } }