淘宝上的网站怎么做免费网站建设作业总结

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

淘宝上的网站怎么做,免费网站建设作业总结,互联网技术,成都购物网站建设一.需求背景 项目需要实现在多个数据源之间读写数据#xff0c;例如在 A 数据源和 B 数据源读取数据#xff0c;然后在 C 数据源写入数据 或者 部分业务数据从 A 数据源中读取、部分从B数据源中读取诸如此类需求。本文将简单模拟在SpringBoot项目中实现不同数据源之间读取数…一.需求背景 项目需要实现在多个数据源之间读写数据例如在 A 数据源和 B 数据源读取数据然后在 C 数据源写入数据 或者 部分业务数据从 A 数据源中读取、部分从B数据源中读取诸如此类需求。本文将简单模拟在SpringBoot项目中实现不同数据源之间读取数据。 二.技术概述 dynamic-datasource 是一个开源的 SpringBoot 多数据源启动器提供了丰富的功能使用者只需完成基本的数据源配置配合使用DS注解即可轻松实现多数据源之间的切换。其支持 Jdk 1.7, SpringBoot 1.5.x 2.x.x 3.x.x。JPA用户不建议使用JPA自带事务无法连续切库。 以下特性和约定摘录自官方文档dynamic-datasource 特性 支持 数据源分组 适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 加密(可自定义) ENC()。 支持每个数据库独立初始化表结构schema和数据库database。 支持无数据源启动支持懒加载数据源需要的时候再创建连接。 支持 自定义注解 需继承DS(3.2.0)。 提供并简化对DruidHikariCpBeeCp,Dbcp2的快速集成。 提供对Mybatis-PlusQuartzShardingJdbcP6syJndi等组件的集成方案。 提供 自定义数据源来源 方案如全从数据库加载。 提供项目启动后 动态增加移除数据源 方案。 提供Mybatis环境下的 纯读写分离 方案。 提供使用 spel动态参数 解析数据源方案。内置spelsessionheader支持自定义。 支持 多层数据源嵌套切换 。ServiceA ServiceB ServiceC 提供 基于seata的分布式事务方案 。 提供 本地多数据源事务方案。 约定 本框架只做 切换数据源 这件核心的事情并不限制你的具体操作切换了数据源可以做任何CRUD。配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称相同组名称的数据源会放在一个组下。切换数据源可以是组名也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。、默认的数据源名称为 master 你可以通过 spring.datasource.dynamic.primary 修改。代码块里主动切换 方法上的注解优 类上注解就近原则DS支持继承抽象类上的DS支持继承接口上的DS。
注官网文档只有基础篇可免费查阅其他内容查阅需付费29.9因此如果基础篇所讲解功能无法满足需求业务场景比较复杂且不愿付费请勿使用本框架 三.编码实现 业务说明从A数据源查询出学生数据同时从B数据源查询出教师数据。 技术选型SpringBoot 2.7.6 MyBatis-Plus 3.5.4 MySQL 8.0 1引入Maven坐标 dependencygroupIdcom.baomidou/groupIdartifactIddynamic-datasource-spring-boot-starter/artifactIdversion3.5.2/version /dependency2创建模拟数据库表

A 数据源

create DATABASE testA; use testA; CREATE TABLE student( id int, username VARCHAR(12) );# B 数据源 create DATABASE testB; use testB; CREATE TABLE teacher( id int, username VARCHAR(12) );3在yml文件中配置数据源 spring:datasource:dynamic:primary: testA #设置默认的数据源或者数据源组,默认值即为masterstrict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源datasource:testA:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testAusername: rootpassword: roottestB:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testBusername: rootpassword: root4可以用MyBatis-X插件快速生成项目骨架。 5使用DS注解在mapper文件中指定数据源。注意数据源名称需要与yml配置中的一致。 // 指定学生表的数据源为testA DS(testA) public interface StudentMapper extends BaseMapperStudent { }// 指定教师表的数据源为testB DS(testB) public interface TeacherMapper extends BaseMapperTeacher { }5创建测试类进行测试 SpringBootTest public class MultipleDataSourceTest {Resourceprivate StudentService studentService;Resourceprivate TeacherService teacherService;Testvoid testSelect() {System.out.println( 学生表数据 );for (Student student : studentService.list()) {System.out.println( student);}System.out.println( 教师表数据 );for (Teacher teacher : teacherService.list()) {System.out.println( teacher);}} }6相关执行日志查看可以通过日志看到已经成功加载两个数据源并且指定默认数据源为[testA]同时我们所查询的数据也能正常出来。 INFO 312 — [main] com.zaxxer.hikari.HikariDataSource: testA - Starting… INFO 312 — [main] com.zaxxer.hikari.HikariDataSource: testA - Start completed. INFO 312 — [main] com.zaxxer.hikari.HikariDataSource: testB - Starting… INFO 312 — [main] com.zaxxer.hikari.HikariDataSource: testB - Start completed. INFO 312 — [main] c.b.d.d.DynamicRoutingDataSource: dynamic-datasource - add a datasource named [testB] success INFO 312 — [main] c.b.d.d.DynamicRoutingDataSource: dynamic-datasource - add a datasource named [testA] success INFO 312 — [main] c.b.d.d.DynamicRoutingDataSource: dynamic-datasource initial loaded [2] datasource,primary datasource named [testA]学生表数据 Student(id1, username学生1)Student(id2, username学生2)Student(id3, username学生3)Student(id4, username学生4)Student(id5, username学生5)教师表数据 Teacher(id1, username教师1)Teacher(id2, username教师2)Teacher(id3, username教师3)Teacher(id4, username教师4)Teacher(id5, username教师5) INFO 312 — [ionShutdownHook] c.b.d.d.DynamicRoutingDataSource: dynamic-datasource start closing …. INFO 312 — [ionShutdownHook] com.zaxxer.hikari.HikariDataSource: testB - Shutdown initiated… INFO 312 — [ionShutdownHook] com.zaxxer.hikari.HikariDataSource: testB - Shutdown completed. INFO 312 — [ionShutdownHook] com.zaxxer.hikari.HikariDataSource: testA - Shutdown initiated… INFO 312 — [ionShutdownHook] com.zaxxer.hikari.HikariDataSource: testA - Shutdown completed. INFO 312 — [ionShutdownHook] c.b.d.d.DynamicRoutingDataSource: dynamic-datasource all closed success,bye四.补充说明 以上示例可以完成基本的多数据源切换需求对于一些复杂场景由于官方文档付费请根据需要使用。例如 在需要切换数据源的代码最外层加上了事务注解Transactional将会导致数据源切换失效上述代码加上注解运行将报错由于无法切换数据源将使用默认数据源如果默认数据源中没有对应的表将报错在网上检索发现通过添加官方提供的DSTransactional即可实现事务下数据源切换 TestTransactionalvoid testSelect() {System.out.println( 学生表数据 );for (Student student : studentService.list()) {System.out.println( student);}System.out.println( 教师表数据 );for (Teacher teacher : teacherService.list()) {System.out.println( teacher);}}在多线程情况下如果使用编码方式实现数据源切换也将导致问题需要进行一些其他处理。
最后补充说明想表达的由于官网文档是付费的不付费的话许多问题只能搜索寻找解决方法比较麻烦因此请根据自身业务情况选择使用本框架或其他框架。