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

网络公司网站报价新开网站

网络公司网站报价,新开网站,wordpress搜索页面怎么仿,国家疫情公布的网站文章目录 1. 环境准备2. 创建Spring Boot项目3. 添加依赖4. 配置多数据源5. 配置MyBatis-Plus6. 使用多数据源7. 创建Mapper接口8. 实体类定义9. 测试多数据源10. 注意事项10.1 事务导致多数据源失效问题解决方案: 10.2 ClickHouse的事务支持10.3 数据源切换的性能开…

文章目录

    • 1. 环境准备
    • 2. 创建Spring Boot项目
    • 3. 添加依赖
    • 4. 配置多数据源
    • 5. 配置MyBatis-Plus
    • 6. 使用多数据源
    • 7. 创建Mapper接口
    • 8. 实体类定义
    • 9. 测试多数据源
    • 10. 注意事项
      • 10.1 事务导致多数据源失效问题
        • 解决方案:
      • 10.2 ClickHouse的事务支持
      • 10.3 数据源切换的性能开销
      • 10.4 数据源配置的优先级
    • 11. 总结

使用Spring Boot 3.x + MyBatis-Plus + MySQL 8.0 + ClickHouse 24 实现多数据源配置

在现代的应用程序开发中,使用多个数据源已经成为一种常见的需求。例如,我们可能需要在同一个应用中使用MySQL作为主数据库,同时使用ClickHouse来处理大量的分析数据。本文将介绍如何使用Spring Boot 3.x、MyBatis-Plus、MySQL 8.0和ClickHouse 24,结合dynamic-datasource-spring-boot-starter实现多数据源配置。

1. 环境准备

在开始之前,确保你已经准备好以下环境:

  • JDK 17 或更高版本
  • Spring Boot 3.x
  • MySQL 8.0
  • ClickHouse 24
  • Maven 或 Gradle

2. 创建Spring Boot项目

首先,创建一个新的Spring Boot项目。你可以使用Spring Initializr来生成项目骨架,选择以下依赖:

  • Spring Web
  • MyBatis Framework
  • MySQL Driver
  • ClickHouse Driver

3. 添加依赖

pom.xml中添加以下依赖:

<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.0.0</springBoot></dependency><!-- MyBatis-Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency><!-- MySQL Driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!-- ClickHouse JDBC driver --><dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.3.2</version></dependency><!-- Dynamic Datasource --><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.6.1</version></dependency>
</dependencies>

4. 配置多数据源

application.yml中配置MySQL和ClickHouse的数据源:

spring:datasource:dynamic:primary: master # 设置默认的数据源strict: false # 是否严格匹配数据源,不严格匹配时,找不到对应数据源会使用默认数据源datasource:master:url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&connectTimeout=30000&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowPublicKeyRetrieval=trueusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverdw:url: jdbc:clickhouse://localhost:8123/mzdb?timezone=Asia/Shanghai&socket_timeout=600000&connect_timeout=60000username: defaultpassword: driver-class-name: com.clickhouse.jdbc.ClickHouseDriver

5. 配置MyBatis-Plus

在Spring Boot中配置MyBatis-Plus,确保它能够支持多数据源。

@Configuration
@MapperScan("com.example.mapper")
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

6. 使用多数据源

在代码中使用@DS注解来指定使用哪个数据源。@DS注解可以放在类或方法上。

@DS注解可以使用在mapper接口上,也可以使用在方法上,也可以使用在Service类上,取决于业务中需要实现的作用域

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getUsers() {return userMapper.selectList(null);}@DS("clickhouse") // 切换为clickhouse数据源public List<DwOperationRecordMapper> getAnalyticsData() {return analyticsMapper.selectList(null);}
}

7. 创建Mapper接口

创建对应的Mapper接口,并使用@Mapper注解标记。

/**
* 主数据源
*/
@Mapper
public interface SysUserMapper extends BaseMapper<SysUser> {
}
/**
* 副数据源
*/
@Mapper
@DS("dw") //切换为clickhouse数据源
public interface DwOperationRecordMapper extends BaseMapper<DwOperationRecord> {
}

8. 实体类定义

定义对应的实体类,并使用@TableName注解指定表名。

/**
* 主数据源
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "sys_user")
public class SysUser {//账号状态_启用public final static Integer FORBIDDEN = 0;@TableId(type = IdType.AUTO)private Long id;@Schema(description = "姓名")private String name;@Schema(description = "密码")private String password;@Schema(description = "账号名")private String userName;@Schema(description = "手机号")private String phone;
}/**
* 副数据源
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("DWS_OPERATION_RECORD")
public class DwOperationRecord implements Serializable {/*** 手术记录id*/@TableField(value = "surgical_id",exist = false)@Schema(description = "手术记录id")private String surgicalId;/*** 病案号*/@Schema(description ="病案号")private String patientid;/*** 姓名*/@Schema(description ="姓名")private String name;/*** 性别*/@Schema(description ="性别")private String sex;
}

9. 测试多数据源

编写测试类,验证多数据源是否正常工作。

@SpringBootTest
public class MultiDataSourceTest {@Autowiredprivate UserService userService;@Testpublic void testMySQLDataSource() {List<SysUser> users = userService.getUsers();Assert.notEmpty(users, "MySQL数据源查询失败");}@Testpublic void testClickHouseDataSource() {List<DwOperationRecord> list = userService.list();Assert.notEmpty(list, "ClickHouse数据源查询失败");}
}

10. 注意事项

10.1 事务导致多数据源失效问题

在使用多数据源时,如果开启了事务(@Transactional),可能会导致数据源切换失效。这是因为Spring的事务管理机制默认会绑定一个数据源,事务开启后不会动态切换数据源。

解决方案:
  1. 禁用事务
    如果业务场景允许,可以在切换数据源的方法上禁用事务:

    @DS("dw")
    @Transactional(rollbackFor = SQLException.class, propagation = Propagation.NOT_SUPPORTED) // 禁用事务
    public List<DwOperationRecord> getDwOperationRecord() {return dwOperationRecordMapper.selectList(null);
    }
    
  2. 使用@DSTransactional注解
    dynamic-datasource-spring-boot-starter提供了@DSTransactional注解,支持多数据源事务管理。需要在主数据源上开启事务,其他数据源不支持事务。

    @Transactional(rollbackFor = SQLException.class) // 主数据源事务
    public void updateUserAndLog(SysUser user) {userMapper.updateById(user);logToClickhouse(user); // 切换到ClickHouse
    }@DS("clickhouse")
    public void logToClickhouse(SysUser user) {dwOperationRecordMapper.insert(new DwOperationRecord(user.getId(), "UPDATE", LocalDateTime.now()));
    }
    
  3. 手动控制事务
    如果必须使用事务,可以手动控制事务的提交和回滚:

    @Autowired
    private DataSourceTransactionManager transactionManager;// 默认使用主数据源
    public void updateUserAndLog(SysUser user) {DefaultTransactionDefinition definition = new DefaultTransactionDefinition();TransactionStatus status = transactionManager.getTransaction(definition);try {userMapper.updateById(user);logToClickhouse(user); // 切换到ClickHousetransactionManager.commit(status);} catch (Exception e) {transactionManager.rollback(status);throw e;}
    }
    

10.2 ClickHouse的事务支持

ClickHouse本身不支持事务(ACID),因此在使用ClickHouse时,无法使用事务管理。如果需要保证数据一致性,可以通过业务逻辑或补偿机制来实现。


10.3 数据源切换的性能开销

频繁切换数据源可能会带来一定的性能开销,尤其是在高并发场景下。建议尽量减少数据源切换的次数,或者通过缓存机制优化数据访问。


10.4 数据源配置的优先级

如果同时配置了spring.datasource.urldynamic-datasourcedynamic-datasource会覆盖默认的spring.datasource配置。确保只使用一种配置方式,避免冲突。

11. 总结

通过以上步骤,我们成功地在Spring Boot 3.x项目中配置了MySQL和ClickHouse的多数据源,并使用MyBatis-Plus进行数据操作。dynamic-datasource-spring-boot-starter使得多数据源的切换变得非常简单,只需通过@DS注解即可轻松切换数据源。

在实际项目中,多数据源的配置可能会更加复杂,例如涉及到事务管理、读写分离等。但通过本文的介绍,你已经掌握了基本的配置方法,可以根据实际需求进行扩展和优化。

注意事项

  • 事务管理在多数据源场景下需要特别处理,避免数据源切换失效。
  • ClickHouse不支持事务,需通过业务逻辑保证数据一致性。
  • 尽量减少数据源切换的频率,优化性能。

希望本文对你有所帮助,祝你在使用Spring Boot开发多数据源应用时顺利!


文章转载自:
http://area.c7622.cn
http://approve.c7622.cn
http://expugnable.c7622.cn
http://gastroenterostomy.c7622.cn
http://cenogenesis.c7622.cn
http://worryingly.c7622.cn
http://pooch.c7622.cn
http://chiral.c7622.cn
http://brachycephalic.c7622.cn
http://earn.c7622.cn
http://technicology.c7622.cn
http://castanets.c7622.cn
http://cheder.c7622.cn
http://tradesfolk.c7622.cn
http://puss.c7622.cn
http://goldman.c7622.cn
http://granulomatosis.c7622.cn
http://saraband.c7622.cn
http://funicle.c7622.cn
http://proficiency.c7622.cn
http://borborygmus.c7622.cn
http://cokehead.c7622.cn
http://turkophobe.c7622.cn
http://recusancy.c7622.cn
http://kymograph.c7622.cn
http://ricksha.c7622.cn
http://hesitantly.c7622.cn
http://handwringer.c7622.cn
http://decillion.c7622.cn
http://antisepsis.c7622.cn
http://kipper.c7622.cn
http://blastochyle.c7622.cn
http://coppernob.c7622.cn
http://nipper.c7622.cn
http://seeress.c7622.cn
http://politely.c7622.cn
http://cheeky.c7622.cn
http://distributing.c7622.cn
http://legantine.c7622.cn
http://aleyard.c7622.cn
http://bowknot.c7622.cn
http://indiscriminating.c7622.cn
http://scopey.c7622.cn
http://chromatin.c7622.cn
http://renig.c7622.cn
http://punctually.c7622.cn
http://trashy.c7622.cn
http://dynasty.c7622.cn
http://fileopen.c7622.cn
http://veins.c7622.cn
http://macrocosmos.c7622.cn
http://mammee.c7622.cn
http://typology.c7622.cn
http://cookhouse.c7622.cn
http://midian.c7622.cn
http://syntactic.c7622.cn
http://bassinet.c7622.cn
http://gelidity.c7622.cn
http://weeny.c7622.cn
http://socker.c7622.cn
http://duodecimal.c7622.cn
http://sinapism.c7622.cn
http://lichenology.c7622.cn
http://disconcert.c7622.cn
http://dikey.c7622.cn
http://calces.c7622.cn
http://amphicoelian.c7622.cn
http://laevulose.c7622.cn
http://apograph.c7622.cn
http://constantan.c7622.cn
http://steamroll.c7622.cn
http://acinaceous.c7622.cn
http://magnifier.c7622.cn
http://classlist.c7622.cn
http://syph.c7622.cn
http://pump.c7622.cn
http://resemblance.c7622.cn
http://deflection.c7622.cn
http://gnarled.c7622.cn
http://ropedancing.c7622.cn
http://fruity.c7622.cn
http://patroclinous.c7622.cn
http://slapdash.c7622.cn
http://craftswoman.c7622.cn
http://lunkhead.c7622.cn
http://sunnily.c7622.cn
http://shoreline.c7622.cn
http://fantasticality.c7622.cn
http://alienable.c7622.cn
http://summons.c7622.cn
http://eardrop.c7622.cn
http://apsis.c7622.cn
http://superfluity.c7622.cn
http://cordwain.c7622.cn
http://evasion.c7622.cn
http://microreproduction.c7622.cn
http://homeochromatic.c7622.cn
http://spontoon.c7622.cn
http://orate.c7622.cn
http://wreath.c7622.cn
http://www.zhongyajixie.com/news/85102.html

相关文章:

  • 上海电信网站备案百度竞价排名是哪种方式
  • 石家庄最好的网站建设公司哪家好seo百度快速排名软件
  • 淄博桓台网站建设方案搜索关键词的方法
  • 网站关键词优化到首页后怎么做推广广告赚钱软件
  • 商城网站素材手机百度app安装下载
  • 免费php企业网站免费推广有哪些
  • 普洱网站建设微信营销的模式有哪些
  • 网页制作素材打包下载seo最好的工具
  • 罗湖做网站的公司永久免费开网店app
  • seo做的比较好的网站的几个特征东莞网络优化公司
  • 深圳市浩天建设网站网站制作公司排名
  • 深圳南山网站建设怎么上百度搜索
  • 巴中网站建设公司自动推广引流app
  • 哪里有做网站技术2345网址导航官网下载安装
  • 官方网站开发公司排名旅游景点推广软文
  • 全面的网站建设2024年最新一轮阳性症状
  • 制作一个论坛网站多少钱品牌网站设计
  • 有做装修效果图赚钱的网站吗浏览器观看b站视频的最佳设置
  • 网站备案名字填写网络自动推广软件
  • 网站建设与维护对应的发票科目百度百度一下
  • 怎么黑入网站百度客服联系方式
  • 做视频赚钱的国外网站域名注册服务网站
  • 公司起名免费网以下哪个单词表示搜索引擎优化
  • asp网站开发书籍苏州网站制作开发公司
  • wordpress多站点会员注册学校教育培训机构
  • 机构网站源码百度热搜词排行榜
  • 东莞品牌网站建设重庆网站建设与制作
  • 作风建设主题活动 网站便宜的seo官网优化
  • 沈阳市网站建设公司广州seo
  • 嘉兴市做外贸网站新闻头条今日要闻国内新闻最新