SpringBoot3配置Mysql与SQL Server双数据源

工程结构如上图

1.配置POM依赖

    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20230618</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.2.16</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>3.0.2</version>
    </dependency>
    <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>mssql-jdbc</artifactId>
    </dependency>

    <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <version>8.1.0</version>
    </dependency>

2.配置数据库连接信息->application.yml

spring:
  datasource:
    mysql:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/springboottest
      username: root
      password: mysql_dZJc2d
    sqlserver:
      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
      url: jdbc:sqlserver://localhost:1433;databaseName=TutorialDB;encrypt=true;trustServerCertificate=true
      username: sa
      password: 123456


Server:
  port: 10086
  servlet:
    context-pa th: /dbw

3.多数据源配置定义

mysqlConfig.java
@Configuration
@MapperScan(basePackages = "org.dbw.mapper.mysqlDataSource", sqlSessionTemplateRef = "sqlSessionTemplateMysql")
public class mysqlConfig {

    @Bean(name = "MysqlSource")
    @ConfigurationProperties(prefix = "spring.datasource.mysql")
    @Primary //设置主数据源
    public DataSource DataSourceMysql(){
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;

    }

    @Bean(name = "sqlSessionFactoryMysql")
    @Primary
    public SqlSessionFactory sqlSessionFactoryOne(@Qualifier("MysqlSource") DataSource dataSource)throws Exception{
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "dataSourceTransactionManagerMysql")
    @Primary
    public DataSourceTransactionManager dataSourceTransactionManagerOne(@Qualifier("MysqlSource") DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplateMysql")
    @Primary
    public SqlSessionTemplate sqlSessionTemplateOne(@Qualifier("sqlSessionFactoryMysql") SqlSessionFactory sqlSessionFactory)throws Exception{
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}
sqlserverConfig.java
@Configuration
@MapperScan(basePackages = "org.dbw.mapper.sqlserverDataSource", sqlSessionTemplateRef = "sqlSessionTemplateSqlserver")
public class sqlserverConfig {
    @Bean(name = "SqlserverSource")
    @ConfigurationProperties(prefix = "spring.datasource.sqlserver")
    public DataSource DataSourceSqlserver(){
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;

    }

    @Bean(name = "sqlSessionFactorySqlserver")
    public SqlSessionFactory sqlSessionFactoryOne(@Qualifier("SqlserverSource") DataSource dataSource)throws Exception{
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "dataSourceTransactionManagerSqlserver")
    public DataSourceTransactionManager dataSourceTransactionManagerOne(@Qualifier("SqlserverSource") DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplateSqlserver")
    public SqlSessionTemplate sqlSessionTemplateOne(@Qualifier("sqlSessionFactorySqlserver") SqlSessionFactory sqlSessionFactory)throws Exception{
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

3.Mapper实现

UserMapperMysql.java
public interface UserMapperMysql {

    @Select("select name,age from test")
    List<User> fetchAll();
}
UserMapperSqlserver.java
public interface UserMapperSqlserver {

    @Select("SELECT NAME,AGE FROM TEST")
    List<User> fetchAll();
}

4.Service实现

UserService.java

public interface UserService {
    List<User> fetchAll();
    List<User> fetchSubAll();
}
UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapperMysql userMapperMysql;

    @Autowired
    private UserMapperSqlserver userMapperSqlserver;

    @Override
    public List<User> fetchAll() {
        return userMapperMysql.fetchAll();
    }
    public List<User> fetchSubAll() {
        return userMapperSqlserver.fetchAll();
    }
}

5.Contoller实现

UserContoller.java
@CrossOrigin
@RestController
public class UserContoller {

    @Autowired
    private UserService userService;


    @GetMapping("/fetchall")
    public String FatchAll()
    {
        return utils.List2JsonArrayString(userService.fetchAll());
    }
    @GetMapping("/fetchsuball")
    public String FatchSubAll()
    {
        return utils.List2JsonArrayString(userService.fetchSubAll());
    }

}

6.运行并测试结果

/fetchsuball 接口查询SQL Server数据库中的数据,没问题

/fetchall 接口查询MySQL数据库中的数据,同样没问题

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Spring Boot在同一个应用中使用MySQL和MongoDB数据源可以通过以下步骤实现: 1. 添加依赖 在pom.xml文件中添加MySQL和MongoDB的依赖: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.7</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.2.6.RELEASE</version> </dependency> ``` 2. 配置数据源 在application.properties文件中配置MySQL和MongoDB的数据源: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.initial-size=5 spring.datasource.druid.min-idle=5 spring.datasource.druid.max-active=20 spring.datasource.druid.test-on-borrow=true spring.datasource.druid.test-while-idle=true spring.datasource.druid.time-between-eviction-runs-millis=60000 spring.datasource.druid.validation-query=select 1 from dual spring.data.mongodb.uri=mongodb://localhost:27017/dbname ``` 3. 配置数据源连接池 在application.properties文件中配置Druid连接池: ```properties spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.filters=stat,wall spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 ``` 4. 配置JdbcTemplate和MongoTemplate 在Spring Boot应用程序中,可以使用JdbcTemplate和MongoTemplate来访问MySQL和MongoDB数据源。 ```java @Configuration public class DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DruidDataSourceBuilder.create().build(); } @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory, MappingMongoConverter mappingMongoConverter) { return new MongoTemplate(mongoDbFactory, mappingMongoConverter); } } ``` 5. 使用数据源 在需要使用MySQL和MongoDB数据源的类中,注入JdbcTemplate和MongoTemplate,并使用它们来访问数据库。 ```java @Service public class UserService { @Autowired private JdbcTemplate jdbcTemplate; @Autowired private MongoTemplate mongoTemplate; public void addUser(User user) { // 使用JdbcTemplate访问MySQL数据源 jdbcTemplate.update("INSERT INTO user (id, username, password) VALUES (?, ?, ?)", user.getId(), user.getUsername(), user.getPassword()); // 使用MongoTemplate访问MongoDB数据源 mongoTemplate.save(user); } } ``` 以上就是使用Spring Boot和Druid实现MySQL和MongoDB数据源的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值