123 lines
4.6 KiB
Java
123 lines
4.6 KiB
Java
package com.imyeyu.api.config.dbsource;
|
|
|
|
import com.zaxxer.hikari.HikariDataSource;
|
|
import com.imyeyu.utils.Time;
|
|
import org.apache.ibatis.session.SqlSessionFactory;
|
|
import org.apache.ibatis.type.EnumTypeHandler;
|
|
import org.mybatis.spring.SqlSessionFactoryBean;
|
|
import org.mybatis.spring.SqlSessionTemplate;
|
|
import org.mybatis.spring.annotation.MapperScan;
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
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;
|
|
import org.springframework.core.io.Resource;
|
|
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
|
import org.springframework.core.io.support.ResourcePatternResolver;
|
|
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
|
import org.springframework.transaction.PlatformTransactionManager;
|
|
|
|
import javax.sql.DataSource;
|
|
import java.sql.SQLException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* TimiServer 数据源
|
|
*
|
|
* @author 夜雨
|
|
* @since 2022-11-29 22:40
|
|
*/
|
|
@Configuration
|
|
@MapperScan(basePackages = {
|
|
"com.imyeyu.api.modules.git.mapper",
|
|
"com.imyeyu.api.modules.bill.mapper",
|
|
"com.imyeyu.api.modules.blog.mapper",
|
|
"com.imyeyu.api.modules.lyric.mapper",
|
|
"com.imyeyu.api.modules.mirror.mapper",
|
|
"com.imyeyu.api.modules.system.mapper",
|
|
"com.imyeyu.api.modules.common.mapper",
|
|
"com.imyeyu.api.modules.minecraft.mapper"
|
|
}, sqlSessionFactoryRef = "timiServerSqlSessionFactory")
|
|
public class TimiServerDBConfig {
|
|
|
|
public static final String ROLLBACKER = "timiServerTransactionManager";
|
|
|
|
@Bean(name = "timiServerDataSource")
|
|
@Primary
|
|
@ConfigurationProperties(prefix = "spring.datasource.timiserver")
|
|
public DataSource getPrimaryDateSource() throws SQLException {
|
|
HikariDataSource dataSource = new HikariDataSource();
|
|
dataSource.setAutoCommit(true);
|
|
dataSource.setMinimumIdle(10);
|
|
dataSource.setMaximumPoolSize(100);
|
|
dataSource.setConnectionTestQuery("SELECT 1");
|
|
|
|
dataSource.setMaxLifetime(Time.S * 180);
|
|
dataSource.setIdleTimeout(Time.S * 120);
|
|
dataSource.setLoginTimeout(5);
|
|
dataSource.setValidationTimeout(Time.S * 3);
|
|
dataSource.setConnectionTimeout(Time.S * 8);
|
|
dataSource.setLeakDetectionThreshold(Time.S * 180);
|
|
return dataSource;
|
|
}
|
|
|
|
|
|
@Bean(name = "timiServerSqlSessionFactory")
|
|
@Primary
|
|
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("timiServerDataSource") DataSource datasource) throws Exception {
|
|
org.apache.ibatis.session.Configuration config = new org.apache.ibatis.session.Configuration();
|
|
config.setUseGeneratedKeys(true);
|
|
config.setMapUnderscoreToCamelCase(true);
|
|
config.setDefaultEnumTypeHandler(EnumTypeHandler.class);
|
|
|
|
List<Resource> resources = new ArrayList<>();
|
|
{
|
|
ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
|
|
List<String> mapperLocations = new ArrayList<>();
|
|
mapperLocations.add("classpath:mapper/git/**/*.xml");
|
|
mapperLocations.add("classpath:mapper/blog/**/*.xml");
|
|
mapperLocations.add("classpath:mapper/common/**/*.xml");
|
|
mapperLocations.add("classpath:mapper/system/**/*.xml");
|
|
mapperLocations.add("classpath:mapper/minecraft/**/*.xml");
|
|
for (int i = 0; i < mapperLocations.size(); i++) {
|
|
resources.addAll(List.of(resourceResolver.getResources(mapperLocations.get(i))));
|
|
}
|
|
}
|
|
String[] typeAliases = {
|
|
"com.imyeyu.api.modules.git.entity",
|
|
"com.imyeyu.api.modules.bill.entity",
|
|
"com.imyeyu.api.modules.blog.entity",
|
|
"com.imyeyu.api.modules.lyric.entity",
|
|
"com.imyeyu.api.modules.mirror.entity",
|
|
"com.imyeyu.api.modules.system.entity",
|
|
"com.imyeyu.api.modules.common.entity",
|
|
"com.imyeyu.api.modules.minecraft.entity"
|
|
};
|
|
String[] typeHandlers = {
|
|
"com.imyeyu.api.handler"
|
|
};
|
|
|
|
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
|
|
bean.setDataSource(datasource);
|
|
bean.setConfiguration(config);
|
|
bean.setMapperLocations(resources.toArray(new Resource[0]));
|
|
bean.setTypeAliasesPackage(String.join(",", typeAliases));
|
|
bean.setTypeHandlersPackage(String.join(",", typeHandlers));
|
|
return bean.getObject();
|
|
}
|
|
|
|
|
|
@Bean("timiServerSqlSessionTemplate")
|
|
@Primary
|
|
public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("timiServerSqlSessionFactory") SqlSessionFactory sessionfactory) {
|
|
return new SqlSessionTemplate(sessionfactory);
|
|
}
|
|
|
|
@Bean(name = "timiServerTransactionManager")
|
|
public PlatformTransactionManager txManager(@Qualifier("timiServerDataSource") DataSource dataSource) {
|
|
return new DataSourceTransactionManager(dataSource);
|
|
}
|
|
}
|