SpringBoot連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)(SpringBoot+SqlServer)
場(chǎng)景
同事要用SqlServer寫一個(gè)小項(xiàng)目,但是有個(gè)問題就是他們的數(shù)據(jù)需要存到多個(gè)數(shù)據(jù)庫(kù)中,其中兩個(gè)庫(kù)的名字是account和game,不知道怎么處理切換,然后我這邊寫了個(gè)測(cè)試暫時(shí)沒有問題,求大神指教
SpringBoot配置文件
#連接sqlserver數(shù)據(jù)庫(kù)
spring.datasource.account.jdbc-url=jdbc:sqlserver://172.16.10.2:1433;DatabaseName=account
spring.datasource.account.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.account.username=sa
spring.datasource.account.password=plo#@!
spring.datasource.game.jdbc-url=jdbc:sqlserver://172.16.10.2:1433;DatabaseName=game
spring.datasource.game.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.game.username=sa
spring.datasource.game.password=plo#@!自定義配置文件
package org.geemp.game.config;
import org.apache.ibatis.session.SqlSessionFactory;
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.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* @author JackRen
* @date 2021-12-01 14:14
* @description:
*/
@Configuration
@MapperScan(basePackages= {"org.geemp.game.account"},sqlSessionFactoryRef="gameSqlSessionFactory")
public class DataSourceAccountConfig {
@Bean(name="accountDataSource")
@ConfigurationProperties(prefix="spring.datasource.account")
public DataSource accountDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="accountSqlSessionFactory")
@Primary
public SqlSessionFactory accountSqlSessionFactory(@Qualifier("accountDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name="accountTransactionManager")//配置事務(wù)
@Primary
public DataSourceTransactionManager accountTransactionManager(@Qualifier("accountDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name="accountSqlSessionTemplate")
@Primary
public SqlSessionTemplate accountSqlSessionTemplate(@Qualifier("accountSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
package org.geemp.game.config;
import org.apache.ibatis.session.SqlSessionFactory;
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.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* @author JackRen
* @date 2021-12-01 14:15
* @description:
*/
@Configuration
@MapperScan(basePackages= {"org.geemp.game.gm"},sqlSessionFactoryRef="gameSqlSessionFactory")
public class DataSourceGameConfig {
@Bean(name="gameDataSource")
@ConfigurationProperties(prefix="spring.datasource.game")
public DataSource gameDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="gameSqlSessionFactory")
public SqlSessionFactory gameSqlSessionFactory(@Qualifier("gameDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name="gameTransactionManager")//配置事務(wù)
public DataSourceTransactionManager gameTransactionManager(@Qualifier("gameDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name="gameSqlSessionTemplate")
public SqlSessionTemplate gameSqlSessionTemplate(@Qualifier("gameSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
在配置類掃描的包下進(jìn)行數(shù)據(jù)交互

我們以game為例:
mapper:
package org.geemp.game.gm.mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* @author JackRen
* @date 2021-12-01 14:43
* @description:
*/
public interface GameMapper {
@Select("select CT_INGOT,CT_GOLD,CT_POINT from chartable where CT_USERID = #{CT_USERID} and CT_NAME=#{CT_NAME}")
Listservice:
package org.geemp.game.gm.service;
import org.geemp.game.gm.mapper.GameMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @author JackRen
* @date 2021-04-27 13:31
* @description:
*/
@Service
public class GameDBServiceImpl {
@Autowired
private GameMapper gameMapper;
public List同樣的,account和game是一樣的寫法,篇幅限制不再粘貼,到這里就完成了,可以啟動(dòng)測(cè)試!
評(píng)論
圖片
表情
