当前位置: 首页 > news >正文

springboot配置多数据源(mysql、hive)

MyBatis-Plus 不能也不建议同时去“控制” Hive。它从设计到实现都假定底层是 支持事务、支持标准 SQL 方言关系型数据库(MySQL、PostgreSQL、Oracle、SQL Server 等),而 Hive 两者都不完全符合。如果操作两个数据源都是mysql或者和关系数据库的组合就可以了。以下主要介绍操作mysql和hive的方案。

1.引入依赖

//mysql的数据源
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version></dependency>//hive的依赖,我们这里用的星环的指定的本地的lib,其他可以直接根据公司的实际版本等情况去配置即可

2.添加配置yml

spring:datasource:mysql:url: jdbc:mysql://4555555:5555/sxxxx?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=falseusername: rootpassword: rorotdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSource  # 显式指定hikari:# 最大连接数maximum-pool-size: 10# 最小空闲连接数minimum-idle: 5# 连接获取超时时间(30秒)connection-timeout: 30000# 空闲超时时间(10分钟)idle-timeout: 600000# 最大连接寿命(30分钟)max-lifetime: 1800000pool-name: mysql-pool  # 连接池名称(便于监控)hive:url: jdbc:hive2://your-hive-server:10000/defaultusername: hivepassword: hivedriver-class-name: org.apache.hive.jdbc.HiveDrivertype: com.zaxxer.hikari.HikariDataSource # 显式指定hikari:# Hive连接数通常较少(查询较慢)maximum-pool-size: 5# 最小空闲连接数minimum-idle: 2# Hive查询可能较慢,适当延长超时connection-timeout: 60000# 空闲连接超时(5分钟)idle-timeout: 300000# 最大连接寿命(30分钟)max-lifetime: 1800000pool-name: hive-pool

3.添加配置类DataSourceConfig和MyBatisPlusConfig

先添加DataSourceConfig,主要是告知spring我们有两个数据源,分别叫什么名称(bean),并且我们的hive交给我们的jdbctemplate去管理。在添加MyBatisPlusConfig,主要是把mysql交给mybatisplus去控制

package com.sjztdz.selectprovincetrace.selecttrace.config;import com.zaxxer.hikari.HikariDataSource;
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.jdbc.core.JdbcTemplate;import javax.sql.DataSource;@Configuration
public class DataSourceConfig {// MySQL数据源配置@Bean("mysqlDataSource")@ConfigurationProperties(prefix="spring.datasource.mysql")public DataSource mysqlDataSource() {return DataSourceBuilder.create().type(HikariDataSource.class).build();}// Hive数据源配置@Bean("hiveDataSource")@ConfigurationProperties(prefix="spring.datasource.hive")public DataSource hiveDataSource() {return DataSourceBuilder.create().type(HikariDataSource.class).build();}// Hive配置jdbctemplate hive一般不需要事务@Bean("hiveJdbcTemplate")public JdbcTemplate hiveJdbcTemplate(@Qualifier("hiveDataSource") DataSource dataSource) {return new JdbcTemplate(dataSource);}}
package com.sjztdz.selectprovincetrace.selecttrace.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
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 org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;/*** MySQL 专属配置类* 1. 只扫 MySQL 的 Mapper 接口(@MapperScan)* 2. 给 MySQL 单独建一个 SqlSessionFactory 和事务管理器* 3. 加载 MyBatis-Plus 分页插件*/
@Configuration
@MapperScan(basePackages = "com.xxxxx.selecttrace.mapper", sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MyBatisPlusConfig {@Bean("mysqlSqlSessionFactory")public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {//用 MyBatis-Plus 自己的工厂bean,才能识别 MP 的注解和扩展MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();//告诉工厂用那个数据源--mysqlsessionFactory.setDataSource(dataSource);//告诉工厂去哪里找 XML 映射文件sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**.xml"));// 分页插件MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));sessionFactory.setPlugins(interceptor);return sessionFactory.getObject();}/*** 给 MySQL 再配一个独立的事务管理器* 以后在 Service 层想只控制 MySQL 事务时,写:*   @Transactional("mysqlTransactionManager")* 就不会误伤到 Hive 或其它数据源*/@Bean("mysqlTransactionManager")public PlatformTransactionManager mysqlTransactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}

注意@Qualifie的使用就针对多数个类去实现同一个接口时候,防止我们找错!

4.使用

mysql-mybatis的使用

@Service
public class MysqlUserService {@Autowiredprivate UserMapper userMapper; // MyBatis-Plus Mapperpublic List<User> getUsers() {return userMapper.selectList(Wrappers.emptyWrapper());}public void addUser(User user) {userMapper.insert(user);}
}

hive-jdbcTemplate的使用

@Service
public class HiveQueryService {@Autowiredprivate JdbcTemplate hiveJdbcTemplate;public List<Map<String, Object>> queryHiveData(String sql) {return hiveJdbcTemplate.queryForList(sql);}public void executeHiveDDL(String ddl) {hiveJdbcTemplate.execute(ddl);}
}

http://www.dtcms.com/a/367532.html

相关文章:

  • 机器学习如何精准预测高值
  • 【单片机day03】
  • More Effective C++ 条款28:智能指针
  • 洛谷 P3384 【模板】重链剖分/树链剖分-提高+/省选-
  • Websocket链接如何配置nginx转发规则?
  • Linux网络服务——基础设置
  • bd09转2gs84坐标算法
  • Python可视化93阅兵武器进化
  • 适应新环境:Trae编辑器下的IDEA快捷键定制
  • AgentThink:一种在自动驾驶视觉语言模型中用于工具增强链式思维推理的统一框架
  • 2025年数学建模国赛B题超详细解题思路
  • CSDN 与 掘金 高效学习指南
  • Web基础、HTTP/HTTPS协议与Nginx详解
  • 深度学习篇---MNIST:手写数字数据集
  • 【算法速成课2 | 题单】背包问题
  • RAG学习
  • Netty从0到1系列之Buffer【上】
  • Flutter之riverpod状态管理Widget UI详解
  • 投标委托测试如何选择第三方检测机构?
  • 记录SSL部署,链路不完整问题
  • Unity Standard Shader 解析(五)之ShadowCaster
  • go 初始化组件最佳实践
  • 2025数学建模国赛高教社杯A题思路代码文章助攻
  • deveco 出现hvigor版本与系统版本不匹配
  • (自用)Linux 常用命令自查文档
  • QT6 配置 Copilot插件
  • 以StarRocks为例讲解MPP架构和列式存储
  • Kafka 学习教程:从基础概念到实践操作
  • 香港云主机常见使用问题汇总
  • 【图像处理基石】图像在频域处理和增强时,如何避免频谱混叠?