package tech.powerjob.server.persistence.config;
|
|
import tech.powerjob.server.common.utils.OmsFileUtils;
|
import com.zaxxer.hikari.HikariConfig;
|
import com.zaxxer.hikari.HikariDataSource;
|
import org.apache.commons.io.FileUtils;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.jdbc.DataSourceBuilder;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Primary;
|
|
import javax.sql.DataSource;
|
import java.io.File;
|
|
/**
|
* 多重数据源配置
|
*
|
* @author tjq
|
* @since 2020/4/27
|
*/
|
@Configuration
|
public class MultiDatasourceConfig {
|
|
private static final String H2_DRIVER_CLASS_NAME = "org.h2.Driver";
|
private static final String H2_JDBC_URL_PATTERN = "jdbc:h2:file:%spowerjob_server_db";
|
private static final int H2_MIN_SIZE = 4;
|
private static final int H2_MAX_ACTIVE_SIZE = 10;
|
|
@Primary
|
@Bean("omsRemoteDatasource")
|
@ConfigurationProperties(prefix = "spring.datasource.core")
|
public DataSource initOmsCoreDatasource() {
|
return DataSourceBuilder.create().build();
|
}
|
|
@Bean("omsLocalDatasource")
|
public DataSource initOmsLocalDatasource() {
|
String h2Path = OmsFileUtils.genH2WorkPath();
|
HikariConfig config = new HikariConfig();
|
config.setDriverClassName(H2_DRIVER_CLASS_NAME);
|
config.setJdbcUrl(String.format(H2_JDBC_URL_PATTERN, h2Path));
|
config.setAutoCommit(true);
|
// 池中最小空闲连接数量
|
config.setMinimumIdle(H2_MIN_SIZE);
|
// 池中最大连接数量
|
config.setMaximumPoolSize(H2_MAX_ACTIVE_SIZE);
|
|
// JVM 关闭时删除文件
|
try {
|
FileUtils.forceDeleteOnExit(new File(h2Path));
|
}catch (Exception ignore) {
|
}
|
return new HikariDataSource(config);
|
}
|
}
|