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

企业网站分为哪三种类型北京网页设计与制作公司

企业网站分为哪三种类型,北京网页设计与制作公司,学计算机能做什么工作,如果提高网站基于Canal的数据同步 一、 系统结构 该数据同步系统由Spring Boot和Canal共同组成。 Spring Boot 是一个流行的 Java Web 框架#xff0c;而 Canal 则是阿里巴巴开源的 MySQL 数据库的数据变更监听框架。结合 Spring Boot 和 Canal#xff0c;可以实现 MySQL 数据库的实时数…基于Canal的数据同步 一、 系统结构 该数据同步系统由Spring Boot和Canal共同组成。 Spring Boot 是一个流行的 Java Web 框架而 Canal 则是阿里巴巴开源的 MySQL 数据库的数据变更监听框架。结合 Spring Boot 和 Canal可以实现 MySQL 数据库的实时数据同步到其他系统中。 canal.deployer-1.1.7-SNAPSHOT.tar.gz为Canal软件压缩包需要安装在服务器上并根据下文进行配置文件的修改。CanalClient.rar为用Spring Boot框架编写的数据库监听同步项目 二、. Canal配置 在解压Canal文件夹后需要配置两个文件。 在配置Canal前需要确保Mysql的Binlog已经开启并且模式为ROW找到当前binlog的文件名和position。 1 配置文件路径canal/conf/canal.properties 2 配置文件路径 canal/conf/example/instance.properties 三、 Spring Boot配置 1. 项目结构 2. Canal账号密码配置 进入到Config下的CanalClient类文件。 注意密码是通过MD5加密的图中这这段字符应替换为canal。 3. 目标数据库配置 在yml中配置数据同步目标数据库即可 源代码: package com.canal.canalclient.config;import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.client.CanalConnectors; import com.alibaba.otter.canal.protocol.CanalEntry; import com.alibaba.otter.canal.protocol.CanalEntry.Column; import com.alibaba.otter.canal.protocol.CanalEntry.EntryType; import com.alibaba.otter.canal.protocol.CanalEntry.EventType; import com.alibaba.otter.canal.protocol.CanalEntry.RowChange; import com.alibaba.otter.canal.protocol.Message; import com.google.protobuf.InvalidProtocolBufferException; import org.springframework.jdbc.core.JdbcTemplate;import java.net.InetSocketAddress; import java.util.List; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; /*** Auther: fzl* Date: 2020/4/20 01:21* Description:*/ public class CanalClient {private static QueueString SQL_QUEUE new ConcurrentLinkedQueue();public static void startCanal() {//获取canalServer连接本机地址,端口号CanalConnector connector CanalConnectors.newSingleConnector(new InetSocketAddress(IP地址, 端口号), example, canal, canal);int batchSize 1000;try {//连接canalServerconnector.connect();//订阅Desctinstionconnector.subscribe();connector.rollback();try {while (true) {//尝试从master那边拉去数据batchSize条记录有多少取多少//轮询拉取数据 上面的whereMessage message connector.getWithoutAck(batchSize);long batchId message.getId();int size message.getEntries().size();if (batchId -1 || size 0) {//睡眠Thread.sleep(1000);} else {dataHandle(message.getEntries());}connector.ack(batchId);System.out.println(aasize);//当队列里面堆积的sql大于一定数值的时候就模拟执行if (SQL_QUEUE.size() 10) {executeQueueSql();}}} catch (InterruptedException e) {e.printStackTrace();} catch (InvalidProtocolBufferException e) {e.printStackTrace();}} finally {connector.disconnect();}}public static JdbcTemplate jdbcTemplate;/*** 模拟执行队列里面的sql语句*/public static void executeQueueSql() {int size SQL_QUEUE.size();for (int i 0; i size; i) {String sql SQL_QUEUE.poll();jdbcTemplate.execute(sql);System.out.println([sql]---- sql);}}/*** 数据处理** param entrys*/private static void dataHandle(ListCanalEntry.Entry entrys) throws InvalidProtocolBufferException {for (CanalEntry.Entry entry : entrys) {if (EntryType.ROWDATA entry.getEntryType()) {RowChange rowChange RowChange.parseFrom(entry.getStoreValue());CanalEntry.EventType eventType rowChange.getEventType();if (eventType EventType.DELETE) {saveDeleteSql(entry);} else if (eventType EventType.UPDATE) {saveUpdateSql(entry);} else if (eventType CanalEntry.EventType.INSERT) {saveInsertSql(entry);}}}}/*** 保存更新语句** param entry*/private static void saveUpdateSql(CanalEntry.Entry entry) {try {RowChange rowChange RowChange.parseFrom(entry.getStoreValue());ListCanalEntry.RowData rowDatasList rowChange.getRowDatasList();for (CanalEntry.RowData rowData : rowDatasList) {ListColumn newColumnList rowData.getAfterColumnsList();StringBuffer sql new StringBuffer(update entry.getHeader().getSchemaName() . entry.getHeader().getTableName() set );for (int i 0; i newColumnList.size(); i) {sql.append( newColumnList.get(i).getName() newColumnList.get(i).getValue() );if (i ! newColumnList.size() - 1) {sql.append(,);}}sql.append( where );ListColumn oldColumnList rowData.getBeforeColumnsList();for (Column column : oldColumnList) {if (column.getIsKey()) {//暂时只支持单一主键sql.append(column.getName() column.getValue());break;}}SQL_QUEUE.add(sql.toString());}} catch (InvalidProtocolBufferException e) {e.printStackTrace();}}/*** 保存删除语句** param entry*/private static void saveDeleteSql(CanalEntry.Entry entry) {try {RowChange rowChange RowChange.parseFrom(entry.getStoreValue());ListCanalEntry.RowData rowDatasList rowChange.getRowDatasList();for (CanalEntry.RowData rowData : rowDatasList) {ListColumn columnList rowData.getBeforeColumnsList();StringBuffer sql new StringBuffer(delete from entry.getHeader().getSchemaName() . entry.getHeader().getTableName() where );for (Column column : columnList) {if (column.getIsKey()) {//暂时只支持单一主键sql.append(column.getName() column.getValue());break;}}SQL_QUEUE.add(sql.toString());}} catch (InvalidProtocolBufferException e) {e.printStackTrace();}}/*** 保存插入语句** param entry*/private static void saveInsertSql(CanalEntry.Entry entry) {try {RowChange rowChange RowChange.parseFrom(entry.getStoreValue());ListCanalEntry.RowData rowDatasList rowChange.getRowDatasList();for (CanalEntry.RowData rowData : rowDatasList) {ListColumn columnList rowData.getAfterColumnsList();StringBuffer sql new StringBuffer(insert into entry.getHeader().getSchemaName() . entry.getHeader().getTableName() ();for (int i 0; i columnList.size(); i) {sql.append(columnList.get(i).getName());if (i ! columnList.size() - 1) {sql.append(,);}}sql.append() VALUES ();for (int i 0; i columnList.size(); i) {sql.append( columnList.get(i).getValue() );if (i ! columnList.size() - 1) {sql.append(,);}}sql.append());SQL_QUEUE.add(sql.toString());}} catch (InvalidProtocolBufferException e) {e.printStackTrace();}} }package com.canal.canalclient;import com.canal.canalclient.config.CanalClient; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component;Component Slf4j public class StartedFunction implements ApplicationRunner {AutowiredQualifier(test_master_energy) //有多个数据源的需要名称区分private static JdbcTemplate jdbcTemplate;Overridepublic void run(ApplicationArguments args) throws Exception{log.info(开始监听同步数据库);CanalClient.jdbcTemplate jdbcTemplate;CanalClient.startCanal();} }?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.0.3/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.canal/groupIdartifactIdCanalClient/artifactIdversion0.0.1-SNAPSHOT/versionnameCanalClient/namedescriptionCanalClient/descriptionpropertiesjava.version19/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.alibaba.otter/groupIdartifactIdcanal.client/artifactIdversion1.1.4/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.2.9/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.32/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependenciesbuildplugins!-- 打包时跳过测试 --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdversion2.12.4/versionconfigurationskipTeststrue/skipTests/configuration/pluginplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/pluginsresourcesresourcedirectorysrc/main/resources/directory/resourceresourcedirectorysrc/main/java/directoryincludesinclude**/*.xml/include/includes/resource/resources/build/project
http://www.w-s-a.com/news/600687/

相关文章:

  • python做网站多少钱wordpress 2.8
  • 深圳网站平台网站开发工作程序怎么写
  • 自己可以接单做网站吗wordpress 添加自定义按钮
  • 网站首页权重宣传页制作
  • 智能网站建设软件有哪些方面网页的建设
  • 石铜路网站建设生鲜电商网站开发
  • 怎么提高网站加载速度慢网站的轮播怎么做的
  • 网络网站推广优化建筑工程教育网官方网站
  • 旅行社网站策划做网站编辑好还是美工好
  • 珠海做网站找哪家好在线磁力搜索神器
  • 做网站优化有必要wordpress导航栏字体
  • 中山网站建设半江红沈阳免费网站建站模板
  • 工信部网站备案管理系统网站备案负责人 更换
  • 我要做个网站该怎么做怎么做电商平台网站
  • wordpress教程 网站标题莱芜大众网
  • 网站建设业务终止合作范本主机公园wordpress
  • 口碑好企业网站建设网站建设与什么专业有关
  • 助贷获客系统快速优化排名公司推荐
  • 重庆做网站优化推广的公司企业网站如何进行定位
  • 高密市赏旋网站设计有限公司山东广饶县建设局网站
  • 成都哪里有网站开发公司网业分离是什么
  • 购物导购网站开发女孩学建筑学好找工作吗
  • 做网站沈阳掌握夏邑进入公众号
  • 怎么做自动提卡网站谷歌推广怎么做
  • 大同网站建设熊掌号wordpress 首页单页
  • 青岛网站美工成都优秀网站建设
  • 聊城大型门户网站建设多版本wordpress
  • 建网站的公司 快云wordpress的搜索
  • 贷款网站模版东莞网站建设哪家专业
  • 做做网站已更新878网站正在建设中