前文链接
前面提到了springboot能够从application.properties文件读取数据配置,并且自动配置datasource数据,现在记录一下手动配置数据源的方式
单一数据源
创建一个DataSourceConfig类,创建datasource的bean,类上面@Configuration
@Bean
public DataSource dataSource(){
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(properties.getProperty("spring.datasource.url"));
dataSource.setUsername(properties.getProperty("spring.datasource.username"));
dataSource.setPassword(properties.getProperty("spring.datasource.password"));
dataSource.setDriverClassName(properties.getProperty("spring.datasource.driver-class-name"));
return dataSource;
}
Application上面停用DataSourceAutoConfiguration
多数据源
数据源信息
@Component
@Data
@ConfigurationProperties(prefix="datasource")
public class DataSourceProperties {
private static Logger logger = LoggerFactory.getLogger(DataSourceProperties.class);
private HikariDataSource store;
private HikariDataSource book;
private HikariDataSource readers;
private HikariDataSource verify;
}
数据源配置
@Bean(name = {"dataSource"})
public DataSource dataSource() {
Map<Object, Object> targetDataSources = new HashMap();
targetDataSources.put("book", this.properties.getBook());
targetDataSources.put("readers", this.properties.getReaders());
targetDataSources.put("verify", this.properties.getVerify());
targetDataSources.put("store", this.properties.getStore());
DynamicDataSource dataSource = new DynamicDataSource();
dataSource.setTargetDataSources(targetDataSources);
dataSource.setDefaultTargetDataSource(this.properties.getVerify());
return dataSource;
}
由于涉及到多个数据源,会需要进行动态切换,创建类DynamicDataSource,继承AbstractRoutingDataSource抽象类。重写determineCurrentLookupKey方法,返回当前线程的数据源信息