百度图片点击变网站是怎么做的怎么查看网站访问速度

web/2025/10/6 19:36:08/文章来源:
百度图片点击变网站是怎么做的,怎么查看网站访问速度,四川在线城市论坛,关键词自助优化原文#xff1a;https://www.liaoxuefeng.com/article/00151054582348974482c20f7d8431ead5bc32b30354705000在大型应用程序中#xff0c;配置主从数据库并使用读写分离是常见的设计模式。在Spring应用程序中#xff0c;要实现读写分离#xff0c;最好不要对现有代码进行改…原文https://www.liaoxuefeng.com/article/00151054582348974482c20f7d8431ead5bc32b30354705000在大型应用程序中配置主从数据库并使用读写分离是常见的设计模式。在Spring应用程序中要实现读写分离最好不要对现有代码进行改动而是在底层透明地支持。Spring内置了一个AbstractRoutingDataSource它可以把多个数据源配置成一个Map然后根据不同的key返回不同的数据源。因为AbstractRoutingDataSource也是一个DataSource接口因此应用程序可以先设置好key 访问数据库的代码就可以从AbstractRoutingDataSource拿到对应的一个真实的数据源从而访问指定的数据库。它的结构看起来像这样┌───────────────────────────┐│ controller ││ set routing-key xxx │└───────────────────────────┘│▼┌───────────────────────────┐│ logic code │└───────────────────────────┘│▼┌───────────────────────────┐│ routing datasource │└───────────────────────────┘│┌─────────┴─────────┐│ │▼ ▼┌─────────────┐ ┌─────────────┐│ read-write │ │ read-only ││ datasource │ │ datasource │└─────────────┘ └─────────────┘│ │▼ ▼┌─────────────┐ ┌─────────────┐│ │ │ ││ Master DB │ │ Slave DB ││ │ │ │└─────────────┘ └─────────────┘第一步配置多数据源首先我们在SpringBoot中配置两个数据源其中第二个数据源是ro-datasourcespring:datasource:jdbc-url: jdbc:mysql://localhost/testusername: rwpassword: rw_passworddriver-class-name: com.mysql.jdbc.Driverhikari:pool-name: HikariCPauto-commit: false...ro-datasource:jdbc-url: jdbc:mysql://localhost/testusername: ropassword: ro_passworddriver-class-name: com.mysql.jdbc.Driverhikari:pool-name: HikariCPauto-commit: false...在开发环境下没有必要配置主从数据库。只需要给数据库设置两个用户一个rw具有读写权限一个ro只有SELECT权限这样就模拟了生产环境下对主从数据库的读写分离。在SpringBoot的配置代码中我们初始化两个数据源SpringBootApplicationpublic class MySpringBootApplication {/*** Master data source.*/Bean(masterDataSource)ConfigurationProperties(prefix spring.datasource)DataSource masterDataSource() {logger.info(create master datasource...);return DataSourceBuilder.create().build();}/*** Slave (read only) data source.*/Bean(slaveDataSource)ConfigurationProperties(prefix spring.ro-datasource)DataSource slaveDataSource() {logger.info(create slave datasource...);return DataSourceBuilder.create().build();}...}第二步编写RoutingDataSource然后我们用Spring内置的RoutingDataSource把两个真实的数据源代理为一个动态数据源public class RoutingDataSource extends AbstractRoutingDataSource {Overrideprotected Object determineCurrentLookupKey() {return masterDataSource;}}对这个RoutingDataSource需要在SpringBoot中配置好并设置为主数据源SpringBootApplicationpublic class MySpringBootApplication {BeanPrimaryDataSource primaryDataSource(Autowired Qualifier(masterDataSource) DataSource masterDataSource,Autowired Qualifier(slaveDataSource) DataSource slaveDataSource) {logger.info(create routing datasource...);Map map new HashMap();map.put(masterDataSource, masterDataSource);map.put(slaveDataSource, slaveDataSource);RoutingDataSource routing new RoutingDataSource();routing.setTargetDataSources(map);routing.setDefaultTargetDataSource(masterDataSource);return routing;}...}现在RoutingDataSource配置好了但是路由的选择是写死的即永远返回masterDataSource现在问题来了如何存储动态选择的key以及在哪设置key在Servlet的线程模型中使用ThreadLocal存储key最合适因此我们编写一个RoutingDataSourceContext来设置并动态存储keypublic class RoutingDataSourceContext implements AutoCloseable {// holds data source key in thread local:static final ThreadLocal threadLocalDataSourceKey new ThreadLocal();public static String getDataSourceRoutingKey() {String key threadLocalDataSourceKey.get();return key null ? masterDataSource : key;}public RoutingDataSourceContext(String key) {threadLocalDataSourceKey.set(key);}public void close() {threadLocalDataSourceKey.remove();}}然后修改RoutingDataSource获取key的代码如下public class RoutingDataSource extends AbstractRoutingDataSource {protected Object determineCurrentLookupKey() {return RoutingDataSourceContext.getDataSourceRoutingKey();}}这样在某个地方例如一个Controller的方法内部就可以动态设置DataSource的KeyControllerpublic class MyController {Get(/)public String index() {String key slaveDataSource;try (RoutingDataSourceContext ctx new RoutingDataSourceContext(key)) {// TODO:return html... www.liaoxuefeng.com;}}}到此为止我们已经成功实现了数据库的动态路由访问。这个方法是可行的但是需要读从数据库的地方就需要加上一大段try (RoutingDataSourceContext ctx ...) {}代码使用起来十分不便。有没有方法可以简化呢有我们仔细想想Spring提供的声明式事务管理就只需要一个Transactional()注解放在某个Java方法上这个方法就自动具有了事务。我们也可以编写一个类似的RoutingWith(slaveDataSource)注解放到某个Controller的方法上这个方法内部就自动选择了对应的数据源。代码看起来应该像这样Controllerpublic class MyController {Get(/)RoutingWith(slaveDataSource)public String index() {return html... www.liaoxuefeng.com;}}这样完全不修改应用程序的逻辑只在必要的地方加上注解自动实现动态数据源切换这个方法是最简单的。想要在应用程序中少写代码我们就得多做一点底层工作必须使用类似Spring实现声明式事务的机制即用AOP实现动态数据源切换。实现这个功能也非常简单编写一个RoutingAspect利用AspectJ实现一个Around拦截AspectComponentpublic class RoutingAspect {Around(annotation(routingWith))public Object routingWithDataSource(ProceedingJoinPoint joinPoint, RoutingWith routingWith) throws Throwable {String key routingWith.value();try (RoutingDataSourceContext ctx new RoutingDataSourceContext(key)) {return joinPoint.proceed();}}}注意方法的第二个参数RoutingWith是Spring传入的注解实例我们根据注解的value()获取配置的key。编译前需要添加一个Maven依赖org.springframework.bootspring-boot-starter-aop到此为止我们就实现了用注解动态选择数据源的功能。最后一步重构是用字符串常量替换散落在各处的masterDataSource和slaveDataSource。使用限制受Servlet线程模型的局限动态数据源不能在一个请求内设定后再修改也就是RoutingWith不能嵌套。此外RoutingWith和Transactional混用时要设定AOP的优先级。本文代码需要SpringBoot支持JDK 1.8编译并打开-parameters编译参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建设网站需要哪些域名太原app开发公司

起步 在python中文件监控主要有两个库,一个是pyinotify,一个是watchdog。pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装。因为我主要用于Windows平台,所以下面着重介绍watchdog(推荐大家阅…

进行网站建设视频教程营销型 展示类网站模板

国内下载docker镜像大部分都比较慢,下面给大家介绍2个镜像源。 一、阿里云的docker镜像源 注册一个阿里云用户,访问 https://cr.console.aliyun.com/#/accelerator 获取专属Docker加速器地址 使用的时候修改/etc/docker/daemon.json文件就可以了,修改保…

电子商务网站名称和网址网站稳定性不好的原因

本篇文章主要为大家讲述的是关于HTML frame标签的用法,还有关于frame标签中的属性介绍。还有关于frame标签的使用实例,下面就让我们一起来看看这篇文章吧首先我们先看看HTML frame标签的用法:标签定义 frameset 中的一个特定的窗口(框架)。fr…

漳州微信网站开发网站建设wesnowsat

耦合: 有一对热恋中的男女,水深火热的,谁离开谁都不行了,离开就得死,要是对方有一点风吹草动,这一方就得地动山摇。可以按照琼瑶阿姨的路子继续想象,想成什么样都不过分,他们之间的…

石家庄网站推广排名网站管理系统开发的

在森林消防领域,水泵是一个至关重要的设备。它的主要功能是将水源输送到火灾现场,为消防人员提供足够的水源进行灭火。然而,传统的水泵往往面临着距离限制的问题,这对于远距离输水来说是一个巨大的挑战。幸运的是,高扬…

网站营销 优势百度上的网站怎么做

一、题目 描述 给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的漂亮度是其所有字母漂亮度的总和 每个字母都有一个漂亮度,范围在1到26之间。没有任何两个不同字母拥有相同的漂亮度。字母忽略大小写。 给出多个字符串&#xff…

网站设计的工作要求360crm客户管理系统

问题预览/关键词 梯度下降不正常工作的曲线是什么样子?如何调试学习率来检测代码中的bug?学习率过小的后果是?如何选择学习率? 笔记 1.曲线错误的样子 曲线没有逐步递减,由于学习率选择过大或代码有bug。 2.调试…

资阳网站设计陕西省咸阳市建设银行网站

介绍 进程间通信的方式 1.Linux原生支持的管道----匿名和命名管道 2.System V-----共享内存、消息队列、信号量 3.Posix------多线程、网路通信 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。…

网站建设冷色调dw手机版下载安装

在php5.4版本之后有很多的函数与功能进行丢弃与升级功能了,现在国内很多CMS都还未按php5.4标准来做了,下面我整理了一些在ecshop在PHP 5.4以上版本各种错误问题处理. 1、PHP 5.4.X环境下安装ECShop出现“includes/cls_template.php on line 406…

app免费制作网站模板上海建站推广公司

目录 官方文档 简述 Aggregate的原型方法 aggregate进行操作 官方文档 Mongoose v8.0.3: Aggregate 简述 在 Mongoose 中,Aggregate 是用于执行 MongoDB 聚合操作的类。MongoDB 聚合操作是一种强大的数据处理工具,可以用于对集合中的文档进行变换和…

攀枝花市建设银行网站在线制作图片及图片处理工具免费

2 可见性 2.1 什么是可见性 可见性问题是基于CPU位置出现的,CPU处理速度非常快,相对CPU来说,去主内存获取数据这个事情太慢了,CPU就提供了 L1,L2,L3的三级缓存,每次去主内存拿完数据后&#x…

网站怎么制作成软件做网站基础源代码

1、QT通信机制为了更好的实现QT的信息交互,在QT系统中创建了较为完善的通信机制。QT的通信可分为QT内部通信和外部通信两大类。对于这两类通信机制及应用场合做如以下分析:(1)QT内部对象间通信在图形用户界面编程中,经常需要将一个窗口部件的…

淘宝客网站一定要备案视觉设计网站

Xsens动作捕捉技术助力于中国戏曲演员运动分析 搜维尔科技:Movella Xsens动作捕捉技术助力于中国戏曲演员运动分析

十大免费建站app怎样做网站初中生

目录 一,项目介绍 1.1 关于高并发内存池 1.2 关于池化技术 1.3 关于malloc 二,定长内存池实现 2.1 实现详情 ​2.2 完整代码 三,高并发内存池整体设计 四,threadcache设计 4.1 整体设计 4.2 哈希桶映射对齐规则 4.3 …

微信运营网站建设销售网站开发的背景

#做题方法# 进去之后做了简单的注入发现有错误回显,就进行注入发现过滤了sql语 后面进行了双写and payload: ?usernameadmin%27%20aandnd%20updatexml(1,concat(0x7e,dAtabase(),0x7e,version()),1)%20--&passwordadmi 接下来又 ?usernameadm…

和17做网店类似的货源网站外包公司催收合法吗

IDEA 中,"Scratches and Consoles" 是一个用于临时代码编辑和交互式开发的工具窗口,作用如下:Scratches(草稿):Scratches 是一个用于临时编写和运行代码片段的工具,你可以在其中创建临…

网站后台中表格制作网络广告的形式

卧龙吟有所有特性是没有详细说明或者说容易被大家忽视的,这些都是需要我们去挖掘的,对此,特意奉上辟邪剑谱一本。一,四季系统卧龙吟的时间轴系统中不仅仅是XX年开始可以国战,XX年开始海盗入侵,还有喜闻乐见…

网站有利于seo的细节dw网站导航怎么做

编者按:巨灾项目,作为国家公共安全体系的重要组成部分,对于提升我国防灾减灾能力具有举足轻重的意义。其中,地震预警作为巨灾项目的重要一环,其技术的创新与应用直接关系到人民群众的生命财产安全。云轴科技ZStack在国…

呼家楼做网站的公司哪家好2017网站开发发展前景

实例对象和构造函数的关系及原型: 实例对象是通过构造函数创建出来的,实例对象的构造器constructor就是指向构造函数的;每个实例对象中的同一方法的指向是各不相同的,但是其属性值相同的属性可以相同,这样会造成内存浪…

做网站建设的公司有哪些网页设计免费模板参考网页

文章目录 四大核心复习一、获取模块内的state数据1.目标:2.使用模块中的数据3.代码示例 二、获取模块内的getters数据1.目标:2.语法:3.代码演示 三、获取模块内的mutations方法1.目标:2.注意:3.调用方式:4.…