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

荥阳网站建设公司做网站建设电话销售

荥阳网站建设公司,做网站建设电话销售,开源crm客户管理系统,调用wordpress分类名称在执行程序时: 通常为了提供性能,处理器和编译器常常会对指令进行重排序。 从排序分为编译器重排序和处理器重排序两种 * (1)编译器重排序: 编译器保证不改变单线程执行结构的前提下,可以调整多线程语句执行顺序#xff1b; * (2)处理器重排序#xff1a; 如果不存在数据依赖…                        在执行程序时: 通常为了提供性能,处理器和编译器常常会对指令进行重排序。 从排序分为编译器重排序和处理器重排序两种 * (1)编译器重排序: 编译器保证不改变单线程执行结构的前提下,可以调整多线程语句执行顺序 * (2)处理器重排序 如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序; * 若要实现快速响应,就得把程序执行指令的方式换一换,将同步方式改成异步方法,方法执行改为消息发送,因此诞生了响应式编程模型Spring WebFlux 响应式异步编程|道法术器(一) Spring WeFlux响应式编程整合另一种方案|道法术器(二) R2DBC简介 Spring data R2DBC是更大的Spring data 系列的一部分它使得实现基于R2DBC的存储库变得容易。R2DBC代表反应式关系数据库连接这是一种使用反应式驱动程序集成SQL数据库的规范。Spring Data R2DBC使用属性的Spring抽象和Repository支持应用于R2DBC。它使得在反应式应用程序堆栈中使用关系数据访问技术构建Spring驱动的应用程序变得更加容易。 Spring Data R2DBC的目标是在概念上变得简单。为了实现这一点它不提供缓存、延迟加载、写后处理或ORM框架的许多其他特性。这使得Spring Data R2DBC成为一个简单、有限、固执己见的对象映射器。 Spring Data R2DBC允许一种 functional 方法与数据库交互提供R2dbcEntityTemplate作为应用程序的入口点。 首先选择数据库驱动程序并创建R2dbcEntityTemplate实例 使用传统 web 框架比如 SpringMVC这些基于 Servlet 容器。 Webflux 是一种异步非阻塞的框架异步非阻塞的框架在 Servlet3.1 以后才支持核心是基于 Reactor 的相关 API 实现的。 什么是异步非阻塞 异步和同步 异步和同步针对调用者调用者发送请求如果等着对方回应之后才去做其他事情就是同步如果发送请求之后不等着对方回应就去做其他事情就是异步。 非阻塞和阻塞 阻塞和非阻塞针对被调用者被调用者收到请求之后做完请求任务之后才给出反馈就是阻塞收到请求之后马上给出反馈然后再去做事情就是非阻塞。 Webflux 特点 第一 非阻塞式在有限资源下提高系统吞吐量和伸缩性以 Reactor 为基础实现响应式编程。 第二 函数式编程Spring5 框架基于 java8Webflux 使用 Java8 函数式编程方式实现路由请求。   Spring Data R2DBC可以与Spring Data JPA结合使用其实R2DBC与原来的JPA使用方式差别不大使用非常简单。 只是Spring Data JPA中方法返回的是真实的值而R2DBC中返回的是数据流MonoFlux。 简单介绍一个Spring Data JPA。Spring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套 JPA (Java Persistence API) 应用框架简单说就是类似MybatisHibernate的框架Spring Data JPA底层通过Hibernate操作数据库。 Repository是Spring Data R2DBC中的重要概念封装了对一个实体的操作相当于一个daoData Access Object数据访问对象   官网连接Spring Data R2DBC - Reference Documentation 5. Requirements The Spring Data R2DBC 1.x binaries require: JDK level 8.0 and above Spring Framework 5.3.8 and above R2DBC Arabba-SR10 and above 这是官网对搭建非阻塞响应式编程的环境要求: 一本节将从简单的搭建开体验下响应式非阻塞编程的大致概况: 1.1 搭建环境: !--设置spring-boot依赖的版本 -- parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.5/version !--2.4.11--relativePath/ !-- lookup parent from repository -- /parent    !-- 响应式编程集成-- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-webflux/artifactId /dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql-connector-java.version}/version /dependency !--R2DBC是基于Reactive Streams标准来设计的。通过使用R2DBC你可以使用reactive API来操作数据。同时R2DBC只是一个开放的标准而各个具体的数据库连接实现需要实现这个标准。-- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-r2dbc/artifactId /dependency dependencygroupIdcom.github.jasync-sql/groupIdartifactIdjasync-r2dbc-mysql/artifactIdversion1.2.3/version /dependency 额外可有可无 !--reactor-test测试相关类-- dependencygroupIdio.projectreactor/groupIdartifactIdreactor-test/artifactId /dependency 第二: 基础配置application.yml文件 server:port: 9999servlet:context-path: / spring:#连接数据库的url前缀不再是jdbc而是换成r2dbc#这里可以配置连接池相关的其它属性这里为了简洁不配置r2dbc:url: mysql://localhost:3306/tope-pay-user?useJDBCCompliantTimezoneShifttrueuseLegacyDatetimeCodefalseserverTimezoneGMT%2B8useSSLfalseusername: rootpassword: 123456logging:level:org.springframework.r2dbc: INFO #输出执行的sqlorg.springframework.cloud.web.reactive: inforeactor.ipc.netty: info 第三: javaConfig文件编写,读取初始化化R2dbc连接的相关参数 package org.jd.websocket.auth.data.reactor.config;import com.github.jasync.r2dbc.mysql.JasyncConnectionFactory; import com.github.jasync.sql.db.mysql.pool.MySQLConnectionFactory; import io.r2dbc.spi.ConnectionFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.r2dbc.R2dbcProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.r2dbc.core.R2dbcEntityOperations; import org.springframework.data.r2dbc.core.R2dbcEntityTemplate; import org.springframework.r2dbc.connection.R2dbcTransactionManager; import org.springframework.transaction.ReactiveTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement;import java.net.URI; import java.net.URISyntaxException;/*** R2dbcProperties 看源代码中,数据库连接池的相关配置*/ Configuration EnableTransactionManagement // 开启事务的支持 public class DatabaseConfiguration {BeanQualifier(mysqlConnectionFactory)public ConnectionFactory connectionFactory(R2dbcProperties properties) throws URISyntaxException {// 从R2dbcProperties中,解析出 host、port、databaseURI uri new URI(properties.getUrl());String host uri.getHost();int port uri.getPort();String database uri.getPath().substring(1); // 去掉首位的 / 斜杠// 创建 Configuration 配置配置对象com.github.jasync.sql.db.Configuration configuration new com.github.jasync.sql.db.Configuration(properties.getUsername(), host, port, properties.getPassword(), database);// 创建 ConnectionFactory 对象JasyncConnectionFactory jasyncConnectionFactory new JasyncConnectionFactory(new MySQLConnectionFactory(configuration));return jasyncConnectionFactory;}Beanpublic R2dbcEntityOperations mysqlR2dbcEntityOperations(Qualifier(mysqlConnectionFactory) ConnectionFactory connectionFactory) {return new R2dbcEntityTemplate(connectionFactory);}Beanpublic ReactiveTransactionManager transactionManager(R2dbcProperties properties) throws URISyntaxException {return new R2dbcTransactionManager(this.connectionFactory(properties));} }四数据持久层: 响应式非阻塞编程  package org.jd.websocket.auth.data.reactor.repository;import org.jd.websocket.auth.data.reactor.entity.RSysSystem; import org.springframework.data.repository.reactive.ReactiveCrudRepository; import org.springframework.data.repository.reactive.ReactiveSortingRepository; import org.springframework.stereotype.Repository;/*** 持久层非阻塞异步访问*/ Repository public interface RSysSystemReactiveRepository extends ReactiveCrudRepositoryRSysSystem, Long, ReactiveSortingRepositoryRSysSystem, Long { }五业务层: package org.jd.websocket.auth.data.reactor.service;import org.jd.websocket.auth.data.reactor.entity.RSysSystem; import reactor.core.publisher.Mono;public interface RSysSystemService {/*** 通过ID查找单条记录** param systemId 系统服务ID* return {link MonoRSysSystem}*/MonoRSysSystem findById(Long systemId);/*** 插入记录信息** param system* return {link MonoRSysSystem)*/MonoRSysSystem insert(RSysSystem system);/*** 通过ID查询是否存在记录** param systemId 系统ID* return {link MonoBoolean}*/MonoBoolean exists(Long systemId);/*** 查询记录数** return {link MonoLong}*/MonoLong count(); }package org.jd.websocket.auth.data.reactor.service.impl;fimport lombok.extern.slf4j.Slf4j; import org.jd.websocket.auth.data.reactor.entity.RSysSystem; import org.jd.websocket.auth.data.reactor.repository.RSysSystemReactiveRepository; import org.jd.websocket.auth.data.reactor.service.RSysSystemService; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import reactor.core.publisher.Mono; import javax.annotation.Resource;/*** 构建全调用链路异步响应式编程* 系统响应式查询服务*/ Slf4j Service public class RSysSystemServiceImpl implements RSysSystemService {Resourceprivate RSysSystemReactiveRepository sysSystemReactiveRepository;Overridepublic MonoRSysSystem findById(Long systemId) {return sysSystemReactiveRepository.findById(systemId);}Transactional(rollbackFor Exception.class)Overridepublic MonoRSysSystem insert(RSysSystem system) {return sysSystemReactiveRepository.save(system);}Overridepublic MonoBoolean exists(Long systemId) {return sysSystemReactiveRepository.existsById(systemId);}Overridepublic MonoLong count() {return sysSystemReactiveRepository.count();} }六服务器访问层 基于注解方式编程 package org.jd.websocket.auth.data.reactor.controller;import org.jd.websocket.auth.data.reactor.entity.RSysSystem; import org.jd.websocket.auth.data.reactor.service.RSysSystemService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono;import javax.annotation.Resource;RestController RequestMapping(/system) public class SysSystemController {Resourceprivate RSysSystemService rSysSystemService;GetMapping(/getSysSystemById/{systemId})public MonoRSysSystem getSySystem(PathVariable(systemId) Long systemId) {MonoRSysSystem result rSysSystemService.findById(systemId);System.out.println(result: result.toString());return result;}}七: 领域模型类 package org.jd.websocket.auth.data.reactor.entity;import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Version; import org.springframework.data.relational.core.mapping.Column; import org.springframework.data.relational.core.mapping.Table; import org.springframework.format.annotation.DateTimeFormat;/*** 属性上的注解使用Spring-data中的相关注解*/ import java.io.Serializable; import java.time.LocalDateTime; import java.util.List;Data RequiredArgsConstructor Table(value sys_system) public class RSysSystem implements Serializable {Transientprivate static final long serialVersionUID 7481799808203597699L;// 主键自增IdColumn(value system_id)private Long systemId;/*** 系统名称* 字段映射和约束条件* //对应数据库表中哪个列字段及对该字段的自定义*/Column(value system_name)private String systemName;/*** 详细功能描述: 描述该系统主要包含那些那些模块每个模块的大致功能*/Column(value system_detail_desc)private String systemDetailDesc;/*** 系统跳转到功能版块路径*/Column(value path_function_url)private String pathFunctionUrl;/*** 系统包含那些模块* 该字段不参与数据库映射*/Transientprivate ListRSysModule sysModules;/**** 创建时间*/DateTimeFormat(pattern yyyy-MM-dd HH:mm:ss)Column(value create_time)private LocalDateTime createTime;/*** 更新时间*/DateTimeFormat(pattern yyyy-MM-dd HH:mm:ss)Column(value update_time)private LocalDateTime updateTime;/*** 版本号用于乐观锁, 默认为 1* 使用 Version 注解标注对应的实体类。* 可以通过 TableField 进行数据自动填充。*/Versionprivate Integer version; }测试脚本: CREATE TABLE sys_system (   system_id bigint(11) NOT NULL AUTO_INCREMENT COMMENT 系统主键,   system_name varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT COMMENT 系统短名称,   system_detail_desc varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 系统简介,   path_function_url varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT COMMENT 跳转到版块页路径,   create_time timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 创建时间,   update_time timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间,   version int(11) NOT NULL DEFAULT 0 COMMENT 版本号,   PRIMARY KEY (system_id) ) ENGINEInnoDB AUTO_INCREMENT2 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;   运行测试结果 http://localhost:9999/system/getSysSystemById/1 可能会遇到时间字段LocalDateTime转换的问题使用下面的配置转换类即可 package org.jd.websocket.auth.data.reactor.config;import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import java.io.IOException; import java.time.*; import java.time.format.DateTimeFormatter;Configuration public class LocalDateTimeSerializerConfig {Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return builder - {//序列化builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)));//反序列化builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer());};}// 反序列化public static class LocalDateTimeDeserializer extends JsonDeserializerLocalDateTime {Overridepublic LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext)throws IOException {long timestamp p.getValueAsLong();if (timestamp 0) {return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());} else {return null;}}} }至此基础搭建完成,后续会持续系列多篇讲解,撸下源代码及相关知识........待续.....  参考序列 * 官方文档 * https://github.com/spring-projects/spring-data-examples/tree/master/r2dbc/example * https://www.reactiveprinciples.org/ 中文官网
http://www.w-s-a.com/news/339759/

相关文章:

  • 建立网站的目的和意义网站建设寻求
  • 邢台手机网站建设设计师培训心得
  • 营销网站怎么做丽水微信网站建设哪家好
  • 南昌定制网站开发多少钱东阿县城市建设局网站
  • 浙江网站建设公司南昌seo招聘
  • 工业软件有哪些专业seo站长工具全面查询网站
  • 山东兴华建设集团有限公司网站和京东一样做电子产品的网站
  • 网站建设谢辞关于h5的网站模板
  • 网站改版提交WordPress360收录
  • 省级网站 开发建设 资质在国外怎么做网站
  • 中商华兴建设有限公司网站我的世界查找建筑网站
  • 广东网站设计公司百度推广免费送网站
  • 高密做网站哪家好网站建设预算
  • 免费wordpress网站模板重庆如何做聚政网站
  • 人才网站app建设建议系统开发生命周期法的优点表现
  • 门户网站想要微信登录怎么做湖南网站seo推广
  • 襄阳 网站建设管理系统网站
  • 重庆工程建设招标投标交易信息网广州外贸seo优化
  • 一个一起做网站东莞设计兼职网站建设
  • 杭州网站程序开发公司在哪个公司建设网站好
  • 网店的网站设计方案济南手机建站价格
  • 网站做了301重定向域名会自动跳转吗唐山地方志网站建设
  • 学校网站建设说明书海南省建设执业资格注册管理中心网站
  • 东莞哪家网站建设好网站风格设定
  • 自驾游网站模板搭建wordpress步骤
  • wordpress视频网站上传视频提升学历是什么意思
  • 江西省城乡建设厅建设网站浙江建设
  • 网站联系我们页面临平做网站
  • 如何用网站做cpa交互比较好的网站
  • 一家只做特卖的网站wordpress修改模板教程