package com.card.conf; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.env.Environment; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.persistence.EntityManager; import javax.sql.DataSource; /** * Created by Administrator on 2017/9/11. */ @Configuration @ConditionalOnClass({ EnableTransactionManagement.class, EntityManager.class }) @MapperScan(basePackages = { "com.card.dao" },sqlSessionFactoryRef="primarySqlSessionFactory") public class PrimaryMybatisConfiguration implements EnvironmentAware { private RelaxedPropertyResolver propertyResolver; private Environment env; public void setEnvironment(Environment environment) { this.env = environment; this.propertyResolver = new RelaxedPropertyResolver(environment, "spring.datasource.primaryDataSource."); } @Bean(name = "primaryDataSource",destroyMethod="shutdown") @Primary public DataSource dataSource() { HikariConfig config = new HikariConfig(); config.setDataSourceClassName(propertyResolver.getProperty("dataSourceClassName")); config.addDataSourceProperty("url", propertyResolver.getProperty("url")); config.setUsername(propertyResolver.getProperty("username")); config.setPassword(propertyResolver.getProperty("password")); //config.setConnectionTestQuery(propertyResolver.getProperty("connectionTestQuery")); return new HikariDataSource(config); } @Bean(name = "primarySqlSessionFactory") @Primary public SqlSessionFactory sqlSessionFactory() { try { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setTypeAliasesPackage(propertyResolver.getProperty("typeAliasesPackage")); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(propertyResolver.getProperty("mapperLocations"))); sessionFactory.setConfigLocation( new DefaultResourceLoader().getResource(propertyResolver.getProperty("configLocation"))); return sessionFactory.getObject(); } catch (Exception e) { e.printStackTrace(); return null; } } @Bean(name = "primaryTransactionManager") @Primary public DataSourceTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); }}
====================================================
package com.card.conf; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.persistence.EntityManager; import javax.sql.DataSource; /** * Created by Administrator on 2017/9/11. */ @Configuration @ConditionalOnClass({ EnableTransactionManagement.class, EntityManager.class }) @MapperScan(basePackages = { "com.card.dao" },sqlSessionFactoryRef="midSqlSessionFactory") public class MiddleMybatisConfiguration implements EnvironmentAware { private RelaxedPropertyResolver propertyResolver; private Environment env; public void setEnvironment(Environment environment) { this.env = environment; this.propertyResolver = new RelaxedPropertyResolver(environment, "spring.datasource.middleDataSource."); } @Bean(name = "middleDataSource",destroyMethod="shutdown") public DataSource dataSource() { HikariConfig config = new HikariConfig(); config.setDataSourceClassName(propertyResolver.getProperty("dataSourceClassName")); config.addDataSourceProperty("url", propertyResolver.getProperty("url")); config.setUsername(propertyResolver.getProperty("username")); config.setPassword(propertyResolver.getProperty("password")); config.setConnectionTestQuery(propertyResolver.getProperty("connectionTestQuery")); return new HikariDataSource(config); } @Bean(name = "midSqlSessionFactory") public SqlSessionFactory sqlSessionFactory() { try { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setTypeAliasesPackage(propertyResolver.getProperty("typeAliasesPackage")); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(propertyResolver.getProperty("mapperLocations"))); sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(propertyResolver.getProperty("configLocation"))); return sessionFactory.getObject(); } catch (Exception e) { e.printStackTrace(); logger.error(e.getMessage()); return null; } } @Bean(name = "midTransactionManager") public DataSourceTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } }