springboot多数据库配置
`package com.cjml.web.verifier.saaserp.api.config;
import com.github.pagehelper.PageInterceptor;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import tk.mybatis.spring.annotation.MapperScan;
import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@MapperScan(basePackages = {“com.cjml.web.verifier.saaserp.dao.myapp”}, sqlSessionFactoryRef = “myappSessionFactory”)
public class myappConfig {
private static final String MAPPER_PATH = "classpath:mappers/myapp/*.xml";
private static String MYBATIS_CONFIG = "mybatis-config.xml";
@Value("${spring.datasource.myapp.driverClassName}")
private String driverClassNamePgSql;
@Value("${spring.datasource.myapp.username}")
private String usernameAuto;
@Value("${spring.datasource.myapp.password}")
private String passwordAuto;
@Value("${spring.datasource.myapp.jdbc-url:jdbc}")
private String urlAuto;
@Value("${spring.datasource.poolName}")
private String poolName;
@Value("${spring.datasource.maximumPoolSize}")
private int maximumPoolSize;
@Value("${spring.datasource.minimumIdle}")
private int minimumIdle;
@Value("${spring.datasource.connectionTimeout}")
private int connectionTimeout;
@Value("${spring.datasource.connectionTestQuery}")
private String connectionTestQuery;
@Value("${spring.datasource.idleTimeout}")
private int idleTimeout;
@Value("${spring.datasource.validationTimeout}")
private int validationTimeout;
@Bean(name = "myappDataSource")
@Qualifier("myappDataSource")
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setUsername(usernameAuto);
hikariConfig.setJdbcUrl(urlAuto);
hikariConfig.setPassword(passwordAuto);
hikariConfig.setPoolName(poolName);
hikariConfig.setDriverClassName(driverClassNamePgSql);
// 池中最大连接数,包括闲置和使用中的连接 默认是10
hikariConfig.setMaximumPoolSize(maximumPoolSize);
// 池中维护的最小空闲连接数
hikariConfig.setMinimumIdle(minimumIdle);
// 等待来自池的连接的最大时长(毫秒)
hikariConfig.setConnectionTimeout(connectionTimeout);
hikariConfig.setConnectionTestQuery(connectionTestQuery);
// 连接允许在池中闲置的最长时间(毫秒)
hikariConfig.setIdleTimeout(idleTimeout);
// 连接将被测试活动的最大时间量
hikariConfig.setValidationTimeout(validationTimeout);
HikariDataSource ds = new HikariDataSource(hikariConfig);
return ds;
}
@Bean(name = "myappTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("myappDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "myappSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("myappSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "myappSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("myappDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver.getResources(MAPPER_PATH));
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(MYBATIS_CONFIG));
//配置插件
sqlSessionFactoryBean.setPlugins(plugins());
return sqlSessionFactoryBean.getObject();
}
/**
* 配置插件
*
* @return bean
*/
public Interceptor[] plugins() {
Interceptor interceptor = new PageInterceptor();
Properties properties = new Properties();
//是否将参数offset作为pageNum
properties.setProperty("offsetAsPageNum", "true");
// 数据库类型
properties.setProperty("helperDialect", "postgresql");
// 是否返回行数,相当于MySQL的count(*)
properties.setProperty("rowBoundsWithCount", "true");
// 是否分页合理化:即翻页小于0时,显示第一页数据,翻页数较大查不到数据时,显示最后一页的数据,默认即为false,本处显示写出,以供参考。
properties.setProperty("reasonable", "false");
interceptor.setProperties(properties);
Interceptor[] plugins = new Interceptor[1];
plugins[0] = interceptor;
return plugins;
}
}