我们的是先用的是mysql的数据库 是最近才要加入sqlserver数据库的 所以pom文件就只有sqlserver的 可自行找一下mysql
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.2.1.jre8</version>
<scope>test</scope>
</dependency>
首先 在.yml的配置文件中配置一下
spring:
datasource:
master:
driver-class-name: com.mysql.jdbc.Driver
url: ****************************
username: ******
password: ********
other:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: ****************
username: *********
password: *********
要设置那个数据库为主数据库 我们的是mysql的是主数据库 所以 master代表mysql other代表sqlserver
然后 要设置一下主数据库
package com;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
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.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
/**
* Created by yanhao on 2017/11/23.
*/
@Configuration
@MapperScan(basePackages ="com.gac.mapper" , sqlSessionTemplateRef = "sqlSession")
public class InitConfiguration {
private static final Logger logger = Logger.getLogger(InitConfiguration.class);
public InitConfiguration() {
logger.info("Load and init mysql server....");
}
@Bean(name = "dataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource dataSource() {
PoolProperties p = new PoolProperties();
p.setJmxEnabled(true);
p.setTestWhileIdle(true);
p.setTestOnBorrow(true);
p.setValidationQuery("SELECT 1");
p.setTestOnReturn(false);
p.setValidationInterval(30000);
p.setTimeBetweenEvictionRunsMillis(30000);
p.setMaxActive(200);
p.setInitialSize(20);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(180);
p.setMinEvictableIdleTimeMillis(30000);
p.setMinIdle(10);
p.setLogAbandoned(true);
p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;" +
"org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
DataSource dataSource = new DataSource();
dataSource.setPoolProperties(p);
return dataSource;
}
@Bean(name = "sqlSessionFactoryBean")
@Primary
public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper/**/*.xml"));
logger.info("<========== Mysql DataSource ==========>: " + dataSource.getUrl());
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "sqlSession")
@Primary
public SqlSession sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
SqlSession sqlSession = new SqlSessionTemplate(sqlSessionFactory);
return sqlSession;
}
@Bean(name = "transactionManager")
@Primary
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
@Primary注释是用来设置的 这个是mysql的配置 下面的是sqlserver的 可切换
package com;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
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.autoconfigure.jdbc.DataSourceBuilder;
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.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.gac.other", sqlSessionFactoryRef = "otherSqlSessionFactory")
public class MybatisDbOtherConfig {
private static final Logger logger = Logger.getLogger(InitConfiguration.class);
@Bean(name = "otherDataSource")
@ConfigurationProperties(prefix = "spring.datasource.other")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "otherTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("otherDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "otherSqlSessionFactory")
public SqlSessionFactory basicSqlSessionFactory(@Qualifier("otherDataSource") DataSource basicDataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(basicDataSource);
factoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:other/**/*.xml"));
logger.info("<========== MySqlServer DataSource ==========>: " + "111111111111111111111111111111111111111111111111111");
return factoryBean.getObject();
}
@Bean(name = "otherSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(
@Qualifier("otherSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
然后在配置启动类一下,首先 要在@SpringBootApplication注释后面加上
(exclude={ DataSourceAutoConfiguration.class, // HibernateJpaAutoConfiguration.class, //(如果使用Hibernate时,需要加) DataSourceTransactionManagerAutoConfiguration.class, })
然后我们这边还有一个@Import的注释
@Import({InitServiceConfiguration.class,InitConfiguration.class,MybatisServiceOtherConfig.class,MybatisDbOtherConfig.class})
这边我看惊竟然还打开了两个其他的.class文件 这个是我自己写的 根据项目基础出来么
package com;
import org.apache.log4j.Logger;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@ComponentScan("com.gac")
public class InitServiceConfiguration {
private static final Logger logger = Logger.getLogger(InitServiceConfiguration.class);
public InitServiceConfiguration() {
logger.info("com.com.InitConfiguration.<init>() init enservice");
}
}
这样 就可以配置双数据源了 开心