版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ling_76539446/article/details/103276807

目录

  • 前言
  • 环境部署
  • 开始项目
  • 注意
  • 參考:

前言

入职新公司到现在也有一个月了,完成了手头的工作,前几天终于有时间研究下公司旧项目的代码。在研究代码的过程中,发现项目里用到了Spring Aop来实现数据库的读写分离,本着自己爱学习(我自己都不信...)的性格,决定写个实例工程来实现spring aop读写分离的效果。

环境部署

数据库:MySql

库数量:2个,一主一从

关于mysql的主从环境部署之前已经写过文章介绍过了,这里就不再赘述,参考《windows版的mysql主从复制环境搭建》

开始项目

首先,毫无疑问,先开始搭建一个SpringBoot工程,然后在pom文件中引入如下依赖:

<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- 动态数据源 所需依赖 ### start--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><scope>provided</scope></dependency><!-- 动态数据源 所需依赖 ### end--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.4</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency></dependencies>

目录结构

引入基本的依赖后,整理一下目录结构,完成后的项目骨架大致如下:
www.wityx.com

建表

创建一张表user,在主库执行sql语句同时在从库生成对应的表数据

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`user_id` bigint(20) NOT NULL COMMENT '用户id',`user_name` varchar(255) DEFAULT '' COMMENT '用户名称',`user_phone` varchar(50) DEFAULT '' COMMENT '用户手机',`address` varchar(255) DEFAULT '' COMMENT '住址',`weight` int(3) NOT NULL DEFAULT '1' COMMENT '权重,大者优先',`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `user` VALUES ('1196978513958141952', '测试1', '18826334748', '广州市海珠区', '1', '2019-11-20 10:28:51', '2019-11-22 14:28:26');
INSERT INTO `user` VALUES ('1196978513958141953', '测试2', '18826274230', '广州市天河区', '2', '2019-11-20 10:29:37', '2019-11-22 14:28:14');
INSERT INTO `user` VALUES ('1196978513958141954', '测试3', '18826273900', '广州市天河区', '1', '2019-11-20 10:30:19', '2019-11-22 14:28:30');

主从数据源配置

application.yml,主要信息是主从库的数据源配置

server:port: 8001
spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Drivermaster:url: jdbc:mysql://127.0.0.1:3307/user?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=trueusername: rootpassword:slave:url: jdbc:mysql://127.0.0.1:3308/user?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=trueusername: rootpassword:

因为有一主一从两个数据源,我们用枚举类来代替,方便我们使用时能对应

@Getter
public enum DynamicDataSourceEnum {MASTER("master"),SLAVE("slave");private String dataSourceName;DynamicDataSourceEnum(String dataSourceName) {this.dataSourceName = dataSourceName;}
}

数据源配置信息类 DataSourceConfig,这里配置了两个数据源,masterDb和slaveDb

@Configuration
@MapperScan(basePackages = "com.xjt.proxy.mapper", sqlSessionTemplateRef = "sqlTemplate")
public class DataSourceConfig {// 主库@Bean@ConfigurationProperties(prefix = "spring.datasource.master")public DataSource masterDb() {return DruidDataSourceBuilder.create().build();}/*** 从库*/@Bean@ConditionalOnProperty(prefix = "spring.datasource", name = "slave", matchIfMissing = true)@ConfigurationProperties(prefix = "spring.datasource.slave")public DataSource slaveDb() {return DruidDataSourceBuilder.create().build();}/*** 主从动态配置*/@Beanpublic DynamicDataSource dynamicDb(@Qualifier("masterDb") DataSource masterDataSource,@Autowired(required = false) @Qualifier("slaveDb") DataSource slaveDataSource) {DynamicDataSource dynamicDataSource = new DynamicDataSource();Map<Object, Object> targetDataSources = new HashMap<>();targetDataSources.put(DynamicDataSourceEnum.MASTER.getDataSourceName(), masterDataSource);if (slaveDataSource != null) {targetDataSources.put(DynamicDataSourceEnum.SLAVE.getDataSourceName(), slaveDataSource);}dynamicDataSource.setTargetDataSources(targetDataSources);dynamicDataSource.setDefaultTargetDataSource(masterDataSource);return dynamicDataSource;}@Beanpublic SqlSessionFactory sessionFactory(@Qualifier("dynamicDb") DataSource dynamicDataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*Mapper.xml"));bean.setDataSource(dynamicDataSource);return bean.getObject();}@Beanpublic SqlSessionTemplate sqlTemplate(@Qualifier("sessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}@Bean(name = "dataSourceTx")public DataSourceTransactionManager dataSourceTx(@Qualifier("dynamicDb") DataSource dynamicDataSource) {DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();dataSourceTransactionManager.setDataSource(dynamicDataSource);return dataSourceTransactionManager;}
}

设置路由

设置路由的目的为了方便查找对应的数据源,我们可以用ThreadLocal保存数据源的信息到每个线程中,方便我们需要时获取

public class DataSourceContextHolder {private static final ThreadLocal<String> DYNAMIC_DATASOURCE_CONTEXT = new ThreadLocal<>();public static void set(String datasourceType) {DYNAMIC_DATASOURCE_CONTEXT.set(datasourceType);}public static String get() {return DYNAMIC_DATASOURCE_CONTEXT.get();}public static void clear() {DYNAMIC_DATASOURCE_CONTEXT.remove();}
}

获取路由

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder.get();}
}

AbstractRoutingDataSource的作用是基于查找key路由到对应的数据源,它内部维护了一组目标数据源,并且做了路由key与目标数据源之间的映射,提供基于key查找数据源的方法。

数据源的注解

为了可以方便切换数据源,我们可以写一个注解,注解中包含数据源对应的枚举值,默认是主库,

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface DataSourceSelector {DynamicDataSourceEnum value() default DynamicDataSourceEnum.MASTER;boolean clear() default true;
}

aop切换数据源

到这里,aop终于可以现身出场了,这里我们定义一个aop类,对有注解的方法做切换数据源的操作,具体代码如下:

@Slf4j
@Aspect
@Order(value = 1)
@Component
public class DataSourceContextAop {@Around("@annotation(com.xjt.proxy.dynamicdatasource.DataSourceSelector)")public Object setDynamicDataSource(ProceedingJoinPoint pjp) throws Throwable {boolean clear = true;try {Method method = this.getMethod(pjp);DataSourceSelector dataSourceImport = method.getAnnotation(DataSourceSelector.class);clear = dataSourceImport.clear();DataSourceContextHolder.set(dataSourceImport.value().getDataSourceName());log.info("========数据源切换至:{}", dataSourceImport.value().getDataSourceName());return pjp.proceed();} finally {if (clear) {DataSourceContextHolder.clear();}}}private Method getMethod(JoinPoint pjp) {MethodSignature signature = (MethodSignature)pjp.getSignature();return signature.getMethod();}}

到这一步,我们的准备配置工作就完成了,下面开始测试效果。

先写好Service文件,包含读取和更新两个方法,

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;@DataSourceSelector(value = DynamicDataSourceEnum.SLAVE)public List<User> listUser() {List<User> users = userMapper.selectAll();return users;}@DataSourceSelector(value = DynamicDataSourceEnum.MASTER)public int update() {User user = new User();user.setUserId(Long.parseLong("1196978513958141952"));user.setUserName("修改后的名字2");return userMapper.updateByPrimaryKeySelective(user);}@DataSourceSelector(value = DynamicDataSourceEnum.SLAVE)public User find() {User user = new User();user.setUserId(Long.parseLong("1196978513958141952"));return userMapper.selectByPrimaryKey(user);}
}

根据方法上的注解可以看出,读的方法走从库,更新的方法走主库,更新的对象是userId为1196978513958141953 的数据,

然后我们写个测试类测试下是否能达到效果,

@RunWith(SpringRunner.class)
@SpringBootTest
class UserServiceTest {@AutowiredUserService userService;@Testvoid listUser() {List<User> users = userService.listUser();for (User user : users) {System.out.println(user.getUserId());System.out.println(user.getUserName());System.out.println(user.getUserPhone());}}@Testvoid update() {userService.update();User user = userService.find();System.out.println(user.getUserName());}
}

测试结果:

1、读取方法
www.wityx.com
2、更新方法
www.wityx.com
执行之后,比对数据库就可以发现主从库都修改了数据,说明我们的读写分离是成功的。当然,更新方法可以指向从库,这样一来就只会修改到从库的数据,而不会涉及到主库。

注意

上面测试的例子虽然比较简单,但也符合常规的读写分离配置。值得说明的是,读写分离的作用是为了缓解写库,也就是主库的压力,但一定要基于数据一致性的原则,就是保证主从库之间的数据一定要一致。如果一个方法涉及到写的逻辑,那么该方法里所有的数据库操作都要走主库

假设写的操作执行完后数据有可能还没同步到从库,然后读的操作也开始执行了,如果这个读取的程序走的依然是从库的话,那么就会出现数据不一致的现象了,这是我们不允许的。

最后发一下项目的github地址,有兴趣的同学可以看下,记得给个star哦

地址:https://github.com/Taoxj/mysql-proxy

參考:

https://www.cnblogs.com/cjsblog/p/9712457.html

相关文章

  1. 瞭望|工业软件之忧

    点击蓝字 △ 关注我们◆ 在近年来几次“卡脖子”事件中,工业软件和芯片是同时击中中国制造的“软”“硬”两把利剑◆ 工业软件是工业制造的大脑和神经,却成为“改革开放以后,唯一一个与国外同行不断拉大差距的工业技术领域。”◆ 市场长期被欧美软件巨头严重垄断,国产工业软…...

    2022/12/3 10:21:46
  2. 别再瞎猜了!“携号转网”后谁是赢家?看完这篇便知晓...

    “携号转网”在一年前,似乎对于大多数国人来说,还是个新名词。虽然,早几年前,就已经在多个省份推行了“携号转网”试点。第一批试点启动于2010年11月,选的是天津和海南;随后2014年9月,在江西、湖北、云南开展第二批携号转网试点。截止到2019年9月底,五个省市连原来试验…...

    2022/12/3 9:53:27
  3. 剑指offer第14题:链表中倒数第k个结点

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_44643195/article/details/103274826题目描述 输入一个链表,输出该链表中倒数第k个结点。 /* public class ListNo…...

    2022/12/3 9:45:20
  4. 中标麒麟系统换yum

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/yonggandess/article/details/103257347https://blog.csdn.net/xupengxl/article/details/89946287...

    2022/12/3 5:16:58
  5. JavaScript 18位身份证验证及身份证号码规则

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/l23456789o/article/details/103258869JavaScript 18位身份证验证及身份证号码规则...

    2022/12/3 5:16:56
  6. ArrayList,LinkedList

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/dl674756321/article/details/1032565991. ArrayList基于数组实现,允许空值和重复元素。 当添加元素数量大于数组容量时,…...

    2022/12/3 5:16:44
  7. Android-Universal-Image-Loader源码分析

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/stven_king/article/details/103256724前言 ImageLoader 是 android 使用中出现比较早(PS:即的刚接触安卓项目的时候就用…...

    2022/12/3 5:16:44
  8. Netty-粘包,半包和使用Json方式传输数据

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq1010234991/article/details/103257013文章目录JSON和ProtoBuf序列化背景详解粘包和拆包粘包和半包半包问题的实践案例运…...

    2022/12/3 5:16:40
  9. H.264流媒体协议格式中的Annex B格式和AVCC格式深度解析

    原文链接:https://blog.csdn.net/Romantic_Energy/article/details/50508332版权声明:本文为CSDN博主「Chucky_Hu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Romantic_Energy/article/details/50508332本…...

    2022/12/3 5:16:39
  10. git&github操作流程

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XiaoJiang0505/article/details/103256982Administrator@XPWY-41-WJW MINGW64 ~/Desktop $ pwd /c/Users/Administrator/Deskt…...

    2022/12/3 5:16:39
  11. python_数据筛选查询

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/wj1298250240/article/details/103257043python_数据筛选查询 #显示使用了优惠券消费的商品,正样本 t2 = merchant3[(merc…...

    2022/12/3 5:16:34
  12. 国标GB/T28181协议下EasyGBS互联网无插件视频播放器起播慢或延迟高问题解决方案

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/EasyGBS/article/details/100983126引言28181协议全称为GB/T28181《安全防范视频监控联网系统信息传输、交换、控制技术要求…...

    2022/12/3 5:16:33
  13. windows7上使用docker容器

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/heima201907/article/details/1032571481.安装下载DockerToolbox,并安装。 下载地址:https://dn-dao-github-irror.daoc…...

    2022/12/3 5:16:29
  14. angluarjs后台模板

    我们为您提供关于angluarjs后台模板的精彩内容,我们为您分享本站的原创内容,我们还提供关于angluarjs后台模板的经验内容。...

    2022/12/3 5:16:24
  15. (C语言)求1-n的阶乘之和

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/hua12ng/article/details/103256838求1-n的阶乘之和 题目:输入正整数n(1-10),求1-n的阶乘之和,最后必须输出回车。遇到…...

    2022/12/3 5:16:18
  16. redis desktop manager安装以及使用教程

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/luanzongke5704/article/details/1032569791.下载redis desktop manager 版本0.9.99 官网下载: https://redisdesktop.com…...

    2022/12/3 5:16:05
  17. 夜光带你走进C# 游戏开发等(八十五)擅长的领域

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_41987706/article/details/103194489夜光序言:不要问, 雨, 为何如此凄凉? 那天,诗人独自忧伤,没有日落的帷幕…...

    2022/12/3 5:15:50
  18. zookeeper 的安装 和 启动

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/heima201907/article/details/1032573491.下载下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/2、…...

    2022/12/3 5:15:46
  19. Word 去除页眉横线

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/gggttt222/article/details/103260245写毕业论文,尤其是中文毕业论文,对格式要求一般比较严格。需要页眉页脚,需要偶数页…...

    2022/12/3 2:51:47
  20. 大型科技团队的管理

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_44627014/article/details/103257461介绍了高效科技组织的特点及管理经验,指出科技团队的定位和使命在于支持业务、…...

    2022/12/3 2:51:23

最新文章

  1. 读写分离很难吗?springboot结合aop简单就实现了

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/ling_76539446/article/details/103276807目录 前言 环境部署 开始项目 注意 參考: 前言 入职新公司到现在也有一个月了,…...

    2022/12/3 10:30:46
  2. C# - [窗体] SerialPort串口属性配置

    ▶ 串口属性:▶ 串口数据接收事件绑定:▶ 实现:using System; using System.Windows.Forms; using System.IO.Ports; using System.Threading;namespace SerialPort_Exp {public partial class Form1 : Form{SerialPort sp = new SerialPort();public Form1(){InitializeCom…...

    2022/12/3 10:30:28
  3. [Excel VBA]如何拷贝数组?

    本文翻译至:http://itpro.nikkeibp.co.jp/atcl/column/15/090100207/090100143/?ST=system Variant型变量 = 数组 数组是可以保存多个值的 “一种变量”。变量是独幢楼房的话,数组就是联排别墅。VBA中在数组名后面加上括号,里面指定数组元素的编号。要注意编号是从0开始。 …...

    2022/12/3 10:30:18
  4. Oracle数据库学习总结--spool

    Oracle数据库学习总结spool在生产中常会遇到需要将数量比较大的表值导入到本地文本文件中. 方法有很多种,比较常用的就是spool命令: 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式。比如有如下表 SQL>; select id,username,password from myuser;//测…...

    2022/12/3 10:30:16
  5. 十进制转化成十六进制

    问题描述十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进…...

    2022/12/3 10:29:59
  6. vue echarts 地图

    本文以echarts官方文档的例子来介绍vue中使用echarts地图 echarts官方文档 https://www.echartsjs.com/zh/index.html1.安装echarts插件 运行命令安装插件 npm install echarts --save2.新建vue文件,引入echars组件及城市地图 import echarts from echarts import BJ from ech…...

    2022/12/3 10:29:53
  7. 安装PyCharm2019.2.4后不能启动,弹出"Failed to load JVM DLL"

    JDK均已安装,JAVA_HOME已配置,仍出现以上问题,最终 以管理员身份运行程序!!一切OK!...

    2022/12/3 10:29:48
  8. linux下编译make文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录”

    编译时发生这个错误 root@linux:/mnt/hgfs/my_code/his3520d_v2-8-0-2/Build/mkconfig/GUI_BLUE# ./NVR_35X_BLUE_200W.sh -bash: ./NVR_35X_BLUE_200W.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录 百度了一下:在win下编辑的时候,换行结尾是\n\r , 而在linux下 是\n,…...

    2022/12/3 10:29:47
  9. ASM集成开发环境选择

    MASMPlus 编译16Bit DOS 设置:MASMPlus 1.2 可定制性很高,可以进行很多个性化的设置。提供了方便的设置来编译Dos程序:配置—系统配置—编译/脚本,勾选“单独文件默认实用DOS模式(第二链接器)”,之后就可以编译.asm的Dos代码了。 MASMPlus调试:找到Windows自带的Debug.…...

    2022/12/3 10:29:46
  10. CMS系统SEO搜索优化?SEO是什么?

    CMS系统SEO搜索优化?SEO是什么? 我想针对这个问题可以更宽泛的谈一下CMS系统(content management system,内容管理系统)和SEO的关系。也许你正准备建立站点,开始网站运营,选择一个适合自身需求的CMS内容发布系统自然是必不可少的。从开发角度来说,网上常用的ASP开发的CMS…...

    2022/12/3 10:29:41
  11. 活着,就是生活;生活,就是意义

    原标题:活着,就是生活;生活,就是意义老舍说过:“新梦是旧事的拆洗缝补。” 也许,人生,有时就像一场梦。 其实关于人生这个话题,实在不是在我这个年纪可以议论的事情。因为在这个年纪,涉世太浅,经历太少,思考还不成熟。但我仍想在此方寸之地,发表一下自己的人生感…...

    2022/12/3 10:29:37
  12. 简洁明了clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop

    每个HTML元素都具有clientHeight offsetHeight scrollHeight offsetTop scrollTop 这5个和元素高度、滚动、位置相关的属性,单凭单词很难搞清楚分别代表什么意思之间有什么区别。通过阅读它们的文档总结出规律如下: clientHeight和offsetHeight属性和元素的滚动、位置没有关系…...

    2022/12/3 10:29:34
  13. 连美国人都说淘宝山寨货太多,马云该怎么办?

    原标题:连美国人都说淘宝山寨货太多,马云该怎么办?大家都知道,淘宝创立之初,马云就为淘宝制定了一个口号,那就是“让天下没有难做的生意”,如今淘宝已经发展了十多个年头,确实也兑现了当初的诺言,帮助中小企业搭建起了网上销售的平台,让消费者能够更便捷的购买商品,省…...

    2022/12/3 10:29:28
  14. 启动intellij时报错Failed to load JVM DLL..jre\bin\jvm.dll,If you already have 32-bit JDK installed

    文章目录一、问题二、出错原因三、查看java位数四、安装java64位五、查看新的java位数六、启动intellij 一、问题 启动intellij时报错: 这个错误是说,intellij需要加载jdk中的jvm.dll文件,但你的电脑装的是32位的java。也就是说你的java需要装64位的。 二、出错原因 java官网…...

    2022/12/3 10:29:27
  15. 苹果手机什么软件可以虚拟定位软件

    if(document.form1.csrq.value==""){ alert("请填写出生日期!"); document.form1.csrq.focus(); return false; } if(document.form1.csrq.value==""){ alert("请填写出生日期!"); document.form1.csrq.focus(); return false; }else{…...

    2022/12/3 10:28:35
  16. 引用了lombok.Data包,但是不起效,这是为什么?

    我明明是引用了lombok.Data,但是为什么还是不起效,没有getter和setter方法原因在于我的intell Idea没有安装lombok的插件,安装步骤:ctrl + alt + S 打开设置界面,可以看到,我的IDE中是没有安装该插件的,因为没有搜索到,点击Search in repositories 输入lombok,选择如下…...

    2022/12/3 10:28:33
  17. C和指针(学习笔记)_第8章 数组

    1.一维数组1)数组名:在C中,在几乎所有使用数组名的表达式中,数组名的值是一个指针常量,也就是数组第1个元素的地址。它的类型取决于数组元素的类型:如果它们是int类型,那么数组名的类型就是“指向int的常量指针”;如果它们是其它类型,那么数组的类型就是“指向其它类型…...

    2022/12/3 10:28:29
  18. A Gift from Knowledge Distillation: Fast Optimization,Network Minimization and Transfer Learning论文初读

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/m0_37665984/article/details/103288582目录摘要引言相关工作知识迁移快速优化迁移学习方法提出观点数学表达式FSP Matrix的…...

    2022/12/3 10:28:09
  19. 科比退役两周年,一句“Mamba out!”,可还有人记得?

    原标题:科比退役两周年,一句“Mamba out!”,可还有人记得?今天科比退役已经过去2个年头了,不知道球迷习惯了没有科比的日子没有。在全联盟都在猜测MVP是哈登还是詹姆斯的时候,科密不禁回想起自己的老大已不在联盟很久了。在这之际,我们来回顾一下科比职业生涯让人难忘的…...

    2022/12/3 10:28:04
  20. 一杯咖啡如何玩转时装周?“大咖”肯德基给你答案

    原标题:一杯咖啡如何玩转时装周?“大咖”肯德基给你答案一杯咖啡如何玩转时装周?“大咖”肯德基给你答案 向来主张“尽情自在”、 时尚生活的肯德基和2017秋冬上海时装周中四位年轻新锐的设计师大胆玩跨界合作,四场精彩的大秀接连上演。在KFCRICO LEE的大秀中,肯德基品牌…...

    2022/12/3 10:27:57
  21. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  22. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  23. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  24. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  25. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  26. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  27. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  29. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  30. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  31. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  32. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  33. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  34. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  35. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  36. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  37. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  38. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  39. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  40. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57