package com.shkpr.service.aimodelpower.configuration; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; 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.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.annotation.PostConstruct; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "com.shkpr.service.aimodelpower.dbdao.mapperoracle", sqlSessionTemplateRef = "secondSqlSessionTemplate") @PropertySource(value = "file:${global.sql.config.path}", ignoreResourceNotFound = true, encoding="utf-8") public class SecondSourceConfiguration { @Value("${spring.datasource.data2.driver-class-name:}") private String driveClass = "org.postgresql.Driver"; @Value("${spring.datasource.data2.jdbc-url:}") private String url = ""; @Value("${spring.datasource.data2.username:}") private String username = ""; @Value("${spring.datasource.data2.password:}") private String password = ""; @Value("${spring.datasource.data2.maximum-pool-size:200}") private Integer maxPoolSize; @Value("${spring.datasource.data2.minimum-idle:1}") private Integer minIdle; @Value("${spring.datasource.data2.connection-test-query:}") private String connectionTestQuery; @Value("${spring.datasource.data2.max-lifetime:120000}") private Long maxLifetime; @Value("${spring.datasource.data2.idle-timeout:30000}") private Long idleTimeout; @Value("${spring.datasource.data2.connection-timeout:30000}") private Long connectionTimeout; @Value("${spring.datasource.data2.validation-timeout:30000}") private Long validTimeout; @Value("${spring.datasource.data2.init-failed-timeout:-1}") private Long initFailedTimeout; @Bean(name = "secondDatasource") //@ConfigurationProperties(prefix = "spring.datasource.data2") public DataSource secondDataSource() { HikariDataSource obj = new HikariDataSource(getConfig()); try { obj.setLoginTimeout((int)(connectionTimeout/1000)); }catch (Exception e){} return obj; //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); hikariConfig.setInitializationFailTimeout(initFailedTimeout); return hikariConfig; } @Bean("secondSqlSessionFactory") public SqlSessionFactory secondSqlSessionFactoryBean(@Qualifier("secondDatasource") 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("secondSqlSessionTemplate") public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("secondSqlSessionFactory") SqlSessionFactory sessionFactory) { return new SqlSessionTemplate(sessionFactory); } @Bean(name = "secondDbTransactionManager") public DataSourceTransactionManager secondDbTransactionManager(@Qualifier("secondDatasource") DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } @PostConstruct public void init(){ //GlobalData.getInstance().setPostGisValid("org.postgis.DriverWrapper".equals(driveClass)); } }