package io.github.pnoker.gateway.config; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import io.github.pnoker.gateway.dbdao.DBMgrProxy; import org.apache.ibatis.session.SqlSessionFactory; 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.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.annotation.PostConstruct; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "io.github.pnoker.gateway.dbdao.mapper", sqlSessionTemplateRef = "childSqlSessionTemplate") public class ChildSourceConfiguration { @Value("${spring.datasource.childpg.driver-class-name:}") private String driveClass = "org.postgresql.Driver"; @Value("${spring.datasource.childpg.jdbc-url:}") private String url = ""; @Value("${spring.datasource.childpg.username:}") private String username = ""; @Value("${spring.datasource.childpg.password:}") private String password = ""; @Value("${spring.datasource.data.maximum-pool-size:200}") private Integer maxPoolSize; @Value("${spring.datasource.data.minimum-idle:1}") private Integer minIdle; @Value("${spring.datasource.data.connection-test-query:}") private String connectionTestQuery; @Value("${spring.datasource.data.max-lifetime:120000}") private Long maxLifetime; @Value("${spring.datasource.data.idle-timeout:30000}") private Long idleTimeout; @Value("${spring.datasource.data.connection-timeout:30000}") private Long connectionTimeout; @Value("${spring.datasource.data.validation-timeout:30000}") private Long validTimeout; @Bean(name = "childDatasource") //@ConfigurationProperties(prefix = "spring.datasource.data") public DataSource mainDataSource() { return new HikariDataSource(getConfig()); //return DataSourceBuilder.create().build(); //Spring Boot 2.x默认使用HikariCP } private HikariConfig getConfig() { HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setDriverClassName(driveClass); hikariConfig.setJdbcUrl(url); hikariConfig.setUsername(username); hikariConfig.setPassword(password); hikariConfig.setMaximumPoolSize(maxPoolSize); hikariConfig.setMinimumIdle(minIdle); hikariConfig.setConnectionTestQuery(connectionTestQuery); hikariConfig.setMaxLifetime(maxLifetime); hikariConfig.setIdleTimeout(idleTimeout); hikariConfig.setConnectionTimeout(connectionTimeout); hikariConfig.setValidationTimeout(validTimeout); return hikariConfig; } @Bean("childSqlSessionFactory") public SqlSessionFactory childSqlSessionFactoryBean(@Qualifier("mainDatasource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setCallSettersOnNulls(true); //数据库中字段值为null时也要求返回 configuration.setMapUnderscoreToCamelCase(true); //开启驼峰映射 configuration.setCacheEnabled(false); sessionFactoryBean.setConfiguration(configuration); return sessionFactoryBean.getObject(); } @Bean("childSqlSessionTemplate") public SqlSessionTemplate childSqlSessionTemplate(@Qualifier("childSqlSessionFactory") SqlSessionFactory sessionFactory) { return new SqlSessionTemplate(sessionFactory); } @Bean(name = "childDbTransactionManager") public DataSourceTransactionManager childDbTransactionManager(@Qualifier("childDatasource") DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } @PostConstruct public void init(){ GlobalData.getInstance().setPostGisValid("org.postgis.DriverWrapper".equals(driveClass)); } // @Bean // public DBMgrProxy startDBMgrProxy(){ // DBMgrProxy.getInstance().init(); // return DBMgrProxy.getInstance(); // } }