spring boot 链接两个数据源,操作两个数据库

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就可以。

猜你喜欢

转载自blog.csdn.net/mengda_lei/article/details/81484355