springboot+maybatis+多数据源配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34988304/article/details/84343043

SpringBoot填坑版
springboot数据库信息配置文件:

#mySQL
spring.datasource.secondary.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.url=jdbc:mysql://127.0.0.1:3306/testdb
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root

#Oracle
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:testuserdb
spring.datasource.username=root
spring.datasource.password=root

注解介绍:
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Configuration:把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@MapperScan:通过使用@MapperScan可以指定要扫描的Mapper类的包的路径

配置第一个数据源:

@Configuration
// 扫描 Mapper 接口并容器管理
@SpringBootApplication
@MapperScan(basePackages = OneMappingConfig.PACKAGE, sqlSessionFactoryRef = "oneSqlSessionFactory")
public class OneMappingConfig {
    // 精确到 onedao目录,以便跟其他数据源隔离
    static final String PACKAGE = "com.my.maple.onedao";
    static final String MAPPER_LOCATION = "classpath:/mapper/onemapper/*.xml";
    
    @Bean(name = "oneDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.one")
    @Primary
    public DataSource oneDataSource() {
    	return DataSourceBuilder.create().build();
    }

    @Bean(name = "oneSqlSessionFactory")
    @Primary
    public SqlSessionFactory oneSqlSessionFactory(@Qualifier("oneDataSource") DataSource oneDataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(oneDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(OneMappingConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
    
    @Bean(name = "oneTransactionManager")
    @Primary
    public DataSourceTransactionManager oneTransactionManager(@Qualifier("oneDataSource") DataSource oneDataSource) {
        return new DataSourceTransactionManager(oneDataSource);
    }
    
    @Bean(name = "oneSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate oneSqlSessionTemplate(@Qualifier("oneSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

配置第二个数据源:

@Configuration
@SpringBootApplication
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = TwoMappingConfig.PACKAGE, sqlSessionFactoryRef = "twoSqlSessionFactory")
public class TwoMappingConfig {
    static final String PACKAGE = "com.my.maple.twodao";
    static final String MAPPER_LOCATION = "classpath:/mapper/twomapper/*.xml";

    @Bean(name = "twoDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.two")
    public DataSource twoDataSource() {
    	return DataSourceBuilder.create().build();
    }
    
    @Bean(name = "twoSqlSessionFactory")
    public SqlSessionFactory twoSqlSessionFactory(@Qualifier("twoDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(TwoMappingConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }

    @Bean(name = "twoTransactionManager")
    public DataSourceTransactionManager twoTransactionManager(@Qualifier("twoDataSource") DataSource masterDataSource) {
        return new DataSourceTransactionManager(masterDataSource);
    }

    @Bean(name = "twoSqlSessionTemplate")
    public SqlSessionTemplate twoSqlSessionTemplate(@Qualifier("twoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

不同数据源获取测试:
Controller

@RestController
@RequestMapping("/test")
public class TestController {

	@Autowired
	private TestService testService;
	@PostMapping(value = "/index")
	public JSONObject index(){
		JSONObject json = new JSONObject();
		List<One> oneData = testService.selectOneData();
		List<Two> twoData = testService.selectTwoData();
		
		json.put("oneData", oneData);
		json.put("twoData", twoData);
		return json;
		
	}
}

Service

@Service("testService")
public class TestServiceImpl implements TestService{

	@Autowired
	private OneMapper oneMapper;
	@Autowired
	private TwoMapper twoMapper;
	@Override
	public List<One> selectOneData() {
		return oneMapper.getOneData();
	}

	@Override
	public List<Two> selectTwoData() {
		return twoMapper.getTwoData();
	}
}

OneMapper.java

@Mapper
public interface OneMapper extends BaseMapper<One> {
	List<One> getOneData();
}

TwoMapper.java

@Mapper
public interface TwoMapper extends BaseMapper<Two> {
	List<Two> getTwoData();
}

OneMapper.xml

<select id="getOneData" resultMap="BaseResultMap">
    	SELECT * FROM ONE
    </select>

TwoMapper.xml

<select id="getTwoData" resultMap="BaseResultMap">
    	SELECT * FROM TWO
    </select>

测试结果:

{
    "twoData": [
        {
            "id": 1,
            "twoAaa": "数据库2数据aaa",
            "twoBbb": "数据库2数据bbb",
            "twoCcc": "数据库2数据ccc",
            "twoDdd": "数据库2数据ddd"
        },
        {
            "id": 2,
            "twoAaa": "数据库2",
            "twoBbb": "数据库2",
            "twoCcc": "数据库2",
            "twoDdd": "数据库2"
        }
    ],
    "oneData": [
        {
            "id": 1,
            "oneAaa": "数据库1数据aaa",
            "oneBbb": "数据库1数据bbb",
            "oneCcc": "数据库1数据ccc",
            "oneDdd": "数据库1数据ddd"
        },
        {
            "id": 2,
            "oneAaa": "数据库1",
            "oneBbb": "数据库1",
            "oneCcc": "数据库1",
            "oneDdd": "数据库1"
        }
    ]
}

猜你喜欢

转载自blog.csdn.net/qq_34988304/article/details/84343043
今日推荐