浙江网站建设营销,wordpress宠物插件,html主页面模板,定制做网站费用目录 SpringBoot整合多数据源整合步骤具体整合步骤如下#xff1a;1、在application.properties中配置出多个数据源2、在代码中创建出mapper目录#xff0c;在mapper目录下创建出不同数据源的目录创建出目录MySQL数据源的MapperSQL Server数据源的Mapper 3、创建config packa… 目录 SpringBoot整合多数据源整合步骤具体整合步骤如下1、在application.properties中配置出多个数据源2、在代码中创建出mapper目录在mapper目录下创建出不同数据源的目录创建出目录MySQL数据源的MapperSQL Server数据源的Mapper 3、创建config package目录在config目录下创建出两个数据源的配置类创建出目录MySqlConfigSQLServerConfig 4、在Resource下生成Mapper.xml文件MySQL Mapper xmlSQL Server Mapper xml 验证创建实体类创建Controller编写测试接口Postman接口测试 SSM整合多数据源 SpringBoot整合多数据源
在SpringBoot工程中整合多数据源和在SSM工程中整合稍微有一点区别。
整合步骤
具体整合步骤如下
1、在application.properties中配置出多个数据源
spring.datasource.test1.jdbc-urljdbc:mysql://yourmysqlurl/yourdb
spring.datasource.test1.usernameyourusername
spring.datasource.test1.passwordyourpassword
spring.datasource.test1.driver-class-namecom.mysql.cj.jdbc.Driverspring.datasource.test2.jdbc-urljdbc:sqlserver://yoursqlserverurl;databaseyourdb;
spring.datasource.test2.usernameyourusername
spring.datasource.test2.passwordyourpassword
spring.datasource.test2.driver.class-namecom.microsoft.sqlserver.jdbc.SQLServerDriver2、在代码中创建出mapper目录在mapper目录下创建出不同数据源的目录
创建出目录 MySQL数据源的Mapper Repositorypublic interface MUserTableMapper {public User getOneByMySQLId(Integer id);}SQL Server数据源的Mapper Repositorypublic interface UserTableMapper {public User getOneBySQLServerId(Integer id);}3、创建config package目录在config目录下创建出两个数据源的配置类
创建出目录 MySqlConfig
package com.test.multipledatasource.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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;Configuration
MapperScan(basePackages com.test.multipledatasource.mapper.mysql,sqlSessionTemplateRef mysqlSqlSessionTemplate)
public class DataSourceMysqlConfig {Bean(name mysqlDataSource)ConfigurationProperties(prefix spring.datasource.test1)Primarypublic DataSource test1DataSource(){return DataSourceBuilder.create().build();}Bean(name mysqlSqlSessionFactory)Primarypublic SqlSessionFactory test2SqlSessionFactory(Qualifier(mysqlDataSource) DataSource dataSource) throws Exception{SqlSessionFactoryBean sqlSessionFactoryBean new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(classpath*:mapper/*.xml));return sqlSessionFactoryBean.getObject();}Bean(name mysqlTransactionMananger)Primarypublic DataSourceTransactionManager test2TransactionManager(Qualifier(mysqlDataSource) DataSource dataSource){return new DataSourceTransactionManager(dataSource);}Bean(name mysqlSqlSessionTemplate)Primarypublic SqlSessionTemplate test2SqlSessionTemplate(Qualifier(mysqlSqlSessionFactory) SqlSessionFactory sqlSessionFactory){
// sqlsessionTemplate接受sqlsessionfactory中的数据来创建sqlsessionreturn new SqlSessionTemplate(sqlSessionFactory);}}
SQLServerConfig
package com.test.multipledatasource.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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;Configuration
MapperScan(basePackages com.test.multipledatasource.mapper.sqlserver,sqlSessionTemplateRef sqlserverSqlSessionTemplate)
public class DataSourceSqlServerConfig {// Bean将方法生命成对象交个spring来管理。spring只引用一次该方法然后就交由springIOC来管理Bean(namesqlserverDataSource)ConfigurationProperties(prefix spring.datasource.test2)
// 当一个类中有多个Bean时加Primary注解的可以优先加载public DataSource test2DataSource(){return DataSourceBuilder.create().build();}Bean(name sqlserverSqlSessionFactory)public SqlSessionFactory testSqlSessionFactroy(Qualifier(sqlserverDataSource) DataSource dataSource) throws Exception{SqlSessionFactoryBean sqlSessionFactoryBean new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(classpath*:mapper/*.xml));return sqlSessionFactoryBean.getObject();}Bean(name sqlserverTransactionManager)public DataSourceTransactionManager testTransactionManager(Qualifier(sqlserverDataSource) DataSource dataSource) throws Exception{return new DataSourceTransactionManager(dataSource);}Bean(name sqlserverSqlSessionTemplate)public SqlSessionTemplate testSqlSessionTemplate(Qualifier(sqlserverSqlSessionFactory) SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}
}
4、在Resource下生成Mapper.xml文件 MySQL Mapper xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.test.multipledatasource.mapper.mysql.MUserTableMapperselect idgetOneByMySQLId resultTypecom.test.multipledatasource.bean.Userselect * from user_infoWHERE id#{id} /select
/mapperSQL Server Mapper xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.test.multipledatasource.mapper.sqlserver.UserTableMapperselect idgetOneBySQLServerId resultTypecom.test.multipledatasource.bean.Userselect * from user_infoWHERE id#{id} /select
/mapper验证
创建实体类
Data
NoArgsConstructor
JsonSerialize(include JsonSerialize.Inclusion.NON_NULL)
EqualsAndHashCode(callSuper false)
public class User {private String name ;private String passwd;...
}创建Controller编写测试接口
RestController
public class UserInfoController {//My SQL mapperAutowiredMUserTableMapper mUserTableMapper;//SQL Server mapperAutowiredUserTableMapper userTableMapper;GetMapping(/v1/api/mysql/user)public ResultUser getMySQLUserById(RequestParam Integer userid) {//mysql数据源User user mUserTableMapper.getOneByMySQLId(userid);return getResult(200,Success,user);}GetMapping(/v1/api/sqlserver/user)public ResultUser getSQLServerUserById(RequestParam Integer userid) {//sql server数据源User user userTableMapper.getOneBySQLServerId(userid);return getResult(200,Success,user);}
}Postman接口测试
查看接口返回正确。
SSM整合多数据源
在SSM工程中整合多数据源基本和Spring Boot工程一致稍微有一点区别。在Config配置类中需要手动的指定DataSource的信息。否则会报错Cause: java.lang.IllegalArgumentException: one of either dataSource or dataSourceClassName must be specified
package com.test.config;import com.zaxxer.hikari.HikariDataSource;
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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;Configuration
MapperScan(basePackages com.test.mapper.mysql,sqlSessionTemplateRef mysqlSqlSessionTemplate)
public class DataSourceMysqlConfig {Bean(name mysqlDataSource)ConfigurationProperties(prefix spring.datasource.test1)Primarypublic DataSource test1DataSource(){return DataSourceBuilder.create().type(HikariDataSource.class).driverClassName(properties.determineDriverClassName()).url(properties.determineUrl()).username(properties.determineUsername()).password(properties.determinePassword()).build();}Bean(name mysqlSqlSessionFactory)Primarypublic SqlSessionFactory test2SqlSessionFactory(Qualifier(mysqlDataSource) DataSource dataSource) throws Exception{SqlSessionFactoryBean sqlSessionFactoryBean new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(classpath*:com/test/mapper/mysql/*.xml));return sqlSessionFactoryBean.getObject();}Bean(name mysqlTransactionMananger)Primarypublic DataSourceTransactionManager test2TransactionManager(Qualifier(mysqlDataSource) DataSource dataSource){return new DataSourceTransactionManager(dataSource);}Bean(name mysqlSqlSessionTemplate)Primarypublic SqlSessionTemplate test2SqlSessionTemplate(Qualifier(mysqlSqlSessionFactory) SqlSessionFactory sqlSessionFactory){
// sqlsessionTemplate接受sqlsessionfactory中的数据来创建sqlsessionreturn new SqlSessionTemplate(sqlSessionFactory);}
}