1.数据源配置application.properties
spring.jpa.database=mysql
#数据链接1
datasource.master.url=jdbc:mysql://10.266.66.264:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
datasource.master.driverClassName=com.mysql.jdbc.Driver
datasource.master.username=root
datasource.master.password=123456
#数据链接2
datasource.slave.url=jdbc:mysql://172.236.243.25:18399/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
datasource.slave.driverClassName=com.mysql.jdbc.Driver
datasource.slave.username=root
datasource.slave.password=123456
2.appliction启动类增加@EnableAutoConfiguration
这是因我们这里配置了两个数据源,springboot会自动的注入,但是注入的时候发现有两个,所以不知道选择哪一个了,因为我们要关闭springboot关于mybatis的一些自动注入,在@SpringBootApplication注解下面,加入一个@EnableAutoConfiguration(exclude=""),具体如下:
package test.projectTest;
import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.system.ApplicationPidFileWriter;
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})
@SpringBootApplication(scanBasePackages={"test.projectTest"})
public class App
{
public static void main( String[] args )
{
SpringApplication application = new SpringApplication(App.class);
application.addListeners(new ApplicationPidFileWriter());
application.run(args);
System.out.println( "启动成功" );
}
}
3.配置数据库连接类
配置类中@MapperScan(basePackages = "test.projectTest.mapper.master",sqlSessionFactoryRef = "masterSqlSessionFactory"),basePackages 为对应数据链接的mapper包路径。 @ConfigurationProperties("datasource.master")为application.properties配置的数据链接前缀
(1)MasterDataSourceConfig类,数据链接1
package test.projectTest.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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;
@Configuration
@MapperScan(basePackages = "test.projectTest.mapper.master",sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
@Primary
@Bean(name = "masterDataSource")
@ConfigurationProperties("datasource.master")
public DataSource masterDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/master/*.xml"));
return sessionFactoryBean.getObject();
}
}
(2)SlaveSourceConfig类,数据链接2
package test.projectTest.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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.core.io.support.PathMatchingResourcePatternResolver;
@Configuration
@MapperScan(basePackages = "test.projectTest.mapper.slave",sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class SlaveSourceConfig {
@Bean(name = "slaveDataSource")
@ConfigurationProperties("datasource.slave")
public DataSource slaveDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/slave/*.xml"));
return sessionFactoryBean.getObject();
}
}
4.mapper文件
(1)MasterDataSourceConfig对应mapper,数据链接1
package test.projectTest.mapper.master;
import test.projectTest.bean.LoanApply;
public interface LoanApplyMapper {
LoanApply selectByPrimaryKey(String autoId);
}
(2)SlaveSourceConfig对应mapper,数据链接2
package test.projectTest.mapper.slave;
import org.apache.ibatis.annotations.Mapper;
import test.projectTest.bean.DailyData;
public interface DailyDataMapper {
DailyData selectByPrimaryKey(Integer id);
}
其他注意:mapper.xml文件无要求,只要对应mapper.java就可以。