springboot+Mybatis(MybatisPlus)+HikariCP多数据源动态配置(三个数据源)

多数据源 - dynamic-datasource | 集成 HikariCP 连接池 基于 SpringBoot 的多数据源 dynamic-datasource 与 HikariCP 数据库连接池集成。 阅读详情

springboot+Mybatis(MybatisPlus)+HikariCP多数据源动态配置(三个数据源)

我们新做的系统可能是很多个数据源,所以我闲来无事研究一下Mybatis多数据源的配置,然后连接池只要你不配置默认就是HikariCP,被称为最快速的连接池。所以我们使用HikariCP数据库连接池,需要用到aop动态切换,话不多说,上代码了。 1.pom.xml大概要使用的包,仅供参考,我也需要自动生成代码所以也会有MybatisPlus的包
<!-- ##################### mybatis ###########################-->
  • <!-- mybatis分页插件 -->
  • <dependency>
  • <groupId>com.github.pagehelper</groupId>
  • <artifactId>pagehelper</artifactId>
  • <version>4.1.0</version>
  • </dependency>
  • <!-- mybatis-plus 核心库 -->
  • <dependency>
  • <groupId>com.baomidou</groupId>
  • <artifactId>mybatis-plus</artifactId>
  • <version>2.1.8</version>
  • </dependency>
  • <!-- mybatis-plus-模板引擎自动生成代码用 -->
  • <dependency>
  • <groupId>org.apache.velocity</groupId>
  • <artifactId>velocity-engine-core</artifactId>
  • <version>2.0</version>
  • </dependency>
  • <!-- mybatis-springboot -->
  • <dependency>
  • <groupId>org.mybatis.spring.boot</groupId>
  • <artifactId>mybatis-spring-boot-starter</artifactId>
  • <version>1.3.2</version>
  • </dependency>
  • <!-- ##################### mybatis end ###########################-->
  • <!-- springboot-aop -->
  • <dependency>
  • <groupId>org.springframework.boot</groupId>
  • <artifactId>spring-boot-starter-aop</artifactId>
  • </dependency>
  • <dependency>
  • <groupId>org.assertj</groupId>
  • <artifactId>assertj-core</artifactId>
  • </dependency>
  • 2.然后就是yml的配置。

    1. spring:
    2. aop:
    3. proxy-target-class: true
    4. # proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。
    5. #如果proxy-target-class 属性值被设置为true,那么基于类的代理将起作用(这时需要cglib库)。如果proxy-target-class属值被设置为false或者这个属性被省略,那么标准的JDK 基于接口的代理将起作用。
    6. auto: true
    7. application:
    8. name: gsa-geographic-system
    9. datasource:
    10. ds0:
    11. jdbc-url: jdbc:mysql://localhost:3306/xdclass?useUnicode=true&characterEncoding=utf-8&useSSL=false
    12. username: root
    13. password: root
    14. driver-class-name: com.mysql.jdbc.Driver
    15. ds1:
    16. jdbc-url: jdbc:mysql://localhost:3306/mall_0?useUnicode=true&characterEncoding=utf-8&useSSL=false
    17. username: root
    18. password: root
    19. driver-class-name: com.mysql.jdbc.Driver
    20. ds2:
    21. jdbc-url: jdbc:mysql://localhost:3306/babytun?useUnicode=true&characterEncoding=utf-8&useSSL=false
    22. username: root
    23. password: root
    24. driver-class-name: com.mysql.jdbc.Driver

    3.以上准备好了以后就需要配置注入了,创建类MybatisPlusConfig。

    1. package gsa.geographic.system.config.dataSource;
    2. import com.baomidou.mybatisplus.MybatisConfiguration;
    3. import com.baomidou.mybatisplus.entity.GlobalConfiguration;
    4. import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
    5. import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
    6. import com.github.pagehelper.PageHelper;
    7. import gsa.geographic.system.enumclass.DBTypeEnum;
    8. import org.apache.ibatis.plugin.Interceptor;
    9. import org.apache.ibatis.session.SqlSessionFactory;
    10. import org.apache.ibatis.type.JdbcType;
    11. import org.springframework.beans.factory.annotation.Qualifier;
    12. import org.springframework.boot.context.properties.ConfigurationProperties;
    13. import org.springframework.boot.jdbc.DataSourceBuilder;
    14. import org.springframework.context.annotation.Bean;
    15. import org.springframework.context.annotation.Configuration;
    16. import org.springframework.context.annotation.Primary;
    17. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    18. import javax.sql.DataSource;
    19. import java.util.HashMap;
    20. import java.util.Map;
    21. import java.util.Properties;
    22. /**
    23. * 分页配置
    24. *
    25. * @Author df
    26. * @Date 2019/8/20 10:09
    27. * @Version 1.0
    28. */
    29. @Configuration
    30. public class MybatisPlusConfig {
    31. /**
    32. * mybatis-plus分页插件<br>
    33. * 文档:http://mp.baomidou.com<br>
    34. */
    35. @Bean
    36. public PaginationInterceptor paginationInterceptor() {
    37. PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
    38. paginationInterceptor.setDialectType("mysql");
    39. // paginationInterceptor.setLimit(你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制);
    40. //return new PerformanceInterceptor();
    41. return paginationInterceptor;
    42. }
    43. /**
    44. * 配置mybatis的分页插件pageHelper
    45. *
    46. * @return
    47. */
    48. @Bean
    49. public PageHelper pageHelper() {
    50. PageHelper pageHelper = new PageHelper();
    51. Properties properties = new Properties();
    52. properties.setProperty("offsetAsPageNum", "true");
    53. properties.setProperty("rowBoundsWithCount", "true");
    54. properties.setProperty("reasonable", "true");
    55. properties.setProperty("dialect", "mysql"); //配置mysql数据库的方言 pageHelper.setProperties(properties); return pageHelper; }}
    56. return pageHelper;
    57. }
    58. /**
    59. * 创建第一个数据源
    60. * @return
    61. */
    62. @Bean(name = "ds0")
    63. @ConfigurationProperties(prefix = "spring.datasource.ds0")
    64. public DataSource dataSource0() {
    65. return DataSourceBuilder.create().build();
    66. }
    67. /**
    68. * 创建第二个数据源
    69. * @return
    70. */
    71. @Bean(name = "ds1")
    72. @ConfigurationProperties(prefix = "spring.datasource.ds1")
    73. public DataSource dataSource1() {
    74. return DataSourceBuilder.create().build();
    75. }
    76. /**
    77. * 创建第三个数据源
    78. * @return
    79. */
    80. @Bean(name = "ds2")
    81. @ConfigurationProperties(prefix = "spring.datasource.ds2")
    82. public DataSource dataSource2() {
    83. return DataSourceBuilder.create().build();
    84. }
    85. /**
    86. * 动态数据源配置
    87. *
    88. * @return
    89. */
    90. @Bean
    91. @Primary
    92. public DataSource multipleDataSource(@Qualifier("ds0") DataSource ds0,
    93. @Qualifier("ds1") DataSource ds1,
    94. @Qualifier("ds2") DataSource ds2) {
    95. DynamicDataSource dynamicDataSource = new DynamicDataSource();
    96. Map<Object, Object> dataSources = new HashMap<>();
    97. dataSources.put(DBTypeEnum.DS0.getValue(), ds0);
    98. dataSources.put(DBTypeEnum.DS1.getValue(), ds1);
    99. dataSources.put(DBTypeEnum.DS2.getValue(), ds2);
    100. dynamicDataSource.setTargetDataSources(dataSources);
    101. dynamicDataSource.setDefaultTargetDataSource(ds0);
    102. return dynamicDataSource;
    103. }
    104. @Bean("sqlSessionFactory")
    105. public SqlSessionFactory sqlSessionFactory() throws Exception {
    106. // 导入mybatissqlsession配置
    107. MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
    108. // 指明数据源
    109. sessionFactory.setDataSource(multipleDataSource(dataSource0(), dataSource1(), dataSource2()));
    110. // 指明mapper.xml位置(配置文件中指明的xml位置会失效用此方式代替,具体原因未知)
    111. sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/**Mapper.xml"));
    112. // 指明实体扫描(多个package用逗号或者分号分隔)
    113. sessionFactory.setTypeAliasesPackage("gsa.geographic.system.entity");
    114. // 导入mybatis配置
    115. MybatisConfiguration configuration = new MybatisConfiguration();
    116. configuration.setJdbcTypeForNull(JdbcType.NULL);
    117. configuration.setMapUnderscoreToCamelCase(true);
    118. configuration.setCacheEnabled(false);
    119. sessionFactory.setConfiguration(configuration);
    120. // 添加分页功能
    121. sessionFactory.setPlugins(new Interceptor[]{
    122. paginationInterceptor()
    123. });
    124. // 导入全局配置
    125. sessionFactory.setGlobalConfig(globalConfiguration());
    126. return sessionFactory.getObject();
    127. }
    128. /**
    129. * 在代码中配置MybatisPlus替换掉application.yml中的配置
    130. *
    131. * @return
    132. */
    133. @Bean
    134. public GlobalConfiguration globalConfiguration() {
    135. GlobalConfiguration configuration = new GlobalConfiguration();
    136. configuration.setLogicDeleteValue("-1");
    137. configuration.setLogicNotDeleteValue("1");
    138. // 主键类型 0:数据库ID自增, 1:用户输入ID,2:全局唯一ID (数字类型唯一ID), 3:全局唯一ID UUID
    139. configuration.setIdType(0);
    140. // 驼峰下划线转换
    141. configuration.setDbColumnUnderline(true);
    142. // 是否动态刷新mapper
    143. configuration.setRefresh(true);
    144. return configuration;
    145. }
    146. }

    4.创建动态数据源的获取类DynamicDataSource继承AbstractRoutingDataSource

    1. package gsa.geographic.system.config.dataSource;
    2. import gsa.geographic.system.config.dataSource.DbContextHolder;
    3. import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
    4. /**
    5. * @Author df
    6. * 扩展Spring的AbstractRoutingDataSource抽象类,实现动态数据源(他的作用就是动态切换数据源)
    7. * AbstractRoutingDataSource中的抽象方法determineCurrentLookupKey是实现数据源的route的核心,
    8. * 这里对该方法进行Override。【上下文DbContextHolder为一线程安全的ThreadLocal】
    9. * @Date 2019/9/3 15:39
    10. * @Version 1.0
    11. */
    12. public class DynamicDataSource extends AbstractRoutingDataSource {
    13. /**
    14. * 取得当前使用哪个数据源
    15. *
    16. * @return
    17. */
    18. @Override
    19. protected Object determineCurrentLookupKey() {
    20. return DbContextHolder.getDbType();
    21. }
    22. }

    5.创建获取,设置数据源的类DbContextHolder,为了线程安全使用了ThreadLocal。

    1. package gsa.geographic.system.config.dataSource;
    2. import gsa.geographic.system.enumclass.DBTypeEnum;
    3. /**
    4. * @Author df
    5. * @Date 2019/9/3 16:14
    6. * @Version 1.0
    7. * @description:设置,获取,清空 当前线程内的数据源变量。
    8. */
    9. public class DbContextHolder {
    10. private static final ThreadLocal contextHolder = new ThreadLocal();
    11. /**
    12. * 设置数据源
    13. *
    14. * @param dbTypeEnum
    15. */
    16. public static void setDbType(DBTypeEnum dbTypeEnum) {
    17. contextHolder.set(dbTypeEnum.getValue());
    18. }
    19. /**
    20. * 取得当前数据源
    21. *
    22. * @return
    23. */
    24. public static String getDbType() {
    25. return (String) contextHolder.get();
    26. }
    27. /**
    28. * 清除上下文数据
    29. */
    30. public static void clearDbType() {
    31. contextHolder.remove();
    32. }
    33. }

    6.创建枚举类DBTypeEnum,方便添加查看哪些枚举类

    1. package gsa.geographic.system.enumclass;
    2. /**
    3. * @Author df
    4. * @Date 2019/9/3 15:45
    5. * @Version 1.0
    6. * 设置数据源
    7. */
    8. public enum DBTypeEnum {
    9. DS0("ds0"), DS1("ds1"), DS2("ds2");
    10. private String value;
    11. DBTypeEnum(String value) {
    12. this.value = value;
    13. }
    14. public String getValue() {
    15. return value;
    16. }
    17. }

    7.再添加一个aop切面类DataSourceSwitchAspect,这样就可以动态切换数据源了

    1. package gsa.geographic.system.config.dataSource;
    2. import gsa.geographic.system.enumclass.DBTypeEnum;
    3. import lombok.extern.slf4j.Slf4j;
    4. import org.aspectj.lang.JoinPoint;
    5. import org.aspectj.lang.annotation.Aspect;
    6. import org.aspectj.lang.annotation.Before;
    7. import org.aspectj.lang.annotation.Pointcut;
    8. import org.aspectj.lang.reflect.MethodSignature;
    9. import org.springframework.core.annotation.Order;
    10. import org.springframework.stereotype.Component;
    11. import java.util.Objects;
    12. /**
    13. * AOP方式动态切换数据源
    14. *
    15. * @Author df
    16. * @Date 2019/9/3 16:26
    17. * @Version 1.0
    18. */
    19. @Component
    20. @Aspect
    21. @Order(-100) //这是为了保证AOP在事务注解之前生效,Order的值越小,优先级越高
    22. @Slf4j
    23. public class DataSourceSwitchAspect {
    24. @Pointcut("execution(* gsa.geographic.system.service..*.*(..))")
    25. private void dbAspect() {
    26. }
    27. @Before("dbAspect()")
    28. public void db(JoinPoint joinPoint) {
    29. MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
    30. DataSourceSwitch dataSourceSwitch = methodSignature.getMethod().getAnnotation(DataSourceSwitch.class);
    31. if (Objects.isNull(dataSourceSwitch) || Objects.isNull(dataSourceSwitch.value())) {
    32. DbContextHolder.setDbType(DBTypeEnum.DS0);
    33. } else {
    34. switch (dataSourceSwitch.value().getValue()) {
    35. case "ds0":
    36. DbContextHolder.setDbType(DBTypeEnum.DS0);
    37. break;
    38. case "ds1":
    39. DbContextHolder.setDbType(DBTypeEnum.DS1);
    40. break;
    41. case "ds2":
    42. DbContextHolder.setDbType(DBTypeEnum.DS2);
    43. break;
    44. default:
    45. DbContextHolder.setDbType(DBTypeEnum.DS0);
    46. }
    47. }
    48. }
    49. }

    8.再添加一个可以供我们用注解形式的调用方式的接口。

    1. package gsa.geographic.system.config.dataSource;
    2. import gsa.geographic.system.enumclass.DBTypeEnum;
    3. import java.lang.annotation.ElementType;
    4. import java.lang.annotation.Retention;
    5. import java.lang.annotation.RetentionPolicy;
    6. import java.lang.annotation.Target;
    7. /**
    8. * Service方法调用
    9. *
    10. * @Author df
    11. * @Date 2019/9/3 16:32
    12. * @Version 1.0
    13. */
    14. @Retention(RetentionPolicy.RUNTIME)
    15. @Target({ElementType.METHOD})
    16. public @interface DataSourceSwitch {
    17. DBTypeEnum value() default DBTypeEnum.DS0;
    18. }

    好了配置以上我这边反正是可以启动正常的。

    然后开始在service里边使用不同的数据源把,先给大家我的serviceImpl的示例把!这是使用第一个数据源,其实配置默认的数据源以后默认的那个数据源是可以不用写注解表名的,其他两个数据源需要写上注解。

    1. package gsa.geographic.system.service.impl;
    2. import gsa.geographic.system.config.dataSource.DataSourceSwitch;
    3. import gsa.geographic.system.entity.TOrder0;
    4. import gsa.geographic.system.dao.TOrder0Mapper;
    5. import gsa.geographic.system.enumclass.DBTypeEnum;
    6. import gsa.geographic.system.service.TOrder0Service;
    7. import com.baomidou.mybatisplus.service.impl.ServiceImpl;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.stereotype.Service;
    10. import java.util.List;
    11. /**
    12. * <p>
    13. * 服务实现类
    14. * </p>
    15. *
    16. * @author df123
    17. * @since 2019-09-03
    18. */
    19. @Service
    20. public class TOrder0ServiceImpl extends ServiceImpl<TOrder0Mapper, TOrder0> implements TOrder0Service {
    21. @Autowired
    22. private TOrder0Mapper mapper;
    23. @DataSourceSwitch(DBTypeEnum.DS1)
    24. @Override
    25. public List getAll() {
    26. return mapper.selectList(null);
    27. }
    28. }
    1. package gsa.geographic.system.service.impl;
    2. import gsa.geographic.system.config.dataSource.DataSourceSwitch;
    3. import gsa.geographic.system.entity.TGoods;
    4. import gsa.geographic.system.dao.TGoodsMapper;
    5. import gsa.geographic.system.enumclass.DBTypeEnum;
    6. import gsa.geographic.system.service.TGoodsService;
    7. import com.baomidou.mybatisplus.service.impl.ServiceImpl;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.stereotype.Service;
    10. import java.util.List;
    11. /**
    12. * <p>
    13. * 服务实现类
    14. * </p>
    15. *
    16. * @author df123
    17. * @since 2019-09-03
    18. */
    19. @Service
    20. public class TGoodsServiceImpl extends ServiceImpl<TGoodsMapper, TGoods> implements TGoodsService {
    21. @Autowired
    22. private TGoodsMapper goodsMapper;
    23. @DataSourceSwitch(DBTypeEnum.DS2)
    24. @Override
    25. public List getAll() {
    26. return goodsMapper.selectList(null);
    27. }
    28. }

    9 然后在写上测试用例。

    1. package gsa.geographic.system.service.impl;
    2. import gsa.geographic.system.service.TGoodsService;
    3. import gsa.geographic.system.service.TOrder0Service;
    4. import gsa.geographic.system.service.UserService;
    5. import org.junit.Test;
    6. import org.junit.runner.RunWith;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.boot.test.context.SpringBootTest;
    9. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    10. import java.util.List;
    11. import static org.junit.Assert.*;
    12. /**
    13. * @Author df
    14. * @Date 2019/9/3 16:40
    15. * @Version 1.0
    16. */
    17. @SpringBootTest
    18. @RunWith(SpringJUnit4ClassRunner.class)
    19. public class UserServiceImplTest {
    20. @Autowired
    21. private UserService userService;
    22. @Autowired
    23. private TOrder0Service tOrder0Service;
    24. @Autowired
    25. private TGoodsService goodsService;
    26. @Test
    27. public void getAll() {
    28. List list = userService.selectList(null);
    29. List list1=tOrder0Service.getAll();
    30. List list2=goodsService.getAll();
    31. System.out.println(list);
    32. }
    33. }

    10.控制台结果,也能看到确实使用了HikariCP的数据库连接池,这样就大公告成了

     

     

基于dynamic-datasource实现多租户动态切换数据源 【代码】基于dynamic-datasource实现多租户动态切换数据源。 阅读详情

相关推荐

单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

并行通信:传输原理:数据各个位同时传输;优点:速度快; 缺点:占用引脚资源多。是指使用 8、16、32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传输的通讯方式,可以同一时刻传输多个数据位的数据。串行通信: 传输原理:数据按位顺序传输;优点:占用引脚资源少; 缺点:速度相对较慢。是指设备之间通过一根数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,同一时刻只能传输一位(bit)数据。 单工: 数据传输只支持数据在一个方向上传输。信息只能单方向传输的工作方式,一

qq_42475191的博客 1万+

Spring Boot动态切换数据源插件介绍

这里介绍的是我刚写的一个动态切换数据源的插件的介绍,Git地址rhettpang/dynamic-datasource。 简介 本项目用来动态切换多个数据源,原则上用户只要引入本项目,在相关配置文件中加入相关数据源的配置即可。目前是对slave数据源进行动态切换。 版本依赖 Spring Boot 1.5.0+ HikariCP 2.5.1 + 配置信息如下 slave: ho...

坤哥的博客 2509

window部署open claw(使用wsl-Ubuntu-docker部署)

本文详细介绍了在Windows 11系统下通过WSL2+Docker部署OpenClaw的完整流程。首先需要满足硬件配置要求并开启虚拟化功能,然后依次完成WSL2安装配置、Docker Desktop安装、OpenClaw镜像拉取等步骤。重点说明了端口映射、socat转发配置及openclaw.json文件修改方法。最后通过验证WSL2内网IP和端口访问服务。该方案具有最佳兼容性,能有效避免Windows环境下的依赖冲突问题。

Kmoyic的博客 2763

Springboot 多数据源 dynamic-datasource动态添加移除数据源

本文我们还是以dynamic-datasource来进阶学习。提供了一系列的API和配置项,可以非常方便地实现动态添加、移除数据源的功能。本文将介绍如何使用dynamic-datasource动态添加、移除数据源,并对相关代码进行解析。在多租户应用、读写分离等场景下,动态数据源可以方便地实现数据源的动态切换,提高应用程序的灵活性和扩展性。主要在多租户场景中,常常新的一个租户进来需要动态的添加一个数据源到库中,使得系统不用重启即可切换数据源。

日拱一卒无有尽,功不唐捐终入海 7114

智能优化算法-北方苍鹰优化算法(NGO)(附源码)

北方苍鹰优化算法 (Northern Goshawk Optimizer, NGO) 是一种基于群体智能的元启发式优化算法,它模拟了北方苍鹰(Northern Goshawk)的捕食行为、领地行为以及社交互动,用于解决复杂的优化问题。总之,NGO作为一种新颖的优化算法,在处理复杂优化问题方面展现出了潜力。随着进一步的研究和应用,NGO有望成为解决实际问题的有效工具。

w971656545的博客 1361

Debian 11 下用hostapd+dnsmasq搭建WiFi热点:从命令行到实战(避坑指南)

本文详细介绍了在Debian 11系统上,使用hostapd和dnsmasq从命令行搭建稳定WiFi热点的完整实战流程。内容涵盖环境准备、无线网卡AP模式检查、服务深度配置,并重点提供了从服务启动失败到客户端无法上网等常见问题的系统性排错指南,帮助用户避开配置陷阱,成功创建可用的无线接入点。

CAT789的专栏 772

Springboot + HikariCp + MybatisPlus多数据源配置 (1)

概述 以前一直用的druid,最近想换hikari了,因为druid的监控多数情况我用不到,hikari的速度更能让我满意 项目架构 项目依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <proj...

weixin_44215595的博客 6257

论文Agile Autonomy: Learning High-Speed Flight in the Wild开源代码运行记录

​ Agile Autonomy: Learning High-Speed Flight in the Wild Learning High-Speed Flight in the Wild 论文链接:https://www.science.org/doi/10.1126/scirobotics.abg5810 代码:https://github.com/uzh-rpg/agile_autonomy 国内复现:https://github.com/Howardcl/AgileAutonomyPX4

Hanamizukimr的博客 1488

springboot+MybatisPlus+HikariCP多数据源动态配置(实战篇)

最近做的系统有很多个数据源,所以我研究了一下Mybatis多数据源的配置,Springboot 2.x.x.RELEASE 版本之后连接池只要你不配置默认就是HikariCP,被称为最快速的连接池。由于这个项目不需要使用到Druid的监控,所以我使用HikariCP数据库连接池,需要用到aop动态切换,话不多说,上代码了。 pom.xml大概要使用的包,仅供参考,我也需要自动生成代码所以也会有MybatisPlus的包 yml文件的配置: 创建类MybatisPlusConfig,配置注入数据源

Hello-huang 6456

Multisim实战:从零搭建体温检测报警电路(附完整仿真文件+调试技巧)

本文详细介绍了如何使用Multisim从零搭建体温检测报警电路,涵盖LM35温度传感器、LM358运算放大器等核心器件的选型与连接,以及信号调理、阈值比较和数码管显示等关键电路设计。附赠完整仿真文件和实用调试技巧,帮助电子工程初学者快速掌握体温温度检测系统的设计与实现。

weixin_28285943的博客 293

白鲸优化算法(BWO)详解:从生物灵感 to 工程实践

白鲸优化算法(BWO)是一种新型的群体智能优化算法,模拟白鲸的游泳、捕食和鲸落行为。该算法通过平衡因子控制探索与开发阶段的转换:探索阶段采用正弦/余弦函数模拟白鲸的同步游泳,开发阶段引入莱维飞行增强局部搜索,鲸落阶段通过随机更新避免局部最优。BWO具有参数少、实现简单、收敛速度快等优点,已在多个优化问题上展现出优异性能。其数学模型将白鲸的三种核心行为抽象为位置更新公式,实现了全局搜索与局部开发的自然平衡。

qq_42212808的博客 290

Springboot + HikariCp + MybatisPlus多数据源配置 注解切换数据源 (2)

多数据源实现请参考上文 Springboot + HikariCp + MybatisPlus多数据源配置 (1) 由于手动切换在我看来并不优雅,但他最主要的是能够让我少写点代码。所以出现了Aop 首先引入aop依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

weixin_44215595的博客 3663

【NVIDIA GR00T N1 从入门到精通】第1章 环境搭建与基础配置 第2章 数据准备与格式转换

针对新型机器人形态的适配,需完成从硬件接口到数据模式的完整配置流程。创建modality_config.py文件自定义形态配置通过继承基类实现。配置类需实例化以下组件:状态模态定义(观测空间)、动作模态定义(动作空间)、相机模态定义(视觉输入)、可选的标注模态定义(语言指令或成功判定)。每个模态配置指定数据类型、形状、归一化统计量以及时序采样策略。状态模态配置状态配置的核心参数包括与。定义策略观测的历史时域窗口,对于高动态操作(如投掷、击打),需扩展历史窗口以捕捉运动趋势;

VectorShift的博客 95

SpringBoot配置MybatisPlus多数据源

SpringBoot集成Mybatis实现Hirika数据源多数据库配置 master,second

Lyndon的专栏 2733

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SpringBoot+MybatisPlus+HikariCP实现多数据源动态切换

*** 数据库类型枚举*/MASTER("master", "主库"),SLAVE("slave", "从库"),;return msg;

u014109358的博客 1854

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SpringBoot2.x+MybatisPlus+HikariCP多数据源动态配置

# SpringBoot2.x+MybatisPlus+HikariCP多数据源动态配置 >环境 >SpringBoot 2.7.0 >MybatisPlus 3.5.2 > [项目源码地址](https://gitee.com/248048936/SpringBootDemos/tree/master/DynamicMultiDatabase)

wm9028的专栏 1349

SpringBoot 、MybatisPlus 配置多数据源

先贴上配置多数据源用到的jar ,其他核心包自行加入 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;com.baomidou&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;dynamic-datasource-spring-boot-starter&amp;lt

你看不惯我又干不掉我 1171

SpringBoot+MybatisPlus整合多数据源(踩坑指南)

一、配置perproties/yml文件 (1)不同数据库的配置信息 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #spring.datasource.tomcat= com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:mysql://loc...

pyd950812的博客 5245

springboot+mybatis-plus 使用动态数据源

启动后读取db_config数据库配置,加载配置中的数据源; 请求时根据头部X-DBCODE来动态识别数据源

xk3286的博客 551

springboot mybatis-plus 多数据源配置(HikariCP)

springboot mybatis-plus 多数据源配置

qiaobing1226的博客 2030

spring boot hikari mybatis-plus多数据源

一 数据库连接的配置参数: spring: datasource: local: jdbc-url: jdbc:mysql://localhost:3306/local?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false username: ro...

wocaishiryr的博客 1360

使用Mybatis-Plus实现动态多数据源切换

本文将介绍如何使用Mybatis-Plus配合Spring Boot来实现动态多数据源的切换。我们将讨论依赖引入、配置修改、自定义数据源提供者、配置类编写、数据源工具类实现以及AOP切面编程的应用。通过上述步骤,我们已经成功地实现了Mybatis-Plus配合Spring Boot的动态多数据源切换。在现代的企业级应用中,常常需要根据不同的业务场景动态地切换数据源。Mybatis-Plus提供了一个基于Spring Boot的快速集成多数据源的启动器,在请求拦截器里面添加线程请求的机构。

abelethan的博客 4199

SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用!

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE正常情况下我们在开发系统的时候都是使用一个数据源,但是由于有些项目同步数据的时候不想造成数据库io消耗压力过大,便会一个项目对应多个数据源,即就会有个问题,Springboot配置db都是默认加载数据源连接,连接池默认配置,但是配置多个数据库url,这该怎么实现呢?

2401_89552134的博客 306

SpringBoot 整合MyBatis-Plus 详细教程,配置多数据源并支持事务,附带代码生成器使用教程

SpringBoot 整合MyBatis-Plus 详细教程,配置多数据源并支持事务,附带代码生成器使用教程 一.在pom.xml加入依赖,如下 <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope>

ChenJin_2的博客 5690
上一篇: 基于SpringBoot 框架MongoDB 一些简单的查询方式
下一篇: SpringBoot结合cxf自动生成webservice客户端代码插件
javaMyGod
博客等级 码龄16年 38粉丝 4原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值