1 Star 0 Fork 125

reno-day / small-tools

forked from zhengqingya / small-tools 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
small-tools.sql 907.63 KB
一键复制 编辑 原始数据 按行查看 历史
zhengqingya 提交于 2021-01-17 19:37 . init
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 50726
Source Host : 127.0.0.1:3306
Source Schema : small-tools
Target Server Type : MySQL
Target Server Version : 50726
File Encoding : 65001
Date: 17/01/2021 19:36:17
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_cg_free_marker_template
-- ----------------------------
DROP TABLE IF EXISTS `t_cg_free_marker_template`;
CREATE TABLE `t_cg_free_marker_template` (
`free_marker_template_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`template_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '键',
`template_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '值',
`template_re_user_id` int(11) NOT NULL COMMENT '关联人员id',
`is_common` tinyint(2) NOT NULL DEFAULT 0 COMMENT '是否公共使用(1:是 0:否)',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`free_marker_template_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成器 - FreeMarker模板数据配置表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_cg_free_marker_template
-- ----------------------------
INSERT INTO `t_cg_free_marker_template` VALUES (1, 'test', '测试', 1, 0, 1, '2020-11-02 21:06:47', 1, '2020-11-02 21:27:22', 1);
INSERT INTO `t_cg_free_marker_template` VALUES (2, 'hello', '你好', 1, 1, 1, '2020-11-02 21:27:37', 1, '2020-11-08 16:59:33', 1);
INSERT INTO `t_cg_free_marker_template` VALUES (5, '121', '111', 2, 0, 2, '2020-11-08 16:55:31', 2, '2020-11-08 16:55:35', 1);
INSERT INTO `t_cg_free_marker_template` VALUES (6, 'author', 'zhengqing', 1, 0, 1, '2020-11-15 21:40:30', 1, '2020-11-28 23:04:52', 1);
-- ----------------------------
-- Table structure for t_cg_project
-- ----------------------------
DROP TABLE IF EXISTS `t_cg_project`;
CREATE TABLE `t_cg_project` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '项目ID',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '项目名称',
`data_re_user_id` int(11) NOT NULL COMMENT '所属用户ID',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成器 - 项目管理表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_cg_project
-- ----------------------------
INSERT INTO `t_cg_project` VALUES (1, 'Small Tools', 1, 1, '2020-08-22 15:01:51', 1, '2020-09-02 15:12:43', 1);
INSERT INTO `t_cg_project` VALUES (15, '容和通测试demo', 1, 1, '2020-08-22 15:01:51', 1, '2020-11-07 15:13:42', 1);
INSERT INTO `t_cg_project` VALUES (20, 'test项目', 1, 1, '2020-11-15 18:31:34', 1, '2021-01-15 10:38:24', 1);
-- ----------------------------
-- Table structure for t_cg_project_package
-- ----------------------------
DROP TABLE IF EXISTS `t_cg_project_package`;
CREATE TABLE `t_cg_project_package` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '包ID',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '包名',
`parent_id` int(11) DEFAULT NULL COMMENT '父包ID',
`project_id` int(11) DEFAULT NULL COMMENT '关联项目ID',
`data_re_user_id` int(11) DEFAULT NULL COMMENT '关联用户id',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 70 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成器 - 项目包管理表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_cg_project_package
-- ----------------------------
INSERT INTO `t_cg_project_package` VALUES (1, 'com.zhengqing.modules', 0, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-11-02 19:22:56', 1);
INSERT INTO `t_cg_project_package` VALUES (2, 'model', 1, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-09-01 21:34:51', 1);
INSERT INTO `t_cg_project_package` VALUES (3, 'entity', 1, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (4, 'service', 1, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (5, 'service.impl', 1, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (6, 'mapper', 1, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (7, 'mapper.xml', 1, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (18, 'api', 1, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (19, 'js', 1, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (20, 'vue', 1, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (21, 'dto', 2, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-09-01 21:34:58', 1);
INSERT INTO `t_cg_project_package` VALUES (22, 'vo', 2, 1, 1, 1, '2020-08-22 15:01:51', 1, '2020-09-01 21:35:20', 1);
INSERT INTO `t_cg_project_package` VALUES (31, 'com.rhpass.cloud.official.document.modules', 0, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-10 16:41:04', 1);
INSERT INTO `t_cg_project_package` VALUES (32, 'model', 31, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-10 16:56:49', 1);
INSERT INTO `t_cg_project_package` VALUES (33, 'vo', 32, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-10 16:57:00', 1);
INSERT INTO `t_cg_project_package` VALUES (34, 'vue', 31, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (35, 'js', 31, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (36, 'controller', 31, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-10 16:56:39', 1);
INSERT INTO `t_cg_project_package` VALUES (37, 'mapper.xml', 31, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (38, 'mapper', 31, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (39, 'service.impl', 31, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (40, 'service', 31, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (41, 'entity', 31, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_cg_project_package` VALUES (43, 'dto', 32, 15, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-10 16:56:55', 1);
INSERT INTO `t_cg_project_package` VALUES (54, 'com.zhengqing.modules', 0, 20, 1, 1, '2020-11-15 18:31:34', 1, '2020-11-16 22:00:33', 1);
INSERT INTO `t_cg_project_package` VALUES (55, 'js', 54, 20, 1, 1, '2020-11-15 18:31:41', 1, '2020-11-16 22:01:14', 1);
INSERT INTO `t_cg_project_package` VALUES (56, 'vue', 54, 20, 1, 1, '2020-11-15 18:31:51', 1, '2020-11-16 22:01:11', 1);
INSERT INTO `t_cg_project_package` VALUES (58, 'api', 54, 20, 1, 1, '2020-11-16 21:29:46', 1, '2020-11-16 22:01:08', 1);
INSERT INTO `t_cg_project_package` VALUES (59, 'mapper.xml', 54, 20, 1, 1, '2020-11-16 21:29:53', 1, '2020-11-16 22:01:04', 1);
INSERT INTO `t_cg_project_package` VALUES (60, 'mapper', 54, 20, 1, 1, '2020-11-16 21:30:01', 1, '2020-11-16 22:00:59', 1);
INSERT INTO `t_cg_project_package` VALUES (61, 'service.impl', 54, 20, 1, 1, '2020-11-16 21:30:08', 1, '2020-11-16 22:00:54', 1);
INSERT INTO `t_cg_project_package` VALUES (62, 'service', 54, 20, 1, 1, '2020-11-16 21:30:14', 1, '2020-11-16 22:00:46', 1);
INSERT INTO `t_cg_project_package` VALUES (63, 'entity', 54, 20, 1, 1, '2020-11-16 21:30:20', 1, '2020-11-16 22:00:39', 1);
INSERT INTO `t_cg_project_package` VALUES (64, 'model', 54, 20, 1, 1, '2020-11-16 21:30:28', 1, '2020-11-16 22:00:21', 1);
INSERT INTO `t_cg_project_package` VALUES (65, 'vo', 64, 20, 1, 1, '2020-11-16 21:30:36', 1, '2020-11-16 22:00:29', 1);
INSERT INTO `t_cg_project_package` VALUES (66, 'dto', 64, 20, 1, 1, '2020-11-16 21:30:40', 1, '2020-11-16 22:00:25', 1);
-- ----------------------------
-- Table structure for t_cg_project_re_db
-- ----------------------------
DROP TABLE IF EXISTS `t_cg_project_re_db`;
CREATE TABLE `t_cg_project_re_db` (
`project_re_db_data_source_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`project_id` int(11) NOT NULL COMMENT '所属项目ID',
`db_data_source_id` int(11) NOT NULL COMMENT '数据源id',
`db_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '库名',
`remark` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
`data_re_user_id` int(11) NOT NULL COMMENT '所属用户ID',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`project_re_db_data_source_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成器 - 项目关联数据库表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_cg_project_re_db
-- ----------------------------
INSERT INTO `t_cg_project_re_db` VALUES (1, 1, 19, 'small-tools', '小工具', 1, 1, '2020-11-14 14:58:51', 1, '2021-01-17 03:30:35', 1);
INSERT INTO `t_cg_project_re_db` VALUES (4, 15, 19, 'demo', '测试demo', 1, 1, '2020-11-15 18:39:05', 1, '2020-12-10 16:40:36', 1);
-- ----------------------------
-- Table structure for t_cg_project_template
-- ----------------------------
DROP TABLE IF EXISTS `t_cg_project_template`;
CREATE TABLE `t_cg_project_template` (
`project_template_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '模板ID',
`project_id` int(11) NOT NULL COMMENT '项目ID',
`project_package_id` int(11) NOT NULL COMMENT '包ID',
`file_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '生成文件名',
`file_suffix` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '生成文件后缀名 .java',
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '模板内容',
`is_basic` tinyint(2) NOT NULL COMMENT '是否作为基础模板使用(1:是 0:否)',
`data_re_user_id` int(11) NOT NULL COMMENT '关联用户id',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`project_template_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 127 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '代码生成器 - 项目代码模板表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_cg_project_template
-- ----------------------------
INSERT INTO `t_cg_project_template` VALUES (19, 1, 3, '${entity}', '.java', 'package ${package.entity};\n\nimport java.util.Date;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.zhengqing.modules.common.entity.BaseEntity;\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport lombok.NoArgsConstructor;\n\n/**\n* <p> ${tableComment} </p>\n*\n* @author: ${author}\n* @description :\n* @date: ${date}\n*/\n@Data\n@EqualsAndHashCode(callSuper = true)\n@Builder\n@AllArgsConstructor\n@NoArgsConstructor\n@TableName(\"${tableName}\")\n@ApiModel(\"${tableComment}\")\npublic class ${entity} extends BaseEntity<${entity}> {\n\n<#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n @ApiModelProperty(\"${item.columnComment}\")\n <#if item.ifPrimaryKey>\n @TableId(value = \"${item.columnNameDb}\", type = IdType.AUTO)\n </#if>\n private ${item.columnTypeJava} ${item.columnNameJavaLower};\n \n </#if> \n</#list>\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-12 15:53:35', 1);
INSERT INTO `t_cg_project_template` VALUES (20, 1, 7, '${entity}Mapper', '.xml', '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"${package.mapper}.${entity}Mapper\">\n\n <select id=\"selectDataList\" resultType=\"${package.vo}.${entity}ListVO\">\n SELECT\n <#list columnInfoList as item>\n ${tableNameAbbr}.${item.columnNameDb} ${item.columnNameJavaLower},\n </#list>\n FROM ${tableName} ${tableNameAbbr}\n WHERE ${tableNameAbbr}.is_valid = 1\n <#list queryColumnInfoList as item>\n <#if item.columnTypeJava = \"Integer\"> \n <if test=\"filter.${item.columnNameJavaLower}!=null\">\n AND ${tableNameAbbr}.${item.columnNameDb} = ${r\"#\"}{filter.${item.columnNameJavaLower}}\n </if>\n <#else>\n <if test=\"filter.${item.columnNameJavaLower}!=null and filter.${item.columnNameJavaLower}!=\'\'\">\n AND ${tableNameAbbr}.${item.columnNameDb} LIKE CONCAT( \'%\', ${r\"#\"}{filter.${item.columnNameJavaLower}} , \'%\' )\n </if>\n </#if> \n </#list>\n ORDER BY ${tableNameAbbr}.update_time DESC\n </select>\n\n</mapper>\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-15 12:31:35', 1);
INSERT INTO `t_cg_project_template` VALUES (21, 1, 6, '${entity}Mapper', '.java', 'package ${package.mapper};\n\nimport java.util.List;\n\nimport org.apache.ibatis.annotations.Param;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\n\n/**\n* <p> ${tableComment} Mapper 接口 </p>\n*\n* @author : ${author}\n* @description:\n* @date : ${date}\n*/\npublic interface ${entity}Mapper extends BaseMapper<${entity}> {\n\n /**\n * 列表分页\n *\n * @param page: 分页数据\n * @param filter: 查询过滤参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n IPage<${entity}ListVO> selectDataList(IPage page, @Param(\"filter\") ${entity}ListDTO filter);\n\n /**\n * 列表\n *\n * @param filter: 查询过滤参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n List<${entity}ListVO> selectDataList(@Param(\"filter\") ${entity}ListDTO filter);\n\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-11-17 00:16:18', 1);
INSERT INTO `t_cg_project_template` VALUES (22, 1, 4, 'I${entity}Service', '.java', 'package ${package.service};\n\nimport java.util.List;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.service.IService;\n\n/**\n* <p> ${tableComment} 服务类 </p>\n*\n* @author: ${author}\n* @description:\n* @date: ${date}\n*/\npublic interface I${entity}Service extends IService<${entity}> {\n\n /**\n * 列表分页\n *\n * @param params: 查询参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n IPage<${entity}ListVO> listPage(${entity}ListDTO params);\n\n /**\n * 列表\n *\n * @param params: 查询参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n List<${entity}ListVO> list(${entity}ListDTO params);\n\n /**\n * 新增或更新\n *\n * @param params: 保存参数\n * @return: 主键id\n * @author : ${author}\n * @date : ${date}\n */\n Integer addOrUpdateData(${entity}SaveDTO params);\n\n}', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-12 12:53:05', 1);
INSERT INTO `t_cg_project_template` VALUES (23, 1, 5, '${entity}ServiceImpl', '.java', 'package ${package.impl};\n\nimport java.util.List;\nimport org.springframework.util.CollectionUtils;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\nimport com.zhengqing.utils.MyBeanUtils;\n\nimport lombok.extern.slf4j.Slf4j;\n\n/**\n* <p> ${tableComment} 服务实现类 </p>\n*\n* @author: ${author}\n* @description:\n* @date: ${date}\n*/\n@Slf4j\n@Service\n@Transactional(rollbackFor = Exception.class)\npublic class ${entity}ServiceImpl extends ServiceImpl<${entity}Mapper, ${entity}> implements I${entity}Service {\n\n @Autowired\n private ${entity}Mapper ${entityNameLower}Mapper;\n\n @Override\n public IPage<${entity}ListVO> listPage(${entity}ListDTO params) {\n IPage<${entity}ListVO> result = ${entityNameLower}Mapper.selectDataList(new Page<>(), params);\n List<${entity}ListVO> list = result.getRecords();\n handleResultData(list);\n return result;\n }\n\n @Override\n public List<${entity}ListVO> list(${entity}ListDTO params) {\n List<${entity}ListVO> list = ${entityNameLower}Mapper.selectDataList(params);\n handleResultData(list);\n return list;\n }\n\n /**\n * 处理数据\n *\n * @param list: 数据\n * @return: void\n * @author : ${author}\n * @date : ${date}\n */\n private void handleResultData(List<${entity}ListVO> list) {\n \n }\n\n @Override\n public Integer addOrUpdateData(${entity}SaveDTO params) {\n <#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n ${item.columnTypeJava} ${item.columnNameJavaLower} = params.get${item.columnNameJavaUpper}();\n </#if>\n </#list>\n \n ${entity} ${entityNameLower} = new ${entity}();\n <#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n ${entityNameLower}.set${item.columnNameJavaUpper}(${item.columnNameJavaLower});\n </#if>\n </#list>\n \n if (${entityNameLower}Id==null) {\n ${entityNameLower}.insert();\n } else {\n ${entityNameLower}.updateById();\n }\n return ${entityNameLower}.getId();\n }\n\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-12 16:32:13', 1);
INSERT INTO `t_cg_project_template` VALUES (24, 1, 18, '${entity}Controller', '.java', 'package ${package.api};\n\nimport java.util.List;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.validation.annotation.Validated;\nimport org.springframework.web.bind.annotation.DeleteMapping;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.ModelAttribute;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.PutMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.zhengqing.modules.common.api.BaseController;\nimport com.zhengqing.modules.common.validator.fieldrepeat.Update;\nimport com.zhengqing.modules.common.validator.repeatsubmit.NoRepeatSubmit;\nimport com.zhengqing.modules.smalltools.db.service.IStDbDataSourceService;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\n\n\n/**\n* <p> ${tableComment} 接口 </p>\n*\n* @author: ${author}\n* @description:\n* @date: ${date}\n*/\n@RestController\n@RequestMapping(\"/api/${moduleName}/${entityNameLower}\")\n@Api(tags = {\"${tableComment}接口\"})\npublic class ${entity}Controller extends BaseController {\n\n @Autowired\n private I${entity}Service ${entityNameLower}Service;\n\n @GetMapping(\"listPage\")\n @ApiOperation(\"列表分页\")\n public IPage<${entity}ListVO> listPage(@ModelAttribute ${entity}ListDTO params) {\n return ${entityNameLower}Service.listPage(params);\n }\n\n @GetMapping(\"list\")\n @ApiOperation(\"列表\")\n public List<${entity}ListVO> list(@ModelAttribute ${entity}ListDTO params) {\n return ${entityNameLower}Service.list(params);\n }\n\n @NoRepeatSubmit\n @PostMapping(\"\")\n @ApiOperation(\"新增\")\n public Integer add(@Validated @RequestBody ${entity}SaveDTO params) {\n return ${entityNameLower}Service.addOrUpdateData(params);\n }\n\n @NoRepeatSubmit\n @PutMapping(\"\")\n @ApiOperation(\"更新\")\n public Integer update(@Validated(Update.class) @RequestBody ${entity}SaveDTO params) {\n return ${entityNameLower}Service.addOrUpdateData(params);\n }\n\n @DeleteMapping(\"\")\n @ApiOperation(\"删除\")\n public void delete(@RequestParam Integer ${entityNameLower}Id) {\n ${entityNameLower}Service.removeById(${entityNameLower}Id);\n }\n\n @GetMapping(\"detail\")\n @ApiOperation(\"详情\")\n public ${entity} detail(@RequestParam Integer ${entityNameLower}Id) {\n return ${entityNameLower}Service.getById(${entityNameLower}Id);\n }\n\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-11-17 00:16:46', 1);
INSERT INTO `t_cg_project_template` VALUES (25, 1, 21, '${entity}ListDTO', '.java', 'package ${package.dto};\n\nimport com.zhengqing.modules.common.model.dto.BaseDTO;\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n/**\n* <p> ${tableComment}查询参数 </p>\n*\n* @author: ${ author }\n* @description:\n* @date: ${date}\n*/\n@Data\n@Builder\n@NoArgsConstructor\n@AllArgsConstructor\n@EqualsAndHashCode(callSuper = true)\n@ApiModel(\"${tableComment}查询参数\")\npublic class ${entity}ListDTO extends BaseDTO {\n\n<#list queryColumnInfoList as item>\n @ApiModelProperty(\"${item.columnComment}\")\n private ${item.columnTypeJava} ${item.columnNameJavaLower};\n \n</#list>\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-17 11:12:08', 1);
INSERT INTO `t_cg_project_template` VALUES (26, 1, 20, 'index', '.vue', '<template>\n <cus-wraper>\n <base-header>\n <#if queryColumnInfoList??>\n <#list queryColumnInfoList as item>\n <el-input v-model=\"listQuery.${item.columnNameJavaLower}\"\n placeholder=\"请输入${item.columnComment}\" style=\"width:200px\" clearable\n @clear=\"refreshTableData\"></el-input>\n </#list>\n </#if>\n <el-button v-has=\"\'query\'\" type=\"primary\" @click=\"refreshTableData\">查询</el-button>\n <template #right>\n <el-button v-has=\"\'add\'\" type=\"primary\" @click=\"handleAdd\">添加</el-button>\n </template>\n </base-header>\n\n <base-table-p ref=\"baseTable\" api=\"${vueApiName}.listPage\" :params=\"listQuery\">\n <#list columnInfoList as item>\n <#if item.columnTypeJava == \"Date\">\n <el-table-column label=\"${item.columnComment}\" align=\"center\">\n <template slot-scope=\"scope\">\n <span>{{scope.row.${item.columnNameJavaLower}|dateTimeFilter}}</span>\n </template>\n </el-table-column>\n <#else>\n <el-table-column label=\"${item.columnComment}\" prop=\"${item.columnNameJavaLower}\"\n align=\"center\"></el-table-column>\n </#if>\n </#list>\n <el-table-column align=\"center\" label=\"操作\">\n <template slot-scope=\"scope\">\n <el-button type=\"text\" @click=\"handleUpdate(scope.row)\">编辑</el-button>\n <cus-del-btn @ok=\"handleDelete(scope.row)\"></cus-del-btn>\n </template>\n </el-table-column>\n </base-table-p>\n\n <base-dialog :visible.sync=\"dialogVisible\" :title=\"titleMap[dialogStatus]\" width=\"30%\">\n <el-form ref=\"dataForm\" :model=\"form\" :rules=\"rules\" label-width=\"100px\">\n <#list columnInfoList as item>\n <el-form-item label=\"${item.columnComment}:\" prop=\"${item.columnNameJavaLower}\">\n <el-input v-model=\"form.${item.columnNameJavaLower}\"></el-input>\n </el-form-item>\n </#list>\n </el-form>\n <div slot=\"footer\">\n <el-button @click=\"dialogVisible = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\n </div>\n </base-dialog>\n </cus-wraper>\n</template>\n\n<script>\n export default {\n name: \'${entity}\',\n data() {\n return {\n dialogVisible: false,\n listQuery: {\n <#list queryColumnInfoList as item>\n ${item.columnNameJavaLower}: undefined, // ${item.columnComment}\n </#list>\n },\n form: {\n <#list columnInfoList as item>\n ${item.columnNameJavaLower}: undefined, // ${item.columnComment}\n </#list>\n },\n dialogStatus: \"\",\n titleMap: {\n add: \"添加\",\n update: \"编辑\",\n detail: \"详情\"\n },\n rules: { }\n }\n },\n created() {\n },\n methods: {\n refreshTableData() {\n this.$refs.baseTable.refresh();\n },\n handleAdd() {\n this.form = Object.assign({}, {});\n this.dialogStatus = \"add\";\n this.dialogVisible = true;\n },\n handleUpdate(row) {\n this.form = Object.assign({}, row);\n this.dialogStatus = \"update\";\n this.dialogVisible = true;\n },\n async handleDelete(row) {\n let res = await this.$api.${vueApiName}.delete(row.id);\n this.refreshTableData();\n this.submitOk(res.message);\n },\n submitForm() {\n this.$refs.dataForm.validate(async valid => {\n if (valid) {\n let res = await this.$api.${vueApiName}[this.form.id ? \"update\" : \"add\"](this.form);\n this.refreshTableData();\n this.submitOk(res.message);\n this.dialogVisible = false;\n }\n });\n }\n }\n }\n</script>\n<style scoped></style>\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-11-17 00:17:19', 1);
INSERT INTO `t_cg_project_template` VALUES (27, 1, 19, '${entity}', '.js', 'import request from \'@/utils/request\';\n\nconst BASE_API = \"/api/${moduleName}/${entityNameLower}\";\n\nexport default {\n listPage(query, headers) {\n return request({\n url: BASE_API + \"/listPage\",\n method: \"get\",\n params: query,\n headers\n });\n },\n add(form) {\n return request({\n url: BASE_API,\n method: \"post\",\n data: form\n });\n },\n update(form) {\n return request({\n url: BASE_API,\n method: \"put\",\n data: form\n });\n },\n delete(id) {\n return request({\n url: BASE_API,\n method: \"delete\",\n params: { id: id }\n });\n }\n};\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-11-17 00:17:27', 1);
INSERT INTO `t_cg_project_template` VALUES (46, 15, 41, '${entity}', '.java', 'package ${package.entity};\n\nimport java.util.Date;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.rhpass.cloud.official.document.modules.common.entity.MyBaseEntity;\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport lombok.NoArgsConstructor;\n\n/**\n* <p> ${tableComment} </p>\n*\n* @author: ${author}\n* @description :\n* @date: ${date}\n*/\n@Data\n@EqualsAndHashCode(callSuper = true)\n@Builder\n@AllArgsConstructor\n@NoArgsConstructor\n@TableName(\"${tableName}\")\n@ApiModel(\"${tableComment}\")\npublic class ${entity} extends MyBaseEntity {\n\n<#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n @ApiModelProperty(\"${item.columnComment}\")\n <#if item.ifPrimaryKey>\n @TableId(value = \"${item.columnNameDb}\", type = IdType.AUTO)\n </#if>\n private ${item.columnTypeJava} ${item.columnNameJavaLower};\n \n </#if> \n</#list>\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-12 15:54:34', 1);
INSERT INTO `t_cg_project_template` VALUES (47, 15, 37, '${entity}Mapper', '.xml', '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"${package.mapper}.${entity}Mapper\">\n\n <select id=\"selectDataList\" resultType=\"${package.vo}.${entity}ListVO\">\n SELECT\n <#list columnInfoList as item>\n ${tableNameAbbr}.${item.columnNameDb} ${item.columnNameJavaLower},\n </#list>\n FROM ${tableName} ${tableNameAbbr}\n WHERE ${tableNameAbbr}.is_valid = 1\n <#list queryColumnInfoList as item>\n <#if item.columnTypeJava = \"Integer\"> \n <if test=\"filter.${item.columnNameJavaLower}!=null\">\n AND ${tableNameAbbr}.${item.columnNameDb} = ${r\"#\"}{filter.${item.columnNameJavaLower}}\n </if>\n <#else>\n <if test=\"filter.${item.columnNameJavaLower}!=null and filter.${item.columnNameJavaLower}!=\'\'\">\n AND ${tableNameAbbr}.${item.columnNameDb} LIKE CONCAT( \'%\', ${r\"#\"}{filter.${item.columnNameJavaLower}} , \'%\' )\n </if>\n </#if> \n </#list>\n ORDER BY ${tableNameAbbr}.update_time DESC\n </select>\n\n</mapper>\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-16 16:51:17', 1);
INSERT INTO `t_cg_project_template` VALUES (48, 15, 38, '${entity}Mapper', '.java', 'package ${package.mapper};\n\nimport java.util.List;\n\nimport org.apache.ibatis.annotations.Param;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\n\n/**\n* <p> ${tableComment} Mapper 接口 </p>\n*\n* @author : ${author}\n* @description:\n* @date : ${date}\n*/\npublic interface ${entity}Mapper extends BaseMapper<${entity}> {\n\n /**\n * 列表分页\n *\n * @param page: 分页数据\n * @param filter: 查询过滤参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n IPage<${entity}ListVO> selectDataList(IPage page, @Param(\"filter\") ${entity}ListDTO filter);\n\n /**\n * 列表\n *\n * @param filter: 查询过滤参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n List<${entity}ListVO> selectDataList(@Param(\"filter\") ${entity}ListDTO filter);\n\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-10 16:59:33', 1);
INSERT INTO `t_cg_project_template` VALUES (49, 15, 40, 'I${entity}Service', '.java', 'package ${package.service};\n\nimport java.util.List;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.service.IService;\n\n/**\n* <p> ${tableComment} 服务类 </p>\n*\n* @author: ${author}\n* @description:\n* @date: ${date}\n*/\npublic interface I${entity}Service extends IService<${entity}> {\n\n /**\n * 列表分页\n *\n * @param params: 查询参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n IPage<${entity}ListVO> listPage(${entity}ListDTO params);\n\n /**\n * 列表\n *\n * @param params: 查询参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n List<${entity}ListVO> list(${entity}ListDTO params);\n\n /**\n * 新增或更新\n *\n * @param params: 保存参数\n * @return: 主键id\n * @author : ${author}\n * @date : ${date}\n */\n Integer addOrUpdateData(${entity}SaveDTO params);\n\n}', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-12 12:53:16', 1);
INSERT INTO `t_cg_project_template` VALUES (50, 15, 39, '${entity}ServiceImpl', '.java', 'package ${package.impl};\n\nimport java.util.List;\nimport org.springframework.util.CollectionUtils;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\nimport com.zhengqing.utils.MyBeanUtils;\n\nimport lombok.extern.slf4j.Slf4j;\n\n/**\n* <p> ${tableComment} 服务实现类 </p>\n*\n* @author: ${author}\n* @description:\n* @date: ${date}\n*/\n@Slf4j\n@Service\n@Transactional(rollbackFor = Exception.class)\npublic class ${entity}ServiceImpl extends ServiceImpl<${entity}Mapper, ${entity}> implements I${entity}Service {\n\n @Autowired\n private ${entity}Mapper ${entityNameLower}Mapper;\n\n @Override\n public IPage<${entity}ListVO> listPage(${entity}ListDTO params) {\n IPage<${entity}ListVO> result = ${entityNameLower}Mapper.selectDataList(new Page<>(), params);\n List<${entity}ListVO> list = result.getRecords();\n handleResultData(list);\n return result;\n }\n\n @Override\n public List<${entity}ListVO> list(${entity}ListDTO params) {\n List<${entity}ListVO> list = ${entityNameLower}Mapper.selectDataList(params);\n handleResultData(list);\n return list;\n }\n\n /**\n * 处理数据\n *\n * @param list: 数据\n * @return: void\n * @author : ${author}\n * @date : ${date}\n */\n private void handleResultData(List<${entity}ListVO> list) {\n \n }\n\n @Override\n public Integer addOrUpdateData(${entity}SaveDTO params) {\n <#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n ${item.columnTypeJava} ${item.columnNameJavaLower} = params.get${item.columnNameJavaUpper}();\n </#if>\n </#list>\n \n ${entity} ${entityNameLower} = new ${entity}();\n <#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n ${entityNameLower}.set${item.columnNameJavaUpper}(${item.columnNameJavaLower});\n </#if>\n </#list>\n \n if (${entityNameLower}Id==null) {\n ${entityNameLower}.insert();\n } else {\n ${entityNameLower}.updateById();\n }\n return ${entityNameLower}.getId();\n }\n\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-12 16:32:01', 1);
INSERT INTO `t_cg_project_template` VALUES (51, 15, 36, '${entity}Controller', '.java', 'package ${package.controller};\n\nimport java.util.List;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.validation.annotation.Validated;\nimport org.springframework.web.bind.annotation.DeleteMapping;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.ModelAttribute;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.PutMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.zhengqing.modules.common.api.BaseController;\nimport com.zhengqing.modules.common.validator.fieldrepeat.Update;\nimport com.zhengqing.modules.common.validator.repeatsubmit.NoRepeatSubmit;\nimport com.zhengqing.modules.smalltools.db.service.IStDbDataSourceService;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\n\n\n/**\n* <p> ${tableComment} 接口 </p>\n*\n* @author: ${author}\n* @description:\n* @date: ${date}\n*/\n@RestController\n@RequestMapping(\"/api/${moduleName}/${entityNameLower}\")\n@Api(tags = {\"${tableComment}接口\"})\npublic class ${entity}Controller extends BaseController {\n\n @Autowired\n private I${entity}Service ${entityNameLower}Service;\n\n @GetMapping(\"listPage\")\n @ApiOperation(\"列表分页\")\n public IPage<${entity}ListVO> listPage(@ModelAttribute ${entity}ListDTO params) {\n return ${entityNameLower}Service.listPage(params);\n }\n\n @GetMapping(\"list\")\n @ApiOperation(\"列表\")\n public List<${entity}ListVO> list(@ModelAttribute ${entity}ListDTO params) {\n return ${entityNameLower}Service.list(params);\n }\n\n @NoRepeatSubmit\n @PostMapping(\"\")\n @ApiOperation(\"新增\")\n public Integer add(@Validated @RequestBody ${entity}SaveDTO params) {\n return ${entityNameLower}Service.addOrUpdateData(params);\n }\n\n @NoRepeatSubmit\n @PutMapping(\"\")\n @ApiOperation(\"更新\")\n public Integer update(@Validated(Update.class) @RequestBody ${entity}SaveDTO params) {\n return ${entityNameLower}Service.addOrUpdateData(params);\n }\n\n @DeleteMapping(\"\")\n @ApiOperation(\"删除\")\n public void delete(@RequestParam Integer ${entityNameLower}Id) {\n ${entityNameLower}Service.removeById(${entityNameLower}Id);\n }\n\n @GetMapping(\"detail\")\n @ApiOperation(\"详情\")\n public ${entity} detail(@RequestParam Integer ${entityNameLower}Id) {\n return ${entityNameLower}Service.getById(${entityNameLower}Id);\n }\n\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-16 15:45:25', 1);
INSERT INTO `t_cg_project_template` VALUES (52, 15, 43, '${entity}ListDTO', '.java', 'package ${package.dto};\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n/**\n* <p> ${tableComment}查询参数 </p>\n*\n* @author: ${ author }\n* @description:\n* @date: ${date}\n*/\n@Data\n@Builder\n@NoArgsConstructor\n@AllArgsConstructor\n@EqualsAndHashCode(callSuper = true)\n@ApiModel(\"${tableComment}查询参数\")\npublic class ${entity}ListDTO extends BaseDTO {\n\n<#list queryColumnInfoList as item>\n @ApiModelProperty(\"${item.columnComment}\")\n private ${item.columnTypeJava} ${item.columnNameJavaLower};\n \n</#list>\n}\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-17 11:11:39', 1);
INSERT INTO `t_cg_project_template` VALUES (53, 15, 34, 'index', '.vue', '<template>\n <cus-wraper>\n <base-header>\n <#if queryColumnInfoList??>\n <#list queryColumnInfoList as item>\n <el-input v-model=\"listQuery.${item.columnNameJavaLower}\"\n placeholder=\"请输入${item.columnComment}\" style=\"width:200px\" clearable\n @clear=\"refreshTableData\"></el-input>\n </#list>\n </#if>\n <el-button v-has=\"\'query\'\" type=\"primary\" @click=\"refreshTableData\">查询</el-button>\n <template #right>\n <el-button v-has=\"\'add\'\" type=\"primary\" @click=\"handleAdd\">添加</el-button>\n </template>\n </base-header>\n\n <base-table-p ref=\"baseTable\" api=\"${vueApiName}.listPage\" :params=\"listQuery\">\n <#list columnInfoList as item>\n <#if item.columnTypeJava == \"Date\">\n <el-table-column label=\"${item.columnComment}\" align=\"center\">\n <template slot-scope=\"scope\">\n <span>{{scope.row.${item.columnNameJavaLower}|dateTimeFilter}}</span>\n </template>\n </el-table-column>\n <#else>\n <el-table-column label=\"${item.columnComment}\" prop=\"${item.columnNameJavaLower}\"\n align=\"center\"></el-table-column>\n </#if>\n </#list>\n <el-table-column align=\"center\" label=\"操作\">\n <template slot-scope=\"scope\">\n <el-button type=\"text\" @click=\"handleUpdate(scope.row)\">编辑</el-button>\n <cus-del-btn @ok=\"handleDelete(scope.row)\"></cus-del-btn>\n </template>\n </el-table-column>\n </base-table-p>\n\n <base-dialog :visible.sync=\"dialogVisible\" :title=\"titleMap[dialogStatus]\" width=\"30%\">\n <el-form ref=\"dataForm\" :model=\"form\" :rules=\"rules\" label-width=\"100px\">\n <#list columnInfoList as item>\n <el-form-item label=\"${item.columnComment}:\" prop=\"${item.columnNameJavaLower}\">\n <el-input v-model=\"form.${item.columnNameJavaLower}\"></el-input>\n </el-form-item>\n </#list>\n </el-form>\n <div slot=\"footer\">\n <el-button @click=\"dialogVisible = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\n </div>\n </base-dialog>\n </cus-wraper>\n</template>\n\n<script>\n export default {\n name: \'${entity}\',\n data() {\n return {\n dialogVisible: false,\n listQuery: {\n <#list queryColumnInfoList as item>\n ${item.columnNameJavaLower}: undefined, // ${item.columnComment}\n </#list>\n },\n form: {\n <#list columnInfoList as item>\n ${item.columnNameJavaLower}: undefined, // ${item.columnComment}\n </#list>\n },\n dialogStatus: \"\",\n titleMap: {\n add: \"添加\",\n update: \"编辑\",\n detail: \"详情\"\n },\n rules: { }\n }\n },\n created() {\n },\n methods: {\n refreshTableData() {\n this.$refs.baseTable.refresh();\n },\n handleAdd() {\n this.form = Object.assign({}, {});\n this.dialogStatus = \"add\";\n this.dialogVisible = true;\n },\n handleUpdate(row) {\n this.form = Object.assign({}, row);\n this.dialogStatus = \"update\";\n this.dialogVisible = true;\n },\n async handleDelete(row) {\n let res = await this.$api.${vueApiName}.delete(row.id);\n this.refreshTableData();\n this.submitOk(res.message);\n },\n submitForm() {\n this.$refs.dataForm.validate(async valid => {\n if (valid) {\n let res = await this.$api.${vueApiName}[this.form.id ? \"update\" : \"add\"](this.form);\n this.refreshTableData();\n this.submitOk(res.message);\n this.dialogVisible = false;\n }\n });\n }\n }\n }\n</script>\n<style scoped></style>\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-10 16:58:39', 1);
INSERT INTO `t_cg_project_template` VALUES (54, 15, 35, '${entity}', '.js', 'import request from \'@/utils/request\';\n\nconst BASE_API = \"/api/${moduleName}/${entityNameLower}\";\n\nexport default {\n listPage(query, headers) {\n return request({\n url: BASE_API + \"/listPage\",\n method: \"get\",\n params: query,\n headers\n });\n },\n add(form) {\n return request({\n url: BASE_API,\n method: \"post\",\n data: form\n });\n },\n update(form) {\n return request({\n url: BASE_API,\n method: \"put\",\n data: form\n });\n },\n delete(id) {\n return request({\n url: BASE_API,\n method: \"delete\",\n params: { id: id }\n });\n }\n};\n', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-10 16:58:30', 1);
INSERT INTO `t_cg_project_template` VALUES (56, 15, 33, '${entity}ListVO', '.java', 'package ${ package.vo };\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\n/**\n * <p>${tableComment}展示视图</p>\n *\n * @author: ${ author }\n * @description:\n * @date: ${date}\n */\n@Data\n@ApiModel(\"${tableComment}展示视图\")\npublic class ${entity}ListVO {\n\n<#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n @ApiModelProperty(\"${item.columnComment}\")\n private ${item.columnTypeJava} ${item.columnNameJavaLower};\n \n </#if> \n</#list>\n}', 0, 1, 1, '2020-08-22 15:01:51', 1, '2020-12-16 16:52:29', 1);
INSERT INTO `t_cg_project_template` VALUES (57, 1, 22, '${entity}ListVO', '.java', 'package ${ package.vo };\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\n/**\n * <p>${tableComment}展示视图</p>\n *\n * @author: ${ author }\n * @description:\n * @date: ${date}\n */\n@Data\n@ApiModel(\"${tableComment}展示视图\")\npublic class ${entity}ListVO {\n\n<#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n @ApiModelProperty(\"${item.columnComment}\")\n private ${item.columnTypeJava} ${item.columnNameJavaLower};\n \n </#if> \n</#list>\n}', 0, 1, 1, '2020-09-01 21:59:47', 1, '2020-12-12 16:33:01', 1);
INSERT INTO `t_cg_project_template` VALUES (98, 1, 3, '${entity}', '.java', 'package ${package.Entity};\n\n#foreach($pkg in ${table.importPackages})\nimport ${pkg};\n#end\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\n/**\n * <p> ${table.comment} </p>\n *\n * @author: ${author}\n * @date: ${date}\n */\n#if(${table.convert})\n@Data\n@ApiModel(description = \"${table.comment}\")\n@TableName(\"${table.name}\")\n#end\n#if(${superEntityClass})\npublic class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end {\n#elseif(${activeRecord})\npublic class ${entity} extends Model<${entity}> {\n#else\npublic class ${entity} implements Serializable {\n#end\n\n private static final long serialVersionUID = 1L;\n\n#foreach($field in ${table.fields})\n#if(${field.keyFlag})\n#set($keyPropertyName=${field.propertyName})\n#end\n#if(\"$!field.comment\" != \"\")\n /**\n * ${field.comment}\n */\n @ApiModelProperty(value = \"${field.comment}\")\n#end\n#if(${field.keyFlag})\n @TableId(value=\"${field.name}\", type= IdType.AUTO)\n#else\n @TableField(\"${field.name}\")\n#end\n private ${field.propertyType} ${field.propertyName};\n#end\n\n#if(${entityColumnConstant})\n#foreach($field in ${table.fields})\n public static final String ${field.name.toUpperCase()} = \"${field.name}\";\n\n#end\n#end\n#if(${activeRecord})\n @Override\n protected Serializable pkVal() {\n#if(${keyPropertyName})\n return this.${keyPropertyName};\n#else\n return this.id;\n#end\n }\n\n#end\n}\n', 1, 1, 1, '2020-11-15 15:12:26', 1, '2020-11-15 15:12:26', 1);
INSERT INTO `t_cg_project_template` VALUES (99, 1, 7, '${entity}Mapper', '.xml', '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"${package.Mapper}.${table.mapperName}\">\n\n#if(${enableCache})\n <!-- 开启二级缓存 -->\n <cache type=\"org.mybatis.caches.ehcache.LoggingEhcache\"/>\n\n#end\n#if(${baseResultMap})\n <!-- 通用查询映射结果 -->\n <resultMap id=\"BaseResultMap\" type=\"${package.Entity}.${entity}\">\n#foreach($field in ${table.fields})\n#if(${field.keyFlag})##生成主键排在第一位\n <id column=\"${field.name}\" property=\"${field.propertyName}\" />\n#end\n#end\n#foreach($field in ${table.fields})\n#if(!${field.keyFlag})##生成普通字段\n <result column=\"${field.name}\" property=\"${field.propertyName}\" />\n#end\n#end\n </resultMap>\n\n#end\n#if(${baseColumnList})\n <!-- 通用查询结果列 -->\n <sql id=\"Base_Column_List\">\n ${table.fieldNames}\n </sql>\n\n#end\n\n <select id=\"select${entity}s\" resultMap=\"BaseResultMap\">\n SELECT\n *\n FROM ${table.name}\n WHERE\n 1 = 1\n <if test=\"filter.id!=null and filter.id!=\'\'\">\n AND ${entity}_ID= #{filter.id}\n </if>\n ORDER BY ${entity}_ID DESC\n </select>\n\n</mapper>\n', 1, 1, 1, '2020-11-15 15:12:26', 1, '2020-11-15 15:12:26', 1);
INSERT INTO `t_cg_project_template` VALUES (100, 1, 6, '${entity}Mapper', '.java', 'package ${package.Mapper};\n\nimport ${package.Entity}.${entity};\nimport ${package.QueryPara}.${formQueryPara};\nimport ${superMapperClassPackage};\nimport com.baomidou.mybatisplus.plugins.pagination.Pagination;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\n/**\n * <p> ${table.comment} Mapper 接口 </p>\n *\n * @author : zhengqing\n * @date : ${date}\n */\npublic interface ${table.mapperName} extends ${superMapperClass}<${entity}> {\n\n /**\n * 列表分页\n *\n * @param page\n * @param filter\n * @return\n */\n List<${entity}> select${entity}s(Pagination page, @Param(\"filter\") ${formQueryPara} filter);\n\n /**\n * 列表\n *\n * @param filter\n * @return\n */\n List<${entity}> select${entity}s(@Param(\"filter\") ${formQueryPara} filter);\n}', 1, 1, 1, '2020-11-15 15:12:26', 1, '2020-11-15 15:12:26', 1);
INSERT INTO `t_cg_project_template` VALUES (101, 1, 4, 'I${entity}Service', '.java', 'package ${package.Service};\n\nimport com.baomidou.mybatisplus.plugins.Page;\nimport ${superServiceClassPackage};\nimport ${package.Entity}.${entity};\nimport ${package.QueryPara}.${formQueryPara};\n\nimport java.util.List;\n\n/**\n * <p> ${table.comment} 服务类 </p>\n *\n * @author: ${author}\n * @date: ${date}\n */\npublic interface ${table.serviceName} extends ${superServiceClass}<${entity}> {\n\n /**\n * ${table.comment}列表分页\n *\n * @param page\n * @param filter\n * @return\n */\n void listPage(Page<${entity}> page, ${formQueryPara} filter);\n\n /**\n * 保存${table.comment}\n *\n * @param input\n */\n Integer save(${entity} input);\n\n /**\n * ${table.comment}列表\n *\n * @param filter\n * @return\n */\n List<${entity}> list(${formQueryPara} filter);\n}\n', 1, 1, 1, '2020-11-15 15:12:26', 1, '2020-11-15 15:12:26', 1);
INSERT INTO `t_cg_project_template` VALUES (102, 1, 5, '${entity}ServiceImpl', '.java', 'package ${package.ServiceImpl};\n\nimport ${package.Entity}.${entity};\nimport ${package.QueryPara}.${formQueryPara};\nimport ${package.Mapper}.${table.mapperName};\nimport ${package.Service}.${table.serviceName};\nimport ${superServiceImplClassPackage};\nimport com.baomidou.mybatisplus.plugins.Page;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.List;\n\n/**\n * <p> ${table.comment} 服务实现类 </p>\n *\n * @author: ${author}\n * @date: ${date}\n */\n@Service\n@Transactional\npublic class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} {\n\n @Autowired\n ${table.mapperName} ${entityPropertyName}Mapper;\n\n @Override\n public void listPage(Page<${entity}> page, ${formQueryPara} filter) {\n page.setRecords(${entityPropertyName}Mapper.select${entity}s(page, filter));\n }\n\n @Override\n public List<${entity}> list(${formQueryPara} filter) {\n return ${entityPropertyName}Mapper.select${entity}s(filter);\n }\n\n @Override\n public Integer save(${entity} para) {\n if (para.get${entity}Id()!=null) {\n ${entityPropertyName}Mapper.updateById(para);\n } else {\n ${entityPropertyName}Mapper.insert(para);\n }\n return para.get${entity}Id();\n }\n}\n', 1, 1, 1, '2020-11-15 15:12:26', 1, '2020-11-15 15:12:26', 1);
INSERT INTO `t_cg_project_template` VALUES (103, 1, 18, '${entity}Controller', '.java', 'package ${package.Controller};\n\nimport com.zhengqing.modules.common.api.BaseController;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\nimport com.baomidou.mybatisplus.plugins.Page;\nimport com.zhengqing.modules.common.dto.output.ApiResult;\nimport ${package.Entity}.${entity};\nimport ${package.QueryPara}.${formQueryPara};\nimport ${package.Service}.${table.serviceName};\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\n\n\n/**\n * <p> ${table.comment} 接口 </p>\n *\n * @author: zhengqing\n * @description:\n * @date: ${date}\n *\n */\n@RestController\n@RequestMapping(\"/api#if(${package.ModuleName})/${package.ModuleName}#end/${table.entityPath}\")\n@Api(description = \"${table.comment}接口\")\npublic class ${table.controllerName} extends BaseController {\n\n @Autowired\n ${table.serviceName} ${entityPropertyName}Service;\n\n @PostMapping(value = \"/listPage\", produces = \"application/json;charset=utf-8\")\n @ApiOperation(value = \"获取${table.comment}列表分页\", httpMethod = \"POST\", response = ApiResult.class)\n public ApiResult listPage(@RequestBody ${formQueryPara} filter) {\n Page<${entity}> page = new Page<>(filter.getPage(),filter.getLimit());\n ${entityPropertyName}Service.listPage(page, filter);\n return ApiResult.ok(\"获取${table.comment}列表分页成功\", page);\n }\n\n @PostMapping(value = \"/list\", produces = \"application/json;charset=utf-8\")\n @ApiOperation(value = \"获取${table.comment}列表\", httpMethod = \"POST\", response = ApiResult.class)\n public ApiResult list(@RequestBody ${formQueryPara} filter) {\n List<${entity}> result = ${entityPropertyName}Service.list(filter);\n return ApiResult.ok(\"获取${table.comment}列表成功\",result);\n }\n\n @PostMapping(value = \"/save\", produces = \"application/json;charset=utf-8\")\n @ApiOperation(value = \"保存${table.comment}\", httpMethod = \"POST\", response = ApiResult.class)\n public ApiResult save(@RequestBody ${entity} input) {\n Integer id = ${entityPropertyName}Service.save(input);\n return ApiResult.ok(\"保存${table.comment}成功\", id);\n }\n\n @PostMapping(value = \"/delete\", produces = \"application/json;charset=utf-8\")\n @ApiOperation(value = \"删除${table.comment}\", httpMethod = \"POST\", response = ApiResult.class)\n public ApiResult delete(@RequestBody ${formQueryPara} input) {\n ${entityPropertyName}Service.deleteById(input.getId());\n return ApiResult.ok(\"删除${table.comment}成功\");\n }\n\n @PostMapping(value = \"/getById\", produces = \"application/json;charset=utf-8\")\n @ApiOperation(value = \"获取${table.comment}信息\", httpMethod = \"POST\", response = ApiResult.class)\n public ApiResult getById(@RequestBody ${formQueryPara} input) {\n ${entity} entity = ${entityPropertyName}Service.selectById(input.getId());\n return ApiResult.ok(\"获取${table.comment}信息成功\", entity);\n }\n\n}', 1, 1, 1, '2020-11-15 15:12:26', 1, '2020-11-15 15:12:26', 1);
INSERT INTO `t_cg_project_template` VALUES (104, 1, 20, 'index', '.vue', '<template>\n <div class=\"app-container\">\n <cus-wraper>\n <cus-filter-wraper>\n #if(${queryFields})\n #foreach($field in ${queryFields})\n <el-input v-model=\"listQuery.${field.propertyName}\" placeholder=\"请输入${field.comment}\" style=\"width:200px\" clearable></el-input>\n #end\n <el-button type=\"primary\" @click=\"getList\" icon=\"el-icon-search\" v-waves>查询</el-button>\n <el-button type=\"primary\" @click=\"handleCreate\" icon=\"el-icon-plus\" v-waves>添加</el-button> \n #end\n </cus-filter-wraper>\n <div class=\"table-container\">\n <el-table v-loading=\"listLoading\" :data=\"list\" size=\"mini\" element-loading-text=\"Loading\" fit border highlight-current-row>\n #foreach($field in ${table.fields})\n #if(${field.propertyType.equals(\"Date\")})\n <el-table-column label=\"${field.comment}\" align=\"center\">\n <template slot-scope=\"scope\">\n <span>{{scope.row.${field.propertyName}|dateTimeFilter}}</span>\n </template>\n </el-table-column>\n #else\n <el-table-column label=\"${field.comment}\" prop=\"${field.propertyName}\" align=\"center\"></el-table-column>\n #end\n #end\n <el-table-column align=\"center\" label=\"操作\">\n <template slot-scope=\"scope\">\n <el-button size=\"mini\" type=\"primary\" @click=\"handleUpdate(scope.row)\" icon=\"el-icon-edit\" plain v-waves>编辑</el-button>\n <cus-del-btn @ok=\"handleDelete(scope.row)\"></cus-del-btn>\n </template>\n </el-table-column>\n </el-table>\n <!-- 分页 -->\n <cus-pagination v-show=\"total>0\" :total=\"total\" :page.sync=\"listQuery.page\" :limit.sync=\"listQuery.limit\" @pagination=\"getList\"/>\n </div>\n\n <el-dialog :title=\"titleMap[dialogStatus]\" :visible.sync=\"dialogVisible\" width=\"40%\" @close=\"handleDialogClose\">\n <el-form ref=\"dataForm\" :model=\"form\" :rules=\"rules\" label-width=\"100px\" class=\"demo-ruleForm\">\n #foreach($field in ${table.fields})\n <el-form-item label=\"${field.comment}:\" prop=\"${field.propertyName}\">\n <el-input v-model=\"form.${field.propertyName}\"></el-input>\n </el-form-item>\n #end\n </el-form>\n <span slot=\"footer\" class=\"dialog-footer\">\n <el-button @click=\"dialogVisible = false\" v-waves>取 消</el-button>\n <el-button type=\"primary\" @click=\"submitForm\" v-waves>确 定</el-button>\n </span>\n </el-dialog>\n </cus-wraper>\n </div>\n</template>\n\n<script>\n import { get${entity}Page, save${entity}, delete${entity} } from \"@/api/${package.ModuleName}/${entityPropertyName}\";\n\nexport default {\n data() {\n return {\n dialogVisible: false,\n list: [],\n listLoading: true,\n total: 0,\n listQuery: {\n page: 1,\n limit: 10,\n #if(${queryFields})\n #foreach($field in ${queryFields})\n ${field.propertyName}:undefined,\n #end\n #end\n },\n input: \'\',\n form: {\n #foreach($field in ${table.fields})\n ${field.propertyName}: undefined, //${field.comment}\n #end\n },\n dialogStatus: \"\",\n titleMap: {\n update: \"编辑\",\n create: \"创建\"\n },\n rules: {\n name: [\n { required: true, message: \'请输入项目名称\', trigger: \'blur\' }\n ]\n }\n }\n },\n created() {\n this.getList();\n },\n methods: {\n getList() {\n this.listLoading = true;\n get${entity}Page(this.listQuery).then(response => {\n this.list = response.data.records;\n this.total = response.data.total;\n this.listLoading = false;\n });\n },\n handleCreate() {\n this.resetForm();\n this.dialogStatus = \"create\";\n this.dialogVisible = true;\n },\n handleUpdate(row) {\n this.form = Object.assign({}, row);\n this.dialogStatus = \"update\";\n this.dialogVisible = true;\n },\n handleDelete(row) {\n #foreach($field in ${table.fields})\n #if(${field.keyFlag})\n let id = row.${field.propertyName};\n #end\n #end\n delete${entity}(id).then(response => {\n if (response.code == 200) {\n this.getList();\n this.submitOk(response.message);\n } else {\n this.submitFail(response.message);\n }\n });\n },\n submitForm() {\n this.#[[$refs]]#.[\'dataForm\'].validate(valid => {\n if (valid) {\n save${entity}(this.form).then(response => {\n if (response.code == 200) {\n this.getList();\n this.submitOk(response.message);\n this.dialogVisible = false;\n } else {\n this.submitFail(response.message);\n }\n }).catch(err => { console.log(err); });\n }\n });\n },\n resetForm() {\n this.form = {\n #foreach($field in ${table.fields})\n ${field.propertyName}: undefined, //${field.comment}\n #end\n };\n },\n // 监听dialog关闭时的处理事件\n handleDialogClose(){\n if(this.$refs[\'dataForm\']){\n this.$refs[\'dataForm\'].clearValidate(); // 清除整个表单的校验\n }\n }\n }\n}\n</script>', 1, 1, 1, '2020-11-15 15:12:26', 1, '2020-11-15 15:12:26', 1);
INSERT INTO `t_cg_project_template` VALUES (105, 1, 19, '${entity}', '.js', 'import request from \'@/utils/request\';\n\nexport function get${entity}Page(query) {\n return request({\n url: \'/api/${package.ModuleName}/${entityPropertyName}/listPage\',\n method: \'post\',\n data: query\n });\n}\n\nexport function save${entity}(form) {\n return request({\n url: \'/api/${package.ModuleName}/${entityPropertyName}/save\',\n method: \'post\',\n data: form\n });\n}\n\nexport function delete${entity}(id) {\n return request({\n url: \'/api/${package.ModuleName}/${entityPropertyName}/delete\',\n method: \'post\',\n data: { \'id\': id }\n });\n}\n\nexport function get${entity}ById(id) {\n return request({\n url: \'/api/${package.ModuleName}/${entityPropertyName}/getById\',\n method: \'post\',\n data: { \'id\': id }\n });\n}', 1, 1, 1, '2020-11-15 15:12:26', 1, '2020-11-15 15:12:26', 1);
INSERT INTO `t_cg_project_template` VALUES (106, 20, 65, '${entity}VO', '.java', 'package ${ package.vo };\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\n/**\n * <p>${tableComment}展示视图</p>\n *\n * @author: ${ author }\n * @description:\n * @date: ${date}\n */\n@Data\n@ApiModel(\"${tableComment}展示视图\")\npublic class ${entity}VO {\n\n @ApiModelProperty(value = \"id\")\n private Integer id;\n\n}', 0, 1, 1, '2020-11-15 18:34:21', 1, '2020-11-16 22:11:47', 1);
INSERT INTO `t_cg_project_template` VALUES (108, 20, 55, '${entity}', '.js', 'import request from \'@/utils/request\';\n\nconst BASE_API = \"/api/${moduleName}/${entityNameLower}\";\n\nexport default {\n listPage(query, headers) {\n return request({\n url: BASE_API + \"/listPage\",\n method: \"get\",\n params: query,\n headers\n });\n },\n add(form) {\n return request({\n url: BASE_API,\n method: \"post\",\n data: form\n });\n },\n update(form) {\n return request({\n url: BASE_API,\n method: \"put\",\n data: form\n });\n },\n delete(id) {\n return request({\n url: BASE_API,\n method: \"delete\",\n params: { id: id }\n });\n }\n};\n', 0, 1, 1, '2020-11-16 21:31:41', 1, '2020-11-16 21:36:46', 1);
INSERT INTO `t_cg_project_template` VALUES (109, 20, 56, 'index', '.vue', '<template>\n <cus-wraper>\n <base-header>\n <#if queryColumnInfoList??>\n <#list queryColumnInfoList as item>\n <el-input v-model=\"listQuery.${item.columnNameJavaLower}\"\n placeholder=\"请输入${item.columnComment}\" style=\"width:200px\" clearable\n @clear=\"refreshTableData\"></el-input>\n </#list>\n </#if>\n <el-button v-has=\"\'query\'\" type=\"primary\" @click=\"refreshTableData\">查询</el-button>\n <template #right>\n <el-button v-has=\"\'add\'\" type=\"primary\" @click=\"handleAdd\">添加</el-button>\n </template>\n </base-header>\n\n <base-table-p ref=\"baseTable\" api=\"${vueApiName}.listPage\" :params=\"listQuery\">\n <#list columnInfoList as item>\n <#if item.columnTypeJava == \"Date\">\n <el-table-column label=\"${item.columnComment}\" align=\"center\">\n <template slot-scope=\"scope\">\n <span>{{scope.row.${item.columnNameJavaLower}|dateTimeFilter}}</span>\n </template>\n </el-table-column>\n <#else>\n <el-table-column label=\"${item.columnComment}\" prop=\"${item.columnNameJavaLower}\"\n align=\"center\"></el-table-column>\n </#if>\n </#list>\n <el-table-column align=\"center\" label=\"操作\">\n <template slot-scope=\"scope\">\n <el-button type=\"text\" @click=\"handleUpdate(scope.row)\">编辑</el-button>\n <cus-del-btn @ok=\"handleDelete(scope.row)\"></cus-del-btn>\n </template>\n </el-table-column>\n </base-table-p>\n\n <base-dialog :visible.sync=\"dialogVisible\" :title=\"titleMap[dialogStatus]\" width=\"30%\">\n <el-form ref=\"dataForm\" :model=\"form\" :rules=\"rules\" label-width=\"100px\">\n <#list columnInfoList as item>\n <el-form-item label=\"${item.columnComment}:\" prop=\"${item.columnNameJavaLower}\">\n <el-input v-model=\"form.${item.columnNameJavaLower}\"></el-input>\n </el-form-item>\n </#list>\n </el-form>\n <div slot=\"footer\">\n <el-button @click=\"dialogVisible = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\n </div>\n </base-dialog>\n </cus-wraper>\n</template>\n\n<script>\n export default {\n name: \'${entity}\',\n data() {\n return {\n dialogVisible: false,\n listQuery: {\n <#list queryColumnInfoList as item>\n ${item.columnNameJavaLower}: undefined, // ${item.columnComment}\n </#list>\n },\n form: {\n <#list columnInfoList as item>\n ${item.columnNameJavaLower}: undefined, // ${item.columnComment}\n </#list>\n },\n dialogStatus: \"\",\n titleMap: {\n add: \"添加\",\n update: \"编辑\",\n detail: \"详情\"\n },\n rules: { }\n }\n },\n created() {\n },\n methods: {\n refreshTableData() {\n this.$refs.baseTable.refresh();\n },\n handleAdd() {\n this.form = Object.assign({}, {});\n this.dialogStatus = \"add\";\n this.dialogVisible = true;\n },\n handleUpdate(row) {\n this.form = Object.assign({}, row);\n this.dialogStatus = \"update\";\n this.dialogVisible = true;\n },\n async handleDelete(row) {\n let res = await this.$api.${vueApiName}.delete(row.id);\n this.refreshTableData();\n this.submitOk(res.message);\n },\n submitForm() {\n this.$refs.dataForm.validate(async valid => {\n if (valid) {\n let res = await this.$api.${vueApiName}[this.form.id ? \"update\" : \"add\"](this.form);\n this.refreshTableData();\n this.submitOk(res.message);\n this.dialogVisible = false;\n }\n });\n }\n }\n }\n</script>\n<style scoped></style>\n', 0, 1, 1, '2020-11-16 22:12:28', 1, '2020-11-16 23:02:39', 1);
INSERT INTO `t_cg_project_template` VALUES (110, 20, 66, '${entity}DTO', '.java', 'package ${package.dto};\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n/**\n* <p> ${tableComment}查询参数 </p>\n*\n* @author: ${ author }\n* @description:\n* @date: ${date}\n*/\n@Data\n@Builder\n@NoArgsConstructor\n@AllArgsConstructor\n@ApiModel(\"${tableComment}查询参数\")\npublic class ${entity}DTO {\n\n @ApiModelProperty(value = \"id\")\n private Integer id;\n\n}\n', 0, 1, 1, '2020-11-16 23:03:07', 1, '2020-11-16 23:04:49', 1);
INSERT INTO `t_cg_project_template` VALUES (111, 20, 58, '${entity}Controller', '.java', 'package ${package.api};\n\nimport java.util.List;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.validation.annotation.Validated;\nimport org.springframework.web.bind.annotation.DeleteMapping;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.ModelAttribute;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.PutMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.zhengqing.modules.common.api.BaseController;\nimport com.zhengqing.modules.common.validator.fieldrepeat.Update;\nimport com.zhengqing.modules.common.validator.repeatsubmit.NoRepeatSubmit;\nimport com.zhengqing.modules.smalltools.db.service.IStDbDataSourceService;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\n\n\n/**\n* <p> ${tableComment} 接口 </p>\n*\n* @author: ${author}\n* @description:\n* @date: ${date}\n*/\n@RestController\n@RequestMapping(\"/api/${moduleName}/${entityNameLower}\")\n@Api(tags = {\"${tableComment}接口\"})\npublic class ${entity}Controller extends BaseController {\n\n @Autowired\n private I${entity}Service ${entityNameLower}Service;\n\n @GetMapping(\"listPage\")\n @ApiOperation(\"列表分页\")\n public IPage<${entity}ListVO> listPage(@ModelAttribute ${entity}ListDTO params) {\n return ${entityNameLower}Service.listPage(params);\n }\n\n @GetMapping(\"list\")\n @ApiOperation(\"列表\")\n public List<${entity}ListVO> list(@ModelAttribute ${entity}ListDTO params) {\n return ${entityNameLower}Service.list(params);\n }\n\n @NoRepeatSubmit\n @PostMapping(\"\")\n @ApiOperation(\"新增\")\n public Integer add(@Validated @RequestBody ${entity}SaveDTO params) {\n return ${entityNameLower}Service.addOrUpdateData(params);\n }\n\n @NoRepeatSubmit\n @PutMapping(\"\")\n @ApiOperation(\"更新\")\n public Integer update(@Validated(Update.class) @RequestBody ${entity}SaveDTO params) {\n return ${entityNameLower}Service.addOrUpdateData(params);\n }\n\n @DeleteMapping(\"\")\n @ApiOperation(\"删除\")\n public void delete(@RequestParam Integer ${entityNameLower}Id) {\n ${entityNameLower}Service.removeById(${entityNameLower}Id);\n }\n\n @GetMapping(\"detail\")\n @ApiOperation(\"详情\")\n public ${entity} detail(@RequestParam Integer ${entityNameLower}Id) {\n return ${entityNameLower}Service.getById(${entityNameLower}Id);\n }\n\n}\n', 0, 1, 1, '2020-11-16 23:05:58', 1, '2020-11-16 23:13:51', 1);
INSERT INTO `t_cg_project_template` VALUES (112, 20, 61, '${entity}ServiceImpl', '.java', 'package ${package.impl};\n\nimport java.util.List;\nimport org.springframework.util.CollectionUtils;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\nimport com.zhengqing.utils.MyBeanUtils;\n\nimport lombok.extern.slf4j.Slf4j;\n\n/**\n* <p> ${tableComment} 服务实现类 </p>\n*\n* @author: ${author}\n* @description:\n* @date: ${date}\n*/\n@Slf4j\n@Service\n@Transactional(rollbackFor = Exception.class)\npublic class ${entity}ServiceImpl extends ServiceImpl<${entity}Mapper, ${entity}> implements I${entity}Service {\n\n @Autowired\n private ${entity}Mapper ${entityNameLower}Mapper;\n\n @Override\n public IPage<${entity}ListVO> listPage(${entity}ListDTO params) {\n IPage<${entity}ListVO> result = ${entityNameLower}Mapper.selectDataList(new Page<>(), params);\n List<${entity}ListVO> list = result.getRecords();\n handleResultData(list);\n return result;\n }\n\n @Override\n public List<${entity}ListVO> list(${entity}ListDTO params) {\n List<${entity}ListVO> list = ${entityNameLower}Mapper.selectDataList(params);\n handleResultData(list);\n return list;\n }\n\n /**\n * 处理数据\n *\n * @param list: 数据\n * @return: void\n * @author : ${author}\n * @date : ${date}\n */\n private void handleResultData(List<${entity}ListVO> list) {\n if (!CollectionUtils.isEmpty(list)) {\n\n }\n }\n\n @Override\n public Integer addOrUpdateData(${entity}SaveDTO params) {\n Integer ${entityNameLower}Id = params.getId();\n ${entity} ${entityNameLower} = MyBeanUtils.copyProperties(params, ${entity}.class);\n if (${entityNameLower}Id==null) {\n ${entityNameLower}.insert();\n } else {\n ${entityNameLower}.updateById();\n }\n return ${entityNameLower}.getId();\n }\n\n}\n', 0, 1, 1, '2020-11-16 23:14:39', 1, '2020-11-16 23:21:57', 1);
INSERT INTO `t_cg_project_template` VALUES (113, 20, 62, 'I${entity}Service', '.java', 'package ${package.service};\n\nimport java.util.List;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.service.IService;\n\n/**\n* <p> ${tableComment} 服务类 </p>\n*\n* @author: ${author}\n* @description:\n* @date: ${date}\n*/\npublic interface ${entity}Service extends IService<${entity}> {\n\n /**\n * 列表分页\n *\n * @param params: 查询参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n IPage<${entity}ListVO> listPage(${entity}ListDTO params);\n\n /**\n * 列表分页\n *\n * @param params: 查询参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n List<${entity}ListVO> list(${entity}ListDTO params);\n\n /**\n * 新增或更新\n *\n * @param params: 保存参数\n * @return: 主键id\n * @author : ${author}\n * @date : ${date}\n */\n Integer addOrUpdateData(${entity}SaveDTO params);\n\n}', 0, 1, 1, '2020-11-16 23:22:12', 1, '2020-11-16 23:24:36', 1);
INSERT INTO `t_cg_project_template` VALUES (114, 20, 60, '${entity}Mapper', '.java', 'package ${package.mapper};\n\nimport java.util.List;\n\nimport org.apache.ibatis.annotations.Param;\n\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\n\n/**\n* <p> ${tableComment} Mapper 接口 </p>\n*\n* @author : ${author}\n* @description:\n* @date : ${date}\n*/\npublic interface ${entity}Mapper extends BaseMapper<${entity}> {\n\n /**\n * 列表分页\n *\n * @param page: 分页数据\n * @param filter: 查询过滤参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n IPage<${entity}ListVO> selectDataList(IPage page, @Param(\"filter\") ${entity}ListDTO filter);\n\n /**\n * 列表\n *\n * @param filter: 查询过滤参数\n * @return: 查询结果\n * @author : ${author}\n * @date : ${date}\n */\n List<${entity}ListVO> selectDataList(@Param(\"filter\") ${entity}ListDTO filter);\n\n}\n', 0, 1, 1, '2020-11-16 23:27:43', 1, '2020-11-16 23:30:25', 1);
INSERT INTO `t_cg_project_template` VALUES (115, 20, 59, '${entity}Mapper', '.xml', '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"${package.mapper}.${entity}Mapper\">\n\n\n <select id=\"selectDataList\" resultType=\"${package.vo}.${entity}ListVO\">\n SELECT\n <#list columnInfoList as item>\n xxx.${item.columnNameDb} ${item.columnNameJavaLower},\n </#list>\n FROM ${tableName} xxx\n <where>\n AND xxx.is_valid = 1\n <if test=\"filter.name!=null and filter.name!=\'\'\">\n AND xxx.name LIKE CONCAT( \'%\', ${r\"#\"}{filter.name} , \'%\' )\n </if>\n </where>\n ORDER BY xxx.update_time DESC\n </select>\n\n</mapper>\n', 0, 1, 1, '2020-11-16 23:31:24', 1, '2020-11-17 00:10:11', 1);
INSERT INTO `t_cg_project_template` VALUES (116, 20, 63, '${entity}', '.java', 'package ${package.entity};\n\nimport java.util.Date;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.zhengqing.modules.common.entity.BaseEntity;\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport lombok.NoArgsConstructor;\n\n/**\n* <p> ${tableComment} </p>\n*\n* @author: ${author}\n* @description :\n* @date: ${date}\n*/\n@Data\n@EqualsAndHashCode(callSuper = true)\n@Builder\n@AllArgsConstructor\n@NoArgsConstructor\n@TableName(\"${tableName}\")\n@ApiModel(\"${tableComment}\")\npublic class ${entity} extends BaseEntity<${entity}> {\n\n <#list columnInfoList as item>\n @ApiModelProperty(value = \"${item.columnComment}\")\n <#if item.ifPrimaryKey>\n @TableId(value = \"${item.columnNameDb}\", type = IdType.AUTO)\n </#if>\n private ${item.columnTypeJava} ${item.columnNameJavaLower};\n\n </#list>\n\n}\n', 0, 1, 1, '2020-11-16 23:36:53', 1, '2020-11-17 00:13:25', 1);
INSERT INTO `t_cg_project_template` VALUES (117, 1, 21, '${entity}SaveDTO', '.java', 'package ${package.dto};\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n/**\n* <p> ${tableComment}保存提交参数 </p>\n*\n* @author: ${ author }\n* @description:\n* @date: ${date}\n*/\n@Data\n@Builder\n@NoArgsConstructor\n@AllArgsConstructor\n@EqualsAndHashCode(callSuper = true)\n@ApiModel(\"${tableComment}保存提交参数\")\npublic class ${entity}SaveDTO extends BaseDTO {\n\n<#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n @ApiModelProperty(\"${item.columnComment}\")\n <#if item.ifPrimaryKey>\n @NotNull(groups = {Update.class}, message = \"${item.columnComment}不能为空!\")\n </#if>\n private ${item.columnTypeJava} ${item.columnNameJavaLower};\n \n </#if> \n</#list>\n\n}\n', 0, 1, 1, '2020-12-12 14:50:34', 1, '2020-12-17 11:11:57', 1);
INSERT INTO `t_cg_project_template` VALUES (118, 15, 43, '${entity}SaveDTO', '.java', 'package ${package.dto};\n\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.AllArgsConstructor;\nimport lombok.Builder;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n/**\n* <p> ${tableComment}保存提交参数 </p>\n*\n* @author: ${ author }\n* @description:\n* @date: ${date}\n*/\n@Data\n@Builder\n@NoArgsConstructor\n@AllArgsConstructor\n@EqualsAndHashCode(callSuper = true)\n@ApiModel(\"${tableComment}保存提交参数\")\npublic class ${entity}SaveDTO extends BaseDTO {\n\n<#list columnInfoList as item>\n <#if item.columnNameDb != \"create_by\" && item.columnNameDb != \"create_time\" && item.columnNameDb != \"update_by\" && item.columnNameDb != \"update_time\" && item.columnNameDb != \"is_valid\"> \n @ApiModelProperty(\"${item.columnComment}\")\n <#if item.ifPrimaryKey>\n @NotNull(groups = {Update.class}, message = \"${item.columnComment}不能为空!\")\n </#if>\n private ${item.columnTypeJava} ${item.columnNameJavaLower};\n \n </#if> \n</#list>\n\n}\n', 0, 1, 1, '2020-12-12 15:57:12', 1, '2020-12-17 11:11:26', 1);
-- ----------------------------
-- Table structure for t_cg_project_velocity_context
-- ----------------------------
DROP TABLE IF EXISTS `t_cg_project_velocity_context`;
CREATE TABLE `t_cg_project_velocity_context` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`velocity` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '模板数据',
`context` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '内容',
`project_id` int(11) DEFAULT NULL COMMENT '所属项目',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8147 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成器 - 项目 - 模板数据源' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_cg_project_velocity_context
-- ----------------------------
INSERT INTO `t_cg_project_velocity_context` VALUES (7575, 'date', '\"2020/11/17 22:39\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7576, 'package', '{\"impl\":\"com.zhengqing.modules.service.impl\",\"xml\":\"com.zhengqing.modules.mapper.xml\",\"service\":\"com.zhengqing.modules.service\",\"vue\":\"com.zhengqing.modules.vue\",\"vo\":\"com.zhengqing.modules.model.vo\",\"js\":\"com.zhengqing.modules.js\",\"model\":\"com.zhengqing.modules.model\",\"mapper\":\"com.zhengqing.modules.mapper\",\"api\":\"com.zhengqing.modules.api\",\"dto\":\"com.zhengqing.modules.model.dto\",\"modules\":\"com.zhengqing.modules\",\"entity\":\"com.zhengqing.modules.entity\"}', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7577, 'test', '\"测试\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7578, 'author', '\"zhengqingya\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7579, 'vueApiName', '\"st_crawler_article_info\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7580, 'moduleName', '\"\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7581, 'tableComment', '\"小工具 - 爬虫 - 文章信息2221\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7582, 'columnInfoList', '[{\"columnComment\":\"主键ID\",\"columnNameDb\":\"id\",\"columnNameJavaLower\":\"id\",\"columnNameJavaUpper\":\"Id\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":true,\"ifNullAble\":false,\"ifPrimaryKey\":true},{\"columnComment\":\"网站id(关联表`t_st_crawler_website`字段`website_id`)\",\"columnNameDb\":\"website_id\",\"columnNameJavaLower\":\"websiteId\",\"columnNameJavaUpper\":\"WebsiteId\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"文章id\",\"columnNameDb\":\"article_id\",\"columnNameJavaLower\":\"articleId\",\"columnNameJavaUpper\":\"ArticleId\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"标题\",\"columnNameDb\":\"title\",\"columnNameJavaLower\":\"title\",\"columnNameJavaUpper\":\"Title\",\"columnType\":\"varchar(100)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"文章所属分类1\",\"columnNameDb\":\"category\",\"columnNameJavaLower\":\"category\",\"columnNameJavaUpper\":\"Category\",\"columnType\":\"varchar(101)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"文章内容\",\"columnNameDb\":\"content\",\"columnNameJavaLower\":\"content\",\"columnNameJavaUpper\":\"Content\",\"columnType\":\"text(0)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"发布时间\",\"columnNameDb\":\"publish_time\",\"columnNameJavaLower\":\"publishTime\",\"columnNameJavaUpper\":\"PublishTime\",\"columnType\":\"datetime(0)\",\"columnTypeJava\":\"Date\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"创建时间\",\"columnNameDb\":\"date_add\",\"columnNameJavaLower\":\"dateAdd\",\"columnNameJavaUpper\":\"DateAdd\",\"columnType\":\"datetime(0)\",\"columnTypeJava\":\"Date\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"修改时间\",\"columnNameDb\":\"date_modify\",\"columnNameJavaLower\":\"dateModify\",\"columnNameJavaUpper\":\"DateModify\",\"columnType\":\"datetime(0)\",\"columnTypeJava\":\"Date\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false}]', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7583, 'entityNameUpper', '\"StCrawlerArticleInfo\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7584, 'queryColumnInfoList', '[{\"columnComment\":\"主键ID\",\"columnNameDb\":\"id\",\"columnNameJavaLower\":\"id\",\"columnNameJavaUpper\":\"Id\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":true,\"ifNullAble\":false,\"ifPrimaryKey\":true},{\"columnComment\":\"网站id(关联表`t_st_crawler_website`字段`website_id`)\",\"columnNameDb\":\"website_id\",\"columnNameJavaLower\":\"websiteId\",\"columnNameJavaUpper\":\"WebsiteId\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false}]', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7585, 'tableName', '\"t_st_crawler_article_info\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7586, 'entityNameLower', '\"stCrawlerArticleInfo\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7587, 'hello', '\"你好\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (7588, 'entity', '\"StCrawlerArticleInfo\"', 20, 1, '2020-11-17 22:39:43', 1, '2020-11-17 22:39:43', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8102, 'date', '\"2020/12/17 16:00\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8103, 'package', '{\"impl\":\"com.rhpass.cloud.official.document.modules.receipt.service.impl\",\"controller\":\"com.rhpass.cloud.official.document.modules.receipt.controller\",\"xml\":\"com.rhpass.cloud.official.document.modules.receipt.mapper.xml\",\"service\":\"com.rhpass.cloud.official.document.modules.receipt.service\",\"vue\":\"com.rhpass.cloud.official.document.modules.receipt.vue\",\"vo\":\"com.rhpass.cloud.official.document.modules.receipt.model.vo\",\"js\":\"com.rhpass.cloud.official.document.modules.receipt.js\",\"model\":\"com.rhpass.cloud.official.document.modules.receipt.model\",\"mapper\":\"com.rhpass.cloud.official.document.modules.receipt.mapper\",\"receipt\":\"com.rhpass.cloud.official.document.modules.receipt\",\"entity\":\"com.rhpass.cloud.official.document.modules.receipt.entity\",\"dto\":\"com.rhpass.cloud.official.document.modules.receipt.model.dto\"}', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8104, 'test', '\"测试\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8105, 'author', '\"zhengqing\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8106, 'vueApiName', '\"doc_receipt_re_idea\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8107, 'moduleName', '\"receipt\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8108, 'tableComment', '\"公文管理 - 收文 - 关联处理意见\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8109, 'columnInfoList', '[{\"columnComment\":\"主键ID\",\"columnNameDb\":\"receipt_re_idea_id\",\"columnNameJavaLower\":\"receiptReIdeaId\",\"columnNameJavaUpper\":\"ReceiptReIdeaId\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":true},{\"columnComment\":\"收文id(关联表`t_doc_receipt`字段`receipt_id`)\",\"columnNameDb\":\"receipt_id\",\"columnNameJavaLower\":\"receiptId\",\"columnNameJavaUpper\":\"ReceiptId\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"用户id\",\"columnNameDb\":\"data_re_user_id\",\"columnNameJavaLower\":\"dataReUserId\",\"columnNameJavaUpper\":\"DataReUserId\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"意见\",\"columnNameDb\":\"idea\",\"columnNameJavaLower\":\"idea\",\"columnNameJavaUpper\":\"Idea\",\"columnType\":\"varchar(300)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"状态\",\"columnNameDb\":\"receipt_status\",\"columnNameJavaLower\":\"receiptStatus\",\"columnNameJavaUpper\":\"ReceiptStatus\",\"columnType\":\"tinyint(2)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"创建人\",\"columnNameDb\":\"create_by\",\"columnNameJavaLower\":\"createBy\",\"columnNameJavaUpper\":\"CreateBy\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"创建时间\",\"columnNameDb\":\"create_time\",\"columnNameJavaLower\":\"createTime\",\"columnNameJavaUpper\":\"CreateTime\",\"columnType\":\"datetime(0)\",\"columnTypeJava\":\"Date\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"修改人\",\"columnNameDb\":\"update_by\",\"columnNameJavaLower\":\"updateBy\",\"columnNameJavaUpper\":\"UpdateBy\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"修改时间\",\"columnNameDb\":\"update_time\",\"columnNameJavaLower\":\"updateTime\",\"columnNameJavaUpper\":\"UpdateTime\",\"columnType\":\"datetime(0)\",\"columnTypeJava\":\"Date\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"是否有效(1:有效 0:无效)\",\"columnNameDb\":\"is_valid\",\"columnNameJavaLower\":\"isValid\",\"columnNameJavaUpper\":\"IsValid\",\"columnType\":\"tinyint(2)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false}]', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8110, 'entityNameUpper', '\"DocReceiptReIdea\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8111, 'queryColumnInfoList', '[{\"columnComment\":\"收文id(关联表`t_doc_receipt`字段`receipt_id`)\",\"columnNameDb\":\"receipt_id\",\"columnNameJavaLower\":\"receiptId\",\"columnNameJavaUpper\":\"ReceiptId\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"用户id\",\"columnNameDb\":\"data_re_user_id\",\"columnNameJavaLower\":\"dataReUserId\",\"columnNameJavaUpper\":\"DataReUserId\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false},{\"columnComment\":\"状态\",\"columnNameDb\":\"receipt_status\",\"columnNameJavaLower\":\"receiptStatus\",\"columnNameJavaUpper\":\"ReceiptStatus\",\"columnType\":\"tinyint(2)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":false,\"ifNullAble\":false,\"ifPrimaryKey\":false}]', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8112, 'tableName', '\"t_doc_receipt_re_idea\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8113, 'entityNameLower', '\"docReceiptReIdea\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8114, 'tableNameAbbr', '\"tdrri\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8115, 'hello', '\"你好\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8116, 'entity', '\"DocReceiptReIdea\"', 15, 1, '2020-12-17 16:00:30', 1, '2020-12-17 16:00:30', 0);
INSERT INTO `t_cg_project_velocity_context` VALUES (8117, 'date', '\"2021/01/13 10:11\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8118, 'package', '{\"impl\":\"com.zhengqing.demo.service.impl\",\"service\":\"com.zhengqing.demo.service\",\"xml\":\"com.zhengqing.demo.mapper.xml\",\"vue\":\"com.zhengqing.demo.vue\",\"js\":\"com.zhengqing.demo.js\",\"vo\":\"com.zhengqing.demo.model.vo\",\"model\":\"com.zhengqing.demo.model\",\"mapper\":\"com.zhengqing.demo.mapper\",\"api\":\"com.zhengqing.demo.api\",\"demo\":\"com.zhengqing.demo\",\"entity\":\"com.zhengqing.demo.entity\",\"dto\":\"com.zhengqing.demo.model.dto\"}', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8119, 'test', '\"测试\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8120, 'author', '\"zhengqing\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8121, 'vueApiName', '\"demo\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8122, 'moduleName', '\"demo\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8123, 'tableComment', '\"测试demo\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8124, 'columnInfoList', '[{\"columnComment\":\"主键ID\",\"columnNameDb\":\"id\",\"columnNameJavaLower\":\"id\",\"columnNameJavaUpper\":\"Id\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":true,\"ifNullAble\":false,\"ifPrimaryKey\":true},{\"columnComment\":\"用户名\",\"columnNameDb\":\"username\",\"columnNameJavaLower\":\"username\",\"columnNameJavaUpper\":\"Username\",\"columnType\":\"varchar(100)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"密码\",\"columnNameDb\":\"password\",\"columnNameJavaLower\":\"password\",\"columnNameJavaUpper\":\"Password\",\"columnType\":\"varchar(200)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false}]', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8125, 'entityNameUpper', '\"Demo\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8126, 'queryColumnInfoList', '[{\"columnComment\":\"主键ID\",\"columnNameDb\":\"id\",\"columnNameJavaLower\":\"id\",\"columnNameJavaUpper\":\"Id\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":true,\"ifNullAble\":false,\"ifPrimaryKey\":true},{\"columnComment\":\"用户名\",\"columnNameDb\":\"username\",\"columnNameJavaLower\":\"username\",\"columnNameJavaUpper\":\"Username\",\"columnType\":\"varchar(100)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"密码\",\"columnNameDb\":\"password\",\"columnNameJavaLower\":\"password\",\"columnNameJavaUpper\":\"Password\",\"columnType\":\"varchar(200)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false}]', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8127, 'tableName', '\"t_demo\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8128, 'entityNameLower', '\"demo\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8129, 'tableNameAbbr', '\"td\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8130, 'hello', '\"你好\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8131, 'entity', '\"Demo\"', 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8132, 'date', '\"2021/01/17 18:57\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8133, 'package', '{\"11\":\"com.rhpass.cloud.official.document.modules.11\",\"impl\":\"com.rhpass.cloud.official.document.modules.11.service.impl\",\"controller\":\"com.rhpass.cloud.official.document.modules.11.controller\",\"xml\":\"com.rhpass.cloud.official.document.modules.11.mapper.xml\",\"service\":\"com.rhpass.cloud.official.document.modules.11.service\",\"vue\":\"com.rhpass.cloud.official.document.modules.11.vue\",\"vo\":\"com.rhpass.cloud.official.document.modules.11.model.vo\",\"js\":\"com.rhpass.cloud.official.document.modules.11.js\",\"model\":\"com.rhpass.cloud.official.document.modules.11.model\",\"mapper\":\"com.rhpass.cloud.official.document.modules.11.mapper\",\"entity\":\"com.rhpass.cloud.official.document.modules.11.entity\",\"dto\":\"com.rhpass.cloud.official.document.modules.11.model.dto\"}', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8134, 'test', '\"测试\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8135, 'author', '\"zhengqing\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8136, 'vueApiName', '\"st_crawler_website\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8137, 'moduleName', '\"11\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8138, 'tableComment', '\"小工具 - 爬虫 - 网站管理\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8139, 'columnInfoList', '[{\"columnComment\":\"主键ID\",\"columnNameDb\":\"id\",\"columnNameJavaLower\":\"id\",\"columnNameJavaUpper\":\"Id\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":true,\"ifNullAble\":false,\"ifPrimaryKey\":true},{\"columnComment\":\"名称\",\"columnNameDb\":\"name\",\"columnNameJavaLower\":\"name\",\"columnNameJavaUpper\":\"Name\",\"columnType\":\"varchar(50)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"url地址\",\"columnNameDb\":\"url\",\"columnNameJavaLower\":\"url\",\"columnNameJavaUpper\":\"Url\",\"columnType\":\"varchar(100)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"创建时间\",\"columnNameDb\":\"date_add\",\"columnNameJavaLower\":\"dateAdd\",\"columnNameJavaUpper\":\"DateAdd\",\"columnType\":\"datetime(0)\",\"columnTypeJava\":\"Date\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"修改时间\",\"columnNameDb\":\"date_modify\",\"columnNameJavaLower\":\"dateModify\",\"columnNameJavaUpper\":\"DateModify\",\"columnType\":\"datetime(0)\",\"columnTypeJava\":\"Date\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false}]', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8140, 'entityNameUpper', '\"StCrawlerWebsite\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8141, 'queryColumnInfoList', '[{\"columnComment\":\"主键ID\",\"columnNameDb\":\"id\",\"columnNameJavaLower\":\"id\",\"columnNameJavaUpper\":\"Id\",\"columnType\":\"int(11)\",\"columnTypeJava\":\"Integer\",\"ifAutoIncrement\":true,\"ifNullAble\":false,\"ifPrimaryKey\":true},{\"columnComment\":\"名称\",\"columnNameDb\":\"name\",\"columnNameJavaLower\":\"name\",\"columnNameJavaUpper\":\"Name\",\"columnType\":\"varchar(50)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"url地址\",\"columnNameDb\":\"url\",\"columnNameJavaLower\":\"url\",\"columnNameJavaUpper\":\"Url\",\"columnType\":\"varchar(100)\",\"columnTypeJava\":\"String\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"创建时间\",\"columnNameDb\":\"date_add\",\"columnNameJavaLower\":\"dateAdd\",\"columnNameJavaUpper\":\"DateAdd\",\"columnType\":\"datetime(0)\",\"columnTypeJava\":\"Date\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false},{\"columnComment\":\"修改时间\",\"columnNameDb\":\"date_modify\",\"columnNameJavaLower\":\"dateModify\",\"columnNameJavaUpper\":\"DateModify\",\"columnType\":\"datetime(0)\",\"columnTypeJava\":\"Date\",\"ifAutoIncrement\":false,\"ifNullAble\":true,\"ifPrimaryKey\":false}]', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8142, 'tableName', '\"t_st_crawler_website\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8143, 'entityNameLower', '\"stCrawlerWebsite\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8144, 'tableNameAbbr', '\"tscw\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8145, 'hello', '\"你好\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_project_velocity_context` VALUES (8146, 'entity', '\"StCrawlerWebsite\"', 15, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
-- ----------------------------
-- Table structure for t_cg_table_config
-- ----------------------------
DROP TABLE IF EXISTS `t_cg_table_config`;
CREATE TABLE `t_cg_table_config` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`project_id` int(11) NOT NULL COMMENT '项目ID',
`table_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '表名',
`query_columns` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用于检索字段',
`project_re_db_data_source_id` int(11) NOT NULL COMMENT '数据源ID',
`package_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '包名',
`module_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '模板名',
`data_type` tinyint(2) NOT NULL DEFAULT 1 COMMENT '数据类型(1:默认数据 2:测试模板生成配置数据)',
`data_re_user_id` int(11) NOT NULL COMMENT '所属用户ID',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 289 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '代码生成器 - 项目数据表配置表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_cg_table_config
-- ----------------------------
INSERT INTO `t_cg_table_config` VALUES (141, 15, 't_set_chapter', 'chapter_name,chapter_url', 4, 'com.rhpass.cloud.official.document.modules', 'set', 1, 1, 1, '2020-12-10 17:07:36', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (147, 15, 't_set_doc_code_rule', 'title,doc_type', 4, 'com.rhpass.cloud.official.document.modules', 'set', 1, 1, 1, '2020-12-11 14:26:07', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (151, 15, 't_set_template', 'template_name,template_content', 4, 'com.rhpass.cloud.official.document.modules', 'set', 1, 1, 1, '2020-12-11 17:48:54', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (263, 15, 't_set_task_config', 'name,data_type', 4, 'com.rhpass.cloud.official.document.modules', 'set', 1, 1, 1, '2020-12-14 09:28:40', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (275, 15, 't_doc_dispatch_re_user', 'dispatch_id,user_id', 4, 'com.rhpass.cloud.official.document.modules', 'dispatch', 1, 1, 1, '2020-12-15 20:13:06', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (276, 15, 't_doc_dispatch_re_idea', 'dispatch_id,dispatch_status,data_re_user_id', 4, 'com.rhpass.cloud.official.document.modules', 'dispatch', 1, 1, 1, '2020-12-15 20:45:54', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (277, 15, 't_doc_dispatch_re_seal', 'dispatch_id,seal_id', 4, 'com.rhpass.cloud.official.document.modules', 'dispatch', 1, 1, 1, '2020-12-15 21:27:56', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (279, 15, 't_set_doc_category', 'doc_type,doc_category', 4, 'com.rhpass.cloud.official.document.modules', 'set', 1, 1, 1, '2020-12-16 15:45:26', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (282, 15, 't_doc_dispatch', 'dispatch_id,dispatch_name', 4, 'com.rhpass.cloud.official.document.modules', 'dispatch', 1, 1, 1, '2020-12-16 16:52:29', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (284, 15, 't_doc_receipt', 'receipt_name,receipt_id,doc_category_id', 4, 'com.rhpass.cloud.official.document.modules', 'receipt', 1, 1, 1, '2020-12-17 11:11:19', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (285, 1, 't_bs_dict', 'id,dict_type_id,name', 1, 'com.zhengqing.modules', 'test', 1, 1, 1, '2020-12-17 11:11:53', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_table_config` VALUES (286, 15, 't_doc_receipt_re_idea', 'receipt_id,data_re_user_id,receipt_status', 4, 'com.rhpass.cloud.official.document.modules', 'receipt', 1, 1, 1, '2020-12-17 16:00:30', 1, '2021-01-17 04:57:01', 1);
INSERT INTO `t_cg_table_config` VALUES (287, 1, 't_demo', 'id,username,password', 1, 'com.zhengqing', 'demo', 2, 1, 1, '2021-01-12 20:11:33', 1, '2021-01-12 20:11:33', 1);
INSERT INTO `t_cg_table_config` VALUES (288, 15, 't_st_crawler_website', 'id,name,url,date_add,date_modify', 4, 'com.rhpass.cloud.official.document.modules', '11', 2, 1, 1, '2021-01-17 04:57:01', 1, '2021-01-17 04:57:01', 1);
-- ----------------------------
-- Table structure for t_demo
-- ----------------------------
DROP TABLE IF EXISTS `t_demo`;
CREATE TABLE `t_demo` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户名',
`password` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '密码',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '测试demo' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_demo
-- ----------------------------
INSERT INTO `t_demo` VALUES (2, 'admin', '123456', 0, '2021-01-12 21:27:31', 0, '2021-01-12 21:27:31', 1);
-- ----------------------------
-- Table structure for t_st_crawler_article_info
-- ----------------------------
DROP TABLE IF EXISTS `t_st_crawler_article_info`;
CREATE TABLE `t_st_crawler_article_info` (
`article_info_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`website_id` int(11) DEFAULT NULL COMMENT '网站id(关联表`t_st_crawler_website`字段`website_id`)',
`article_id` int(11) DEFAULT NULL COMMENT '文章id',
`title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标题',
`category` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文章所属分类',
`content` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '文章内容',
`url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文章url地址',
`publish_time` datetime(0) DEFAULT NULL COMMENT '发布时间',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`article_info_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '小工具 - 爬虫 - 文章信息' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_st_crawler_article_info
-- ----------------------------
INSERT INTO `t_st_crawler_article_info` VALUES (1, 1, 108975926, 'Deepin(6) 环境安装篇(jdk、mysql、redis、nginx、docker、nodejs等)', '-----❶、Deepin', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108883382\">Deepin(1) Hyper-V安装Deepin系统教程</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108884263\">Deepin(2) 设置屏幕分辨率</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108972834\">Deepin(3) 与windows共享文件夹</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108974092\">Deepin(4) 安装oh-my-zsh</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108975539\">Deepin(5) 开启远程服务</a></li>\n </ol> \n <h3><a id=\"__8\"></a>二、 环境安装</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 切换到root账号</span>\n<span class=\"token function\">su</span> - root\n</code></pre> \n <h4><a id=\"1JDK_15\"></a>1、安装<code>JDK</code></h4> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">apt-get</span> -y <span class=\"token function\">install</span> openjdk-8-jre-headless\n\n<span class=\"token function\">apt-get</span> -y <span class=\"token function\">install</span> openjdk-8-jdk-headless\n</code></pre> \n <h6><a id=\"_23\"></a>配置环境变量</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 查看jdk的安装目录 (我这里为: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java )</span>\nupdate-alternatives --config java\n\nvim /etc/profile\n</code></pre> \n <p>在文件最后加入以下内容:</p> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\">############################## ↓↓↓↓↓↓ set java environment ↓↓↓↓↓↓ #############################</span>\nJAVA_HOME<span class=\"token operator\">=</span>/usr/lib/jvm/java-8-openjdk-amd64\nCLASSPATH<span class=\"token operator\">=</span>.:<span class=\"token variable\">$JAVA_HOME</span>/lib/dt.jar:<span class=\"token variable\">$JAVA_HOME</span>/lib/tools.jar:<span class=\"token variable\">$JAVA_HOME</span>/jre/lib/rt.jar\nPATH<span class=\"token operator\">=</span><span class=\"token variable\">$PATH</span><span class=\"token keyword\">:</span><span class=\"token variable\">$JAVA_HOME</span>/bin\n<span class=\"token function\">export</span> JAVA_HOME CLASSPATH PATH\n<span class=\"token comment\">###############################################################################################</span>\n</code></pre> \n <h6><a id=\"_43\"></a>使配置生效</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">source</span> /etc/profile\n</code></pre> \n <h6><a id=\"java_49\"></a>查看java环境配置</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token keyword\">echo</span> <span class=\"token variable\">$JAVA_HOME</span>\n<span class=\"token keyword\">echo</span> <span class=\"token variable\">$PATH</span>\n</code></pre> \n <h6><a id=\"_56\"></a>验证</h6> \n <pre><code class=\"prism language-shell\">java\njavac\njava -version\n</code></pre> \n <h6><a id=\"JDK_64\"></a>如何卸载JDK???</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> autoremove openjdk-8*\n</code></pre> \n <hr> \n <p>温馨小提示:这里创建目录存放之后要下载的安装包</p> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/soft-dev\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/soft-system\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/soft-work\n<span class=\"token function\">cd</span> /IT_zhengqing/soft/soft-dev\n</code></pre> \n <h4><a id=\"2Maven_80\"></a>2、安装<code>Maven</code></h4> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 下载`apache-maven-3.6.3-bin.tar.gz` : http://maven.apache.org/download.cgi</span>\n<span class=\"token function\">wget</span> https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz\n<span class=\"token comment\"># 解压</span>\n<span class=\"token function\">tar</span> -zxvf apache-maven-3.6.3-bin.tar.gz\n</code></pre> \n <h6><a id=\"_89\"></a>配置环境变量</h6> \n <pre><code class=\"prism language-shell\">vim /etc/profile\n</code></pre> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\">############################## ↓↓↓↓↓↓ set maven environment ↓↓↓↓↓↓ #############################</span>\nMAVEN_HOME<span class=\"token operator\">=</span>/IT_zhengqing/soft/soft-dev/apache-maven-3.6.3\nPATH<span class=\"token operator\">=</span><span class=\"token variable\">$PATH</span><span class=\"token keyword\">:</span><span class=\"token variable\">$JAVA_HOME</span>/bin:<span class=\"token variable\">$MAVEN_HOME</span>/bin\n<span class=\"token function\">export</span> MAVEN_HOME PATH\n<span class=\"token comment\">################################################################################################</span>\n</code></pre> \n <h6><a id=\"_103\"></a>使配置生效</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">source</span> /etc/profile\n</code></pre> \n <h6><a id=\"_109\"></a>验证</h6> \n <pre><code class=\"prism language-shell\">mvn -v\n</code></pre> \n <h4><a id=\"3NodeJS_115\"></a>3、安装<code>NodeJS</code></h4> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 下载`node-v12.18.3-linux-x64.tar.xz` : https://nodejs.org/en/download/</span>\n<span class=\"token function\">wget</span> https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz\n<span class=\"token comment\"># 解压</span>\n<span class=\"token function\">tar</span> -xvf node-v12.18.3-linux-x64.tar.xz\n</code></pre> \n <h6><a id=\"_124\"></a>配置环境变量</h6> \n <pre><code class=\"prism language-shell\">vim /etc/profile\n</code></pre> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\">############################## ↓↓↓↓↓↓ set nodejs environment ↓↓↓↓↓↓ #############################</span>\nNODEJS_HOME<span class=\"token operator\">=</span>/IT_zhengqing/soft/soft-dev/node-v12.18.3-linux-x64\nPATH<span class=\"token operator\">=</span><span class=\"token variable\">$PATH</span><span class=\"token keyword\">:</span><span class=\"token variable\">$NODEJS_HOME</span>/bin\n<span class=\"token function\">export</span> NODEJS_HOME PATH\n<span class=\"token comment\">#################################################################################################</span>\n</code></pre> \n <h6><a id=\"_138\"></a>使配置生效</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">source</span> /etc/profile\n</code></pre> \n <h6><a id=\"_144\"></a>验证</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 查看版本</span>\nnode -v\n<span class=\"token function\">npm</span> -v\n</code></pre> \n <h6><a id=\"_152\"></a>配置</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># npm 升级</span>\n<span class=\"token function\">npm</span> <span class=\"token function\">install</span> -g <span class=\"token function\">npm</span>\n\n<span class=\"token comment\"># 设置淘宝`NPM`镜像</span>\n<span class=\"token function\">npm</span> <span class=\"token function\">install</span> -g cnpm --registry<span class=\"token operator\">=</span>https://registry.npm.taobao.org\n<span class=\"token comment\"># 测试</span>\ncnpm -v\n\n<span class=\"token comment\"># 安装yarn</span>\ncnpm <span class=\"token function\">install</span> -g yarn --registry<span class=\"token operator\">=</span>https://registry.npm.taobao.org\n<span class=\"token comment\"># 配置源</span>\nyarn config <span class=\"token keyword\">set</span> registry https://registry.npm.taobao.org -g\nyarn config <span class=\"token keyword\">set</span> sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g\n<span class=\"token comment\"># 查看版本</span>\nyarn -v\n</code></pre> \n <h4><a id=\"4Tomcat__172\"></a>4、安装<code>Tomcat</code> (可选)</h4> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 下载`apache-tomcat-9.0.38-src.tar.gz` : https://tomcat.apache.org/download-90.cgi</span>\n<span class=\"token function\">wget</span> https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.38/src/apache-tomcat-9.0.38-src.tar.gz\n<span class=\"token comment\"># 解压</span>\n<span class=\"token function\">tar</span> -zxv -f apache-tomcat-9.0.38-src.tar.gz\n</code></pre> \n <h4><a id=\"5Git_181\"></a>5、安裝<code>Git</code></h4> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> <span class=\"token function\">git</span>\n\n<span class=\"token comment\"># 查看版本信息</span>\n<span class=\"token function\">git</span> --version\n\n<span class=\"token comment\"># 配置git的帐号信息</span>\n<span class=\"token function\">git</span> config --global user.name <span class=\"token string\">\"zhengqingya\"</span>\n<span class=\"token function\">git</span> config --global user.email <span class=\"token string\">\"960869719@qq.com\"</span>\n\n<span class=\"token comment\"># 查看刚设置的git的帐号信息</span>\n<span class=\"token function\">git</span> config --list\n\n<span class=\"token comment\"># 设置永久记住密码</span>\n<span class=\"token function\">git</span> config --global credential.helper store\n</code></pre> \n <h4><a id=\"6docker_200\"></a>6、安装<code>docker</code></h4> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 切换到root账号</span>\n<span class=\"token function\">su</span> - root\n\n<span class=\"token comment\"># 首先确保自己的linux内核是3.10以上的版本</span>\n<span class=\"token function\">uname</span> -a\n\n<span class=\"token comment\"># 安装docker</span>\n<span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> update\n<span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> -y docker.io\n\n<span class=\"token comment\"># 启动 </span>\nsystemctl start docker\n\n<span class=\"token comment\"># 设置开机启动</span>\nsystemctl <span class=\"token function\">enable</span> docker\n\n<span class=\"token comment\"># 查看docker是否安装成功</span>\ndocker version\n\n\n<span class=\"token comment\"># 配置镜像加速器</span>\nvim /etc/docker/daemon.json\n\n\n<span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token string\">\"registry-mirrors\"</span><span class=\"token keyword\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"这里填写自己的加速器地址\"</span><span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"7dockercompose_232\"></a>7、安装<code>docker-compose</code></h4> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># apt-get安装pip3</span>\n<span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> -y python3-pip\npip3 <span class=\"token function\">install</span> setuptools\n<span class=\"token comment\"># 升级</span>\npip3 <span class=\"token function\">install</span> --upgrade pip\n<span class=\"token comment\"># 卸载</span>\n<span class=\"token comment\"># sudo apt-get remove python3-pip</span>\n\n<span class=\"token comment\"># pip3安装docker-compose</span>\npip3 <span class=\"token function\">install</span> docker-compose\n\ndocker-compose --version\n</code></pre> \n <h4><a id=\"8Jenkins_249\"></a>8、安装<code>Jenkins</code></h4> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 创建目录</span>\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/jenkins\n<span class=\"token function\">cd</span> /IT_zhengqing/soft/jenkins\n<span class=\"token comment\"># 下载 【 根据自己需要的版本下载 http://mirrors.jenkins.io/war-stable/ 】</span>\n<span class=\"token function\">wget</span> http://mirrors.jenkins.io/war-stable/2.235.2/jenkins.war\n<span class=\"token comment\"># 启动 (这里指定新的端口10000运行)</span>\n<span class=\"token function\">nohup</span> java -jar jenkins.war --ajp13Port<span class=\"token operator\">=</span>-1 --httpPort<span class=\"token operator\">=</span>10000 <span class=\"token operator\">&amp;</span>\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200725134951836.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 运行成功后,jenkins配置方面可参考:<br> 【Jenkins持续集成(二)】Windows上安装Jenkins教程: <a href=\"https://zhengqing.blog.csdn.net/article/details/95232353\">https://zhengqing.blog.csdn.net/article/details/95232353</a></p> \n <p>其中<code>全局工具配置</code>: <a href=\"http://localhost:10000/jenkins/configureTools/\">http://ip:10000/jenkins/configureTools/</a><br> Liunx配置如下:</p> \n <blockquote> \n <p>路径可能有所差异</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20200725135350540.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"OTHER_272\"></a>OTHER</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 关闭jenkins</span>\nhttp://ip:10000/exit \n\n<span class=\"token comment\"># 重启jenkies</span>\nhttp://ip:10000/restart \n\n<span class=\"token comment\"># 重新加载配置信息</span>\nhttp://ip:10000/reload \n</code></pre> \n <h6><a id=\"DockerJenkins_285\"></a>Docker如何安装Jenkins???</h6> \n <blockquote> \n <p>参考:<a href=\"https://gitee.com/zhengqingya/docker-compose\">https://gitee.com/zhengqingya/docker-compose</a></p> \n </blockquote> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">git</span> clone https://gitee.com/zhengqingya/docker-compose.git\n<span class=\"token function\">cd</span> docker-compose/Liunx\ndocker-compose -f docker-compose-jenkins.yml -p jenkins up -d\n</code></pre> \n <hr> \n <h4><a id=\"_297\"></a>其它</h4> \n <p>其它更多环境(<code>mysql</code>、<code>oracle</code>、<code>redis</code>、<code>nginx</code>、<code>mq</code>等) 可参考:<br> <a href=\"https://gitee.com/zhengqingya/docker-compose\">https://gitee.com/zhengqingya/docker-compose</a></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 要取得成功,我们必须进行尝试。有时候,我们这样做会完全失败。最成功的人士都经历过失败。但是他们坚持了下来。他们中的大多数人都不会不顾后果地承担风险。实际上,他们总是竭尽所能地尽量减少他们前进道路上的风险。他们总是能从失败中汲取教训,这样做通常为他们以后的成功奠定了基础。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108975926', '2020-10-09 11:54:21', 1, '2020-11-07 15:21:15', 1, '2020-11-07 15:21:15', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (2, 1, 108975539, 'Deepin(5) 开启远程服务', '-----❶、Deepin', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108883382\">Deepin(1) Hyper-V安装Deepin系统教程</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108884263\">Deepin(2) 设置屏幕分辨率</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108972834\">Deepin(3) 与windows共享文件夹</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108974092\">Deepin(4) 安装oh-my-zsh</a></li>\n </ol> \n <h3><a id=\"__7\"></a>二、 开启远程服务</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 安装ssh服务</span>\n<span class=\"token function\">sudo</span> <span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> openssh-serve\n\n<span class=\"token comment\"># 重启ssh</span>\n<span class=\"token function\">service</span> <span class=\"token function\">ssh</span> start\n</code></pre> \n <h6><a id=\"ip_17\"></a>查看本机ip</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">ifconfig</span>\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/2020100911265266.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"SSH_25\"></a>三、SSH工具远程连接</h3> \n <p><img src=\"https://img-blog.csdnimg.cn/20201009112843533.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <p>之后,便可以远程操作了~<br> <img src=\"https://img-blog.csdnimg.cn/20201009113040261.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 我们都有人生不如意的时候,事情没有朝着我们希望的方向发展。比如平常尽量早些睡觉,醒来的时候拥有全新的视角,可以让你摆脱负面的情绪。也许这听起来是老生常谈,但是你一定要永远保持乐观,即使你成功的可能性很小。而你的情绪会感染别人。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108975539', '2020-10-09 11:33:18', 1, '2020-11-07 15:21:15', 1, '2020-11-07 15:21:15', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (3, 1, 108974092, 'Deepin(4) 安装oh-my-zsh', '-----❶、Deepin', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_1\"></a>一、前言</h3> \n <ol>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108883382\">Deepin(1) Hyper-V安装Deepin系统教程</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108884263\">Deepin(2) 设置屏幕分辨率</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108972834\">Deepin(3) 与windows共享文件夹</a></li>\n </ol> \n <h3><a id=\"shellzsh_7\"></a>二、修改默认shell为<code>zsh</code></h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 切换到root账号</span>\n<span class=\"token function\">su</span> - root\n\n<span class=\"token comment\"># 安装zsh</span>\n<span class=\"token function\">apt-get</span> -y <span class=\"token function\">install</span> zsh\n\n<span class=\"token comment\"># 切换shell为zsh</span>\nchsh -s /bin/zsh\n\n<span class=\"token comment\"># 重启服务器</span>\n<span class=\"token function\">reboot</span>\n\n<span class=\"token comment\"># 重启后,查看当前shell</span>\n<span class=\"token keyword\">echo</span> <span class=\"token variable\">$SHELL</span> \n</code></pre> \n <h3><a id=\"ohmyzsh_26\"></a>三、安装<code>oh-my-zsh</code></h3> \n <blockquote> \n <p>可参考: <a href=\"https://github.com/ohmyzsh/ohmyzsh\">https://github.com/ohmyzsh/ohmyzsh</a></p> \n </blockquote> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">su</span> - root\n\n<span class=\"token function\">wget</span> https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh\n\nsh install.sh\n</code></pre> \n <h5><a id=\"_38\"></a>问题:如果直接使用上面命令安装会出现拒绝连接问题</h5> \n <p><img src=\"https://img-blog.csdnimg.cn/20201009105851411.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h5><a id=\"_42\"></a>解决方案:</h5> \n <p>找另外一台liunx服务器执行<code>wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh</code>命令,下载<code>install.sh</code>文件,然后将此文件拷贝到deepin系统中,然后再执行<code>sh install.sh</code>命令安装</p> \n <p>这时候,可能会报如下错,原因是未安装<code>git</code><br> <img src=\"https://img-blog.csdnimg.cn/20201009110052255.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <p>安装<code>git</code></p> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">apt-get</span> <span class=\"token function\">install</span> -y <span class=\"token function\">git</span>\n</code></pre> \n <p>然后再次安装<code>oh-my-zsh</code></p> \n <pre><code class=\"prism language-shell\">sh install.sh\n</code></pre> \n <p>如下成功:<br> <img src=\"https://img-blog.csdnimg.cn/20201009110406111.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h5><a id=\"_64\"></a>修改配置</h5> \n <pre><code class=\"prism language-shell\">vim ~/.zshrc\n\n\n<span class=\"token comment\"># 需修改的配置地方主要如下: -----------------------------------</span>\nZSH_THEME<span class=\"token operator\">=</span><span class=\"token string\">\"ys\"</span>\n\n<span class=\"token comment\"># 自动更新</span>\nDISABLE_UPDATE_PROMPT<span class=\"token operator\">=</span>true\n\n<span class=\"token comment\"># 【多个插件用空格分开】 </span>\nplugins<span class=\"token operator\">=</span><span class=\"token punctuation\">(</span>\n <span class=\"token function\">git</span> <span class=\"token comment\"># 默认开启的插件,提供了大量 git 的alias</span>\n z <span class=\"token comment\"># z命令快速跳转目录,会记忆你曾经进入过的目录,用模糊匹配快速进入你想要的目录</span>\n <span class=\"token comment\"># zsh-autosuggestions # 历史命令记录</span>\n extract <span class=\"token comment\"># x命令解压一切文件 ex: x test.zip</span>\n web-search <span class=\"token comment\"># 可在命令行中使用搜索引擎进行搜索 ex: 【 `baidu 郑清it` 或 `google 郑清it` 】</span>\n last-working-dir <span class=\"token comment\"># 下次进入终端时定位到上次打开的目录下</span>\n zsh-syntax-highlighting <span class=\"token comment\"># 一个类似 fish 的命令高亮插件</span>\n<span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># ------------------------------------------------------------</span>\n</code></pre> \n <p>问题:</p> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 如果zsh提示如下:</span>\n<span class=\"token punctuation\">[</span>oh-my-zsh<span class=\"token punctuation\">]</span> plugin <span class=\"token string\">\'zsh-autosuggestions\'</span> not found\n<span class=\"token punctuation\">[</span>oh-my-zsh<span class=\"token punctuation\">]</span> plugin <span class=\"token string\">\'zsh-syntax-highlighting\'</span> not found\n\n<span class=\"token comment\"># 则执行如下命令:</span>\n<span class=\"token comment\"># 进入oh-my-zsh自定义插件目录</span>\n<span class=\"token function\">cd</span> ~/.oh-my-zsh/custom/plugins\n<span class=\"token function\">git</span> clone git://github.com/zsh-users/zsh-autosuggestions <span class=\"token variable\">$ZSH_CUSTOM</span>/plugins/zsh-autosuggestions\n<span class=\"token function\">git</span> clone https://github.com/zsh-users/zsh-syntax-highlighting.git\n<span class=\"token comment\"># 在配置文件最后加上source...</span>\n<span class=\"token keyword\">echo</span> <span class=\"token string\">\"source ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh\"</span> <span class=\"token operator\">&gt;&gt;</span> <span class=\"token variable\">${ZDOTDIR:-$HOME}</span>/.zshrc\n</code></pre> \n <h5><a id=\"_105\"></a>更新配置</h5> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">source</span> ~/.zshrc\n</code></pre> \n <p>至此,一个简单的配置完成,可以使用了,其它更多自行查阅相关资料即可<br> <img src=\"https://img-blog.csdnimg.cn/20201009111717600.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 只有你学会把自己已有的成绩都归零,才能腾出空间去接纳更多的新东西,如此才能使自己不断的超越自己!</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108974092', '2020-10-09 11:21:22', 1, '2020-11-07 15:21:15', 1, '2020-11-07 15:21:15', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (4, 1, 108972834, 'Deepin(3) 与windows共享文件夹', '-----❶、Deepin', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108883382\">Deepin(1) Hyper-V安装Deepin系统教程</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/108884263\">Deepin(2) 设置屏幕分辨率</a></li>\n </ol> \n <h3><a id=\"_5\"></a>二、共享文件夹</h3> \n <h5><a id=\"1deepin_7\"></a>1、在deepin系统中新建一个文件夹,然后右击选择<code>共享文件夹</code></h5> \n <p><img src=\"https://img-blog.csdnimg.cn/20201009101048671.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 如下勾选<code>共享此文件夹</code>,然后分配相应读写权限<br> <img src=\"https://img-blog.csdnimg.cn/20201009101329763.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h5><a id=\"2deepinip_11\"></a>2、查看deepin系统ip</h5> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">ifconfig</span>\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20201009102023542.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h5><a id=\"3windowsdeepin_20\"></a>3、windows系统中访问deepin系统共享文件夹</h5> \n <p><code>win+r</code>输入<code>\\\\deepin系统ip地址</code> 回车 ex:<code>\\\\172.29.178.162</code></p> \n <p>如下,我们可以看见在deepin系统中共享的文件夹~<br> <img src=\"https://img-blog.csdnimg.cn/20201009102103279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 通过积极的思考来振奋精神,或者在年轻时就实现很多成就的人,有时候会感到飘飘然。根据一些成功企业家的经验来说,最成功的人善于倾听意见,他们了解自身,清楚自己的所有长处和短处。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108972834', '2020-10-09 10:24:03', 1, '2020-11-07 15:21:15', 1, '2020-11-07 15:21:15', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (5, 1, 109426192, 'Error(12) 解决javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure', '----- -----②、error大全', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <blockquote> \n <p>温馨小提示:本文基于jdk8环境</p> \n </blockquote> \n <h3><a id=\"_2\"></a>错误日志如下:</h3> \n <blockquote> \n <p>网上说:这是由于jdk安全性机制而导致访问https会报错</p> \n </blockquote> \n <pre><code class=\"prism language-java\">javax<span class=\"token punctuation\">.</span>net<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>SSLHandshakeException<span class=\"token operator\">:</span> Received fatal alert<span class=\"token operator\">:</span> handshake_failure\n at sun<span class=\"token punctuation\">.</span>security<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>Alerts<span class=\"token punctuation\">.</span><span class=\"token function\">getSSLException</span><span class=\"token punctuation\">(</span>Alerts<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">192</span><span class=\"token punctuation\">)</span>\n at sun<span class=\"token punctuation\">.</span>security<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>Alerts<span class=\"token punctuation\">.</span><span class=\"token function\">getSSLException</span><span class=\"token punctuation\">(</span>Alerts<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">154</span><span class=\"token punctuation\">)</span>\n at sun<span class=\"token punctuation\">.</span>security<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>SSLSocketImpl<span class=\"token punctuation\">.</span><span class=\"token function\">recvAlert</span><span class=\"token punctuation\">(</span>SSLSocketImpl<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">2023</span><span class=\"token punctuation\">)</span>\n at sun<span class=\"token punctuation\">.</span>security<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>SSLSocketImpl<span class=\"token punctuation\">.</span><span class=\"token function\">readRecord</span><span class=\"token punctuation\">(</span>SSLSocketImpl<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">1125</span><span class=\"token punctuation\">)</span>\n at sun<span class=\"token punctuation\">.</span>security<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>SSLSocketImpl<span class=\"token punctuation\">.</span><span class=\"token function\">performInitialHandshake</span><span class=\"token punctuation\">(</span>SSLSocketImpl<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">1375</span><span class=\"token punctuation\">)</span>\n at sun<span class=\"token punctuation\">.</span>security<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>SSLSocketImpl<span class=\"token punctuation\">.</span><span class=\"token function\">startHandshake</span><span class=\"token punctuation\">(</span>SSLSocketImpl<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">1403</span><span class=\"token punctuation\">)</span>\n at sun<span class=\"token punctuation\">.</span>security<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>SSLSocketImpl<span class=\"token punctuation\">.</span><span class=\"token function\">startHandshake</span><span class=\"token punctuation\">(</span>SSLSocketImpl<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">1387</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>conn<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>SSLConnectionSocketFactory<span class=\"token punctuation\">.</span><span class=\"token function\">createLayeredSocket</span><span class=\"token punctuation\">(</span>SSLConnectionSocketFactory<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">436</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>conn<span class=\"token punctuation\">.</span>ssl<span class=\"token punctuation\">.</span>SSLConnectionSocketFactory<span class=\"token punctuation\">.</span><span class=\"token function\">connectSocket</span><span class=\"token punctuation\">(</span>SSLConnectionSocketFactory<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">384</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>impl<span class=\"token punctuation\">.</span>conn<span class=\"token punctuation\">.</span>DefaultHttpClientConnectionOperator<span class=\"token punctuation\">.</span><span class=\"token function\">connect</span><span class=\"token punctuation\">(</span>DefaultHttpClientConnectionOperator<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">142</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>impl<span class=\"token punctuation\">.</span>conn<span class=\"token punctuation\">.</span>PoolingHttpClientConnectionManager<span class=\"token punctuation\">.</span><span class=\"token function\">connect</span><span class=\"token punctuation\">(</span>PoolingHttpClientConnectionManager<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">376</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>impl<span class=\"token punctuation\">.</span>execchain<span class=\"token punctuation\">.</span>MainClientExec<span class=\"token punctuation\">.</span><span class=\"token function\">establishRoute</span><span class=\"token punctuation\">(</span>MainClientExec<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">393</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>impl<span class=\"token punctuation\">.</span>execchain<span class=\"token punctuation\">.</span>MainClientExec<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span>MainClientExec<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">236</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>impl<span class=\"token punctuation\">.</span>execchain<span class=\"token punctuation\">.</span>ProtocolExec<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span>ProtocolExec<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">186</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>impl<span class=\"token punctuation\">.</span>execchain<span class=\"token punctuation\">.</span>RetryExec<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span>RetryExec<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">89</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>impl<span class=\"token punctuation\">.</span>execchain<span class=\"token punctuation\">.</span>RedirectExec<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span>RedirectExec<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">110</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>impl<span class=\"token punctuation\">.</span>client<span class=\"token punctuation\">.</span>InternalHttpClient<span class=\"token punctuation\">.</span><span class=\"token function\">doExecute</span><span class=\"token punctuation\">(</span>InternalHttpClient<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">185</span><span class=\"token punctuation\">)</span>\n at org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>impl<span class=\"token punctuation\">.</span>client<span class=\"token punctuation\">.</span>CloseableHttpClient<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span>CloseableHttpClient<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">83</span><span class=\"token punctuation\">)</span>\n at us<span class=\"token punctuation\">.</span>codecraft<span class=\"token punctuation\">.</span>webmagic<span class=\"token punctuation\">.</span>downloader<span class=\"token punctuation\">.</span>HttpClientDownloader<span class=\"token punctuation\">.</span><span class=\"token function\">download</span><span class=\"token punctuation\">(</span>HttpClientDownloader<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">85</span><span class=\"token punctuation\">)</span>\n at us<span class=\"token punctuation\">.</span>codecraft<span class=\"token punctuation\">.</span>webmagic<span class=\"token punctuation\">.</span>Spider<span class=\"token punctuation\">.</span><span class=\"token function\">processRequest</span><span class=\"token punctuation\">(</span>Spider<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">404</span><span class=\"token punctuation\">)</span>\n at us<span class=\"token punctuation\">.</span>codecraft<span class=\"token punctuation\">.</span>webmagic<span class=\"token punctuation\">.</span>Spider<span class=\"token punctuation\">.</span>access$<span class=\"token function\">000</span><span class=\"token punctuation\">(</span>Spider<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">61</span><span class=\"token punctuation\">)</span>\n at us<span class=\"token punctuation\">.</span>codecraft<span class=\"token punctuation\">.</span>webmagic<span class=\"token punctuation\">.</span>Spider$<span class=\"token number\">1.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span>Spider<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">320</span><span class=\"token punctuation\">)</span>\n at us<span class=\"token punctuation\">.</span>codecraft<span class=\"token punctuation\">.</span>webmagic<span class=\"token punctuation\">.</span>thread<span class=\"token punctuation\">.</span>CountableThreadPool$<span class=\"token number\">1.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span>CountableThreadPool<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">74</span><span class=\"token punctuation\">)</span>\n at java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>concurrent<span class=\"token punctuation\">.</span>ThreadPoolExecutor<span class=\"token punctuation\">.</span><span class=\"token function\">runWorker</span><span class=\"token punctuation\">(</span>ThreadPoolExecutor<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">1142</span><span class=\"token punctuation\">)</span>\n at java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>concurrent<span class=\"token punctuation\">.</span>ThreadPoolExecutor$Worker<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span>ThreadPoolExecutor<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">617</span><span class=\"token punctuation\">)</span>\n at java<span class=\"token punctuation\">.</span>lang<span class=\"token punctuation\">.</span>Thread<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span>Thread<span class=\"token punctuation\">.</span>java<span class=\"token operator\">:</span><span class=\"token number\">745</span><span class=\"token punctuation\">)</span>\n</code></pre> \n <h3><a id=\"_36\"></a>解决</h3> \n <ol>\n <li> <p>下载jar包:<a href=\"https://www.oracle.com/java/technologies/javase-jce8-downloads.html\">https://www.oracle.com/java/technologies/javase-jce8-downloads.html</a></p> \n <blockquote> \n <p>温馨小提示:也可以到 <a href=\"https://gitee.com/zhengqingya/java-developer-document\">https://gitee.com/zhengqingya/java-developer-document</a> 中下载</p> \n </blockquote> <p><img src=\"https://img-blog.csdnimg.cn/2020110114353982.png#pic_center\" alt=\"在这里插入图片描述\"></p> </li>\n <li> <p>替换jdk里默认的jar包即可,位置在<code>jdk1.8.0_111\\jre\\lib\\security</code>目录下<br> <img src=\"https://img-blog.csdnimg.cn/20201101143501811.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> </li>\n </ol> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/109426192', '2020-11-01 14:44:40', 1, '2020-11-07 15:21:15', 1, '2020-11-07 15:21:15', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (6, 1, 108884263, 'Deepin(2) 设置屏幕分辨率', '-----❶、Deepin', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p><a href=\"https://zhengqing.blog.csdn.net/article/details/108883382\">Deepin(1) Hyper-V安装Deepin系统教程</a></p> \n <h6><a id=\"_4\"></a>问题:</h6> \n <p>在我们安装完<code>deepin</code>系统之后,会有个问题,即屏幕默认分辨率为<code>1152x864</code>,大屏情况下看着急为难受,本文将举例将其设置为<code>1920x1080</code></p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200930140733611.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"_11\"></a>二、设置屏幕分辨率</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 切换到root账号</span>\n<span class=\"token function\">su</span> - root\n<span class=\"token comment\"># 配置分辨率</span>\n<span class=\"token function\">vi</span> /etc/default/grub\n\n<span class=\"token comment\"># 配置指定分辨率,ex: 1920x1080</span>\nGRUB_CMDLINE_LINUX_DEFAULT<span class=\"token operator\">=</span><span class=\"token string\">\"splash quiet video=hyperv_fb:1920x1080\"</span>\n</code></pre> \n <p>编辑为如下配置保存~<br> <img src=\"https://img-blog.csdnimg.cn/20200930141535449.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"_26\"></a>三、保存配置</h3> \n <pre><code class=\"prism language-shell\">/usr/lib/deepin-api/adjust-grub-theme \n\nupdate-grub\n</code></pre> \n <h3><a id=\"_34\"></a>四、重启系统</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">reboot</span>\n</code></pre> \n <p>修改成功如下:<br> <img src=\"https://img-blog.csdnimg.cn/20200930142428600.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 单纯是我追求的一种生活方式,也是我持续的一种创作心态,但追求单纯需付出许多代价,你必须要有勇气承担因为单纯而带来的被他人利用欺瞒及孤立。但我觉得人生本来就该尽可能保持一种单纯的状态,因这种状态是最接近自己的内心,一个纯静的内心会把许多事情导入正向,让你拥有一个物质之外的丰富人生。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108884263', '2020-09-30 14:27:25', 1, '2020-11-07 15:21:16', 1, '2020-11-07 15:21:16', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (7, 1, 108883382, 'Deepin(1) Hyper-V安装Deepin系统教程', '-----❶、Deepin', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li>deepin官网:<a href=\"https://www.deepin.org/zh/\">https://www.deepin.org/zh/</a></li>\n <li>ISO镜像源下载地址:<a href=\"https://www.deepin.org/zh/mirrors/releases/\">https://www.deepin.org/zh/mirrors/releases/</a></li>\n </ol> \n <blockquote> \n <p>小编下载的为: <a href=\"http://mirrors.aliyun.com/deepin-cd/20Beta/deepin-20Beta-desktop-amd64.iso\">http://mirrors.aliyun.com/deepin-cd/20Beta/deepin-20Beta-desktop-amd64.iso</a><br> <img src=\"https://img-blog.csdnimg.cn/20200930124214507.png#pic_center\" alt=\"在这里插入图片描述\"></p> \n </blockquote> \n <h3><a id=\"HyperV_9\"></a>二、开启Hyper-V</h3> \n <blockquote> \n <p>温馨小提示:本文将基于<code>windows10专业版</code>操作,其它部分系统可能没有<code>Hyper-V</code>功能<br> <img src=\"https://img-blog.csdnimg.cn/20200930124543333.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n </blockquote> \n <p>依次进入 <code>控制面板</code> -&gt; <code>程序</code> -&gt; <code>启用或关闭Windows功能</code> -&gt; 勾选上 <code>Hyper-V</code> -&gt; 确定开启之后重启电脑<br> <img src=\"https://img-blog.csdnimg.cn/20191208012230298.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGVuZ3FpbmcuYmxvZy5jc2RuLm5ldA==,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"HyperVDeepin_18\"></a>三、Hyper-V安装Deepin</h3> \n <h6><a id=\"1HyperVHyperV__20\"></a>1、开启<code>Hyper-V</code>后打开<code>Hyper-V 管理器</code></h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200930125020917.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"2_22\"></a>2、新建<code>虚拟机</code></h6> \n <p><img src=\"https://img-blog.csdnimg.cn/2020093012540655.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200930125639662.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 命名 + 修改自己的虚拟机存放路径<br> <img src=\"https://img-blog.csdnimg.cn/20200930125813683.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200930130004168.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 这里根据自己的条件分配内存即可<br> <img src=\"https://img-blog.csdnimg.cn/20200930130056374.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200930130139710.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200930130156343.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 选择之前下载的deepin镜像文件<br> <img src=\"https://img-blog.csdnimg.cn/2020093013023726.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200930130315450.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 然后选择自己新建的虚拟机右击选择<code>启动</code><br> <img src=\"https://img-blog.csdnimg.cn/2020093013035180.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 然后右击选择<code>连接</code><br> <img src=\"https://img-blog.csdnimg.cn/20200930130538664.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"3deepin_39\"></a>3、安装deepin系统</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200930130707913.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200930130956975.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/2020093013101981.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200930131038150.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 然后等待安装完成即可…</p> \n <blockquote> \n <p>温馨小提示:大概10多分钟左右</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20200930131117427.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 安装成功提示如下<br> <img src=\"https://img-blog.csdnimg.cn/2020093013335463.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 在点击<code>立即体验</code>之后,需回到<code>Hyper-V 管理器</code>,打开设置<br> <img src=\"https://img-blog.csdnimg.cn/2020093013134362.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <code>IDE 控制器1</code> -&gt; <code>媒体</code> 选择 <code>无</code> -&gt; <code>确定</code> 保存<br> <img src=\"https://img-blog.csdnimg.cn/20200930131448216.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 如果没有操作成功,又回到安装界面,循环安装的话,则回到<code>Hyper-V 管理器</code>选择<code>强行关闭</code>,然后再重新<code>启动</code> -&gt; <code>连接</code><br> <img src=\"https://img-blog.csdnimg.cn/20200930133529832.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/202009301338146.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 虚拟机重新启动连接后会出现一个合并状态~<br> <img src=\"https://img-blog.csdnimg.cn/20200930134040769.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"4deepin_61\"></a>4、deepin系统操作</h6> \n <p>上面重新连接后,会出现如下操作界面<br> <img src=\"https://img-blog.csdnimg.cn/2020093013422523.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 创建用户<br> <img src=\"https://img-blog.csdnimg.cn/2020093013434055.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 然后等待<code>优化系统配置</code>完成</p> \n <blockquote> \n <p>温馨小提示:大概3分钟左右</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20200930134401698.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 配置完成之后,我们就可以登录系统了<br> <img src=\"https://img-blog.csdnimg.cn/20200930134640667.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 之后的一些配置就根据自己的需求来设置了,就不多说了<br> <img src=\"https://img-blog.csdnimg.cn/20200930134821137.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/2020093013502741.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 真正的强大,不是我们从来没有眼泪,而是流着泪还能微笑着坚定前行。人生总是在前行,那些所有你以为过不去的过去,最后都留在了最后。没有安全感的孩子,会爱音乐,会怕黑,却习惯晚睡。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108883382', '2020-09-30 13:54:18', 1, '2020-11-07 15:21:16', 1, '2020-11-07 15:21:16', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (8, 1, 108677812, 'SpringBoot(34) 发送邮件', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p>本文主要基于<code>springboot2.3.3.RELEASE</code>和<code>spring-boot-starter-mail</code>实现发送纯文本与带附件的邮件</p> \n <h3><a id=\"_4\"></a>二、环境集成准备</h3> \n <blockquote> \n <p>以QQ邮箱为例</p> \n </blockquote> \n <h4><a id=\"1POP3SMTP_8\"></a>1、开启<code>POP3/SMTP服务</code>,并生成<code>授权码</code></h4> \n <p><code>登录QQ邮箱</code><a href=\"https://mail.qq.com\">https://mail.qq.com</a> -&gt; <code>设置</code> -&gt; <code>账号</code></p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200919112203805.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <p>滑到下面有个<code>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务</code>,然后开启<code>POP3/SMTP服务</code><br> <img src=\"https://img-blog.csdnimg.cn/20200919105620459.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"><br> 然后点击<code>生成授权码</code></p> \n <blockquote> \n <p>注:这个授权码是之后需要配置的一项,先复制出来保存着~</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20200919105811405.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"2pomxml_22\"></a>2、<code>pom.xml</code>中引入所需依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!--发送邮件 --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.springframework.boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>spring-boot-starter-mail<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"3applicationyml_32\"></a>3、<code>application.yml</code>中相关配置</h4> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">server</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span>\n\n<span class=\"token key atrule\">spring</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># ========================== ↓↓↓↓↓↓ 发送邮件配置(QQ邮箱) ↓↓↓↓↓↓ ==========================</span>\n <span class=\"token key atrule\">mail</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">host</span><span class=\"token punctuation\">:</span> smtp.qq.com\n <span class=\"token key atrule\">username</span><span class=\"token punctuation\">:</span> xxx@qq.com <span class=\"token comment\"># TODO 账号</span>\n <span class=\"token key atrule\">password</span><span class=\"token punctuation\">:</span> xxxxxxxxxx <span class=\"token comment\"># TODO 注:这里填写 在邮箱 设置 -&gt; 账号 里面生成的`授权码` !!!</span>\n <span class=\"token key atrule\">default-encoding</span><span class=\"token punctuation\">:</span> UTF<span class=\"token punctuation\">-</span><span class=\"token number\">8</span>\n <span class=\"token key atrule\">form</span><span class=\"token punctuation\">:</span> xxx@qq.com <span class=\"token comment\"># TODO 邮件发送人地址</span>\n <span class=\"token key atrule\">properties</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">mail</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">smtp</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">auth</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\n <span class=\"token key atrule\">starttls</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">enable</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\n <span class=\"token key atrule\">required</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\n</code></pre> \n <h3><a id=\"_55\"></a>三、发送邮件工具类</h3> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Component</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">EmailUtil</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> JavaMailSender javaMailSender<span class=\"token punctuation\">;</span>\n\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> String formEmail<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${spring.mail.form}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String formEmail2<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Autowired</span>\n <span class=\"token keyword\">private</span> JavaMailSender javaMailSender2<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@PostConstruct</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">beforeInit</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n javaMailSender <span class=\"token operator\">=</span> javaMailSender2<span class=\"token punctuation\">;</span>\n formEmail <span class=\"token operator\">=</span> formEmail2<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 发送邮件 - 不带附件 * * @param title:邮件标题 * @param content: * 邮件内容 * @param sendTo: * 收件人 * @return: void * @author : zhengqing * @date : 2020/8/14 19:28 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">sendMail</span><span class=\"token punctuation\">(</span>String title<span class=\"token punctuation\">,</span> String content<span class=\"token punctuation\">,</span> String<span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span> sendTo<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n MimeMessage message <span class=\"token operator\">=</span> javaMailSender<span class=\"token punctuation\">.</span><span class=\"token function\">createMimeMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n MimeMessageHelper helper <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MimeMessageHelper</span><span class=\"token punctuation\">(</span>message<span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 发送人邮件地址</span>\n helper<span class=\"token punctuation\">.</span><span class=\"token function\">setFrom</span><span class=\"token punctuation\">(</span>formEmail<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 接收人邮件地址</span>\n helper<span class=\"token punctuation\">.</span><span class=\"token function\">setTo</span><span class=\"token punctuation\">(</span>sendTo<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 主题</span>\n helper<span class=\"token punctuation\">.</span><span class=\"token function\">setSubject</span><span class=\"token punctuation\">(</span>title<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">// html内容 (设置true标识发送html邮件)</span>\n helper<span class=\"token punctuation\">.</span><span class=\"token function\">setText</span><span class=\"token punctuation\">(</span>content<span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n javaMailSender<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>message<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 发送邮件 - 带附件 * * @param title:邮件标题 * @param content: * 邮件内容 * @param attachmentFilename:附件文件名 * @param file:附件 * @param sendTo: * 收件人 * @return: void * @author : zhengqing * @date : 2020/8/14 19:28 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">sendMail</span><span class=\"token punctuation\">(</span>String title<span class=\"token punctuation\">,</span> String content<span class=\"token punctuation\">,</span> String attachmentFilename<span class=\"token punctuation\">,</span> File file<span class=\"token punctuation\">,</span> String<span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span> sendTo<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n MimeMessage message <span class=\"token operator\">=</span> javaMailSender<span class=\"token punctuation\">.</span><span class=\"token function\">createMimeMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n MimeMessageHelper helper <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MimeMessageHelper</span><span class=\"token punctuation\">(</span>message<span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 发送人邮件地址</span>\n helper<span class=\"token punctuation\">.</span><span class=\"token function\">setFrom</span><span class=\"token punctuation\">(</span>formEmail<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 接收人邮件地址</span>\n helper<span class=\"token punctuation\">.</span><span class=\"token function\">setTo</span><span class=\"token punctuation\">(</span>sendTo<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 主题</span>\n helper<span class=\"token punctuation\">.</span><span class=\"token function\">setSubject</span><span class=\"token punctuation\">(</span>title<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">// ① html内容 (设置true标识发送html邮件)</span>\n helper<span class=\"token punctuation\">.</span><span class=\"token function\">setText</span><span class=\"token punctuation\">(</span>content<span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">// ② 附件</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>StringUtils<span class=\"token punctuation\">.</span><span class=\"token function\">isNotBlank</span><span class=\"token punctuation\">(</span>attachmentFilename<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n helper<span class=\"token punctuation\">.</span><span class=\"token function\">addAttachment</span><span class=\"token punctuation\">(</span>attachmentFilename<span class=\"token punctuation\">,</span> file<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n javaMailSender<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>message<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h3><a id=\"_145\"></a>四、测试</h3> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/api/test\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TestController</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/sendEmailTest\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">sendEmailTest</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n EmailUtil<span class=\"token punctuation\">.</span><span class=\"token function\">sendMail</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"测试发送普通邮件\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"test...\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"xxx@qq.com\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n File file <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">File</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"C:\\\\Users\\\\Administrator\\\\Desktop\\\\临时垃圾站\\\\test.docx\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n EmailUtil<span class=\"token punctuation\">.</span><span class=\"token function\">sendMail</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"测试发送带附件邮件\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"test...\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"test.docx\"</span><span class=\"token punctuation\">,</span> file<span class=\"token punctuation\">,</span> <span class=\"token string\">\"xxx@qq.com\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"SUCCESS ~\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>浏览器请求测试api接口发送邮件<br> <a href=\"http://127.0.0.1/api/test/sendEmailTest\">http://127.0.0.1/api/test/sendEmailTest</a></p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200919110531131.png#pic_center\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_170\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 生活不能等待别人来安排,要自己去争取和奋斗,而不论其结果是喜是悲,你总不枉在这世界上活了一场人。有了这样的认识,你就会珍重生活,而不会玩世不恭;同时也会给人自身注入一种强大的内在力量。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108677812', '2020-09-19 11:18:47', 1, '2020-11-07 15:21:16', 1, '2020-11-07 15:21:16', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (9, 1, 108547861, 'SpringBoot(33) 整合JXLS实现Excel导入导出', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li>jxls官网:<a href=\"http://jxls.sourceforge.net/\">http://jxls.sourceforge.net/</a></li>\n <li>本文将基于<code>springboot2.3.3.RELEASE</code>去整合<code>jxls</code>实现excel导入导出功能</li>\n </ol> \n <p><img src=\"https://img-blog.csdnimg.cn/20200912122140136.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"SpringBootJXLSExcel_7\"></a>二、SpringBoot整合JXLS实现Excel导入导出</h3> \n <h4><a id=\"1pomxml_9\"></a>1、<code>pom.xml</code>中引入相关依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- jxls导出导入读取excel报表 --&gt;</span>\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/org.jxls/jxls --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.jxls<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>jxls<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>2.8.1<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/org.jxls/jxls-poi --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.jxls<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>jxls-poi<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>2.8.1<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/org.jxls/jxls-jexcel --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.jxls<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>jxls-jexcel<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>1.0.9<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/org.jxls/jxls-reader --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.jxls<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>jxls-reader<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>2.0.6<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2Excel_39\"></a>2、Excel导入导出工具类</h4> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">import</span> cn<span class=\"token punctuation\">.</span>hutool<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>FileUtil<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> com<span class=\"token punctuation\">.</span>zhengqing<span class=\"token punctuation\">.</span>demo<span class=\"token punctuation\">.</span>Constants<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> com<span class=\"token punctuation\">.</span>zhengqing<span class=\"token punctuation\">.</span>demo<span class=\"token punctuation\">.</span>enums<span class=\"token punctuation\">.</span>ExcelExportFileTypeEnum<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> com<span class=\"token punctuation\">.</span>zhengqing<span class=\"token punctuation\">.</span>demo<span class=\"token punctuation\">.</span>enums<span class=\"token punctuation\">.</span>ExcelImportFileTypeEnum<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>File<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>FileInputStream<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>FileOutputStream<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>IOException<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>InputStream<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>OutputStream<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>net<span class=\"token punctuation\">.</span>URLEncoder<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>HashMap<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>List<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>Map<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> javax<span class=\"token punctuation\">.</span>servlet<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>HttpServletResponse<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> lombok<span class=\"token punctuation\">.</span>SneakyThrows<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> lombok<span class=\"token punctuation\">.</span>extern<span class=\"token punctuation\">.</span>slf4j<span class=\"token punctuation\">.</span>Slf4j<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>poi<span class=\"token punctuation\">.</span>ss<span class=\"token punctuation\">.</span>usermodel<span class=\"token punctuation\">.</span>Workbook<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>poi<span class=\"token punctuation\">.</span>ss<span class=\"token punctuation\">.</span>usermodel<span class=\"token punctuation\">.</span>WorkbookFactory<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>jxls<span class=\"token punctuation\">.</span>common<span class=\"token punctuation\">.</span>Context<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>jxls<span class=\"token punctuation\">.</span>reader<span class=\"token punctuation\">.</span>ReaderBuilder<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>jxls<span class=\"token punctuation\">.</span>reader<span class=\"token punctuation\">.</span>XLSReadStatus<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>jxls<span class=\"token punctuation\">.</span>reader<span class=\"token punctuation\">.</span>XLSReader<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>jxls<span class=\"token punctuation\">.</span>transform<span class=\"token punctuation\">.</span>poi<span class=\"token punctuation\">.</span>PoiTransformer<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>jxls<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>JxlsHelper<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>springframework<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>ClassPathResource<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>springframework<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>Resource<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>springframework<span class=\"token punctuation\">.</span>web<span class=\"token punctuation\">.</span>multipart<span class=\"token punctuation\">.</span>MultipartFile<span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">/** * &lt;p&gt; * 导入导出Excel报表工具类 * &lt;/p&gt; * * @author : zhengqing * @description : * @date : 2020/9/7 14:26 */</span>\n<span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">ExcelUtil</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * 读取上传文件数据 * * @param dataList: * 数据 * @param excelImportFileTypeEnum: * 导入报表模板类型 * @param file: * 上传文件数据 * @param isThrowException: * 遇到错误是否抛出异常信息 true:抛出 false:不抛,继续处理数据 * @return: 装满数据的dataList * @author : zhengqing * @date : 2020/9/7 13:59 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>E<span class=\"token punctuation\">,</span> T<span class=\"token punctuation\">&gt;</span></span> List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>T<span class=\"token punctuation\">&gt;</span></span> <span class=\"token function\">read</span><span class=\"token punctuation\">(</span>List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>T<span class=\"token punctuation\">&gt;</span></span> dataList<span class=\"token punctuation\">,</span> ExcelImportFileTypeEnum excelImportFileTypeEnum<span class=\"token punctuation\">,</span>\n MultipartFile file<span class=\"token punctuation\">,</span> <span class=\"token keyword\">boolean</span> isThrowException<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n String fileName <span class=\"token operator\">=</span> file<span class=\"token punctuation\">.</span><span class=\"token function\">getName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n InputStream inputXLS <span class=\"token operator\">=</span> null<span class=\"token punctuation\">;</span>\n InputStream inputXML <span class=\"token operator\">=</span> null<span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{\n <!-- --></span>\n Resource resource <span class=\"token operator\">=</span>\n <span class=\"token keyword\">new</span> <span class=\"token class-name\">ClassPathResource</span><span class=\"token punctuation\">(</span>Constants<span class=\"token punctuation\">.</span>DEFAULT_REPORT_IMPORT_FOLDER <span class=\"token operator\">+</span> excelImportFileTypeEnum<span class=\"token punctuation\">.</span><span class=\"token function\">getMappingXml</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 上传文件流</span>\n inputXLS <span class=\"token operator\">=</span> file<span class=\"token punctuation\">.</span><span class=\"token function\">getInputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// xml配置文件流</span>\n inputXML <span class=\"token operator\">=</span> resource<span class=\"token punctuation\">.</span><span class=\"token function\">getInputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 执行解析</span>\n XLSReader mainReader <span class=\"token operator\">=</span> ReaderBuilder<span class=\"token punctuation\">.</span><span class=\"token function\">buildFromXML</span><span class=\"token punctuation\">(</span>inputXML<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span> beans <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">HashMap</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">&gt;</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n beans<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dataList\"</span><span class=\"token punctuation\">,</span> dataList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n XLSReadStatus readStatus <span class=\"token operator\">=</span> mainReader<span class=\"token punctuation\">.</span><span class=\"token function\">read</span><span class=\"token punctuation\">(</span>inputXLS<span class=\"token punctuation\">,</span> beans<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>readStatus<span class=\"token punctuation\">.</span><span class=\"token function\">isStatusOK</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">debug</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"读取excel文件成功: 【{}】\"</span><span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">Exception</span> e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// ① 记录错误位置</span>\n String errorCell <span class=\"token operator\">=</span> e<span class=\"token punctuation\">.</span><span class=\"token function\">getMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">split</span><span class=\"token punctuation\">(</span><span class=\"token string\">\" \"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// ② 记录错误原因</span>\n String errorMsg <span class=\"token operator\">=</span> e<span class=\"token punctuation\">.</span><span class=\"token function\">getCause</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> causeMsgArray <span class=\"token operator\">=</span> errorMsg<span class=\"token punctuation\">.</span><span class=\"token function\">split</span><span class=\"token punctuation\">(</span><span class=\"token string\">\":\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n errorMsg <span class=\"token operator\">=</span> errorMsg<span class=\"token punctuation\">.</span><span class=\"token function\">substring</span><span class=\"token punctuation\">(</span>causeMsgArray<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">length</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">split</span><span class=\"token punctuation\">(</span><span class=\"token string\">\":\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>errorMsg<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">case</span> <span class=\"token string\">\"For input string\"</span><span class=\"token operator\">:</span>\n errorMsg <span class=\"token operator\">=</span> <span class=\"token string\">\"时间格式不正确\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">case</span> <span class=\"token string\">\"Error converting from \'String\' to \'Integer\' For input string\"</span><span class=\"token operator\">:</span>\n errorMsg <span class=\"token operator\">=</span> <span class=\"token string\">\"请填写数字类型\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">default</span><span class=\"token operator\">:</span>\n <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n errorMsg <span class=\"token operator\">=</span> <span class=\"token string\">\"读取\"</span> <span class=\"token operator\">+</span> fileName <span class=\"token operator\">+</span> <span class=\"token string\">\"文件异常: \"</span> <span class=\"token operator\">+</span> errorCell <span class=\"token operator\">+</span> errorMsg<span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>isThrowException<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Exception</span><span class=\"token punctuation\">(</span>errorMsg<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span>errorMsg<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">finally</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>inputXLS <span class=\"token operator\">!=</span> null<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n inputXLS<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>inputXML <span class=\"token operator\">!=</span> null<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n inputXML<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">IOException</span> e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"parse excel error : 【{}】\"</span><span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">.</span><span class=\"token function\">getMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token keyword\">return</span> dataList<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 导出EXCEL到指定路径 * * @param dataList: * 数据 * @param excelExportFileTypeEnum: * 导出报表模板类型 * @param exportPath: * 导出路径 * @return: 文件下载地址信息 * @author : zhengqing * @date : 2020/9/7 13:59 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> String <span class=\"token function\">export</span><span class=\"token punctuation\">(</span>List<span class=\"token operator\">&lt;</span>Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span><span class=\"token operator\">&gt;</span> dataList<span class=\"token punctuation\">,</span> ExcelExportFileTypeEnum excelExportFileTypeEnum<span class=\"token punctuation\">,</span>\n String exportPath<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 处理导出</span>\n File exportFile <span class=\"token operator\">=</span> <span class=\"token function\">handleExport</span><span class=\"token punctuation\">(</span>dataList<span class=\"token punctuation\">,</span> excelExportFileTypeEnum<span class=\"token punctuation\">,</span> exportPath<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n String fileName <span class=\"token operator\">=</span> excelExportFileTypeEnum<span class=\"token punctuation\">.</span><span class=\"token function\">getSheetName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">\".xls\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// TODO 这里可以对`exportFile`做文件上传处理,然后返回一个文件下载地址 或其它业务处理...</span>\n <span class=\"token keyword\">return</span> exportFile<span class=\"token punctuation\">.</span><span class=\"token function\">getAbsolutePath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 导出EXCEL给前端直接下载 * * @param dataList: * 数据 * @param excelExportFileTypeEnum: * 导出报表模板类型 * @param exportPath: * 导出路径 * @param response: * @return: void * @author : zhengqing * @date : 2020/9/8 14:59 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">export</span><span class=\"token punctuation\">(</span>List<span class=\"token operator\">&lt;</span>Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span><span class=\"token operator\">&gt;</span> dataList<span class=\"token punctuation\">,</span> ExcelExportFileTypeEnum excelExportFileTypeEnum<span class=\"token punctuation\">,</span>\n String exportPath<span class=\"token punctuation\">,</span> HttpServletResponse response<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 处理导出</span>\n <span class=\"token function\">handleExport</span><span class=\"token punctuation\">(</span>dataList<span class=\"token punctuation\">,</span> excelExportFileTypeEnum<span class=\"token punctuation\">,</span> exportPath<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">// ======================= ↓↓↓↓↓↓ 响应给前端 ↓↓↓↓↓↓ =======================</span>\n <span class=\"token comment\">// 文件名 - 解决中文乱码问题</span>\n String filename <span class=\"token operator\">=</span> URLEncoder<span class=\"token punctuation\">.</span><span class=\"token function\">encode</span><span class=\"token punctuation\">(</span>excelExportFileTypeEnum<span class=\"token punctuation\">.</span><span class=\"token function\">getTemplateFile</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">substring</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"UTF-8\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 设置响应编码</span>\n response<span class=\"token punctuation\">.</span><span class=\"token function\">setCharacterEncoding</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"UTF-8\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n response<span class=\"token punctuation\">.</span><span class=\"token function\">setContentType</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"application/x-download\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n response<span class=\"token punctuation\">.</span><span class=\"token function\">setHeader</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Content-Disposition\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"attachment;filename=\"</span> <span class=\"token operator\">+</span> filename<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n OutputStream outputStream <span class=\"token operator\">=</span> response<span class=\"token punctuation\">.</span><span class=\"token function\">getOutputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n InputStream inputStream <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">FileInputStream</span><span class=\"token punctuation\">(</span>exportPath<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">byte</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> buffer <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">byte</span><span class=\"token punctuation\">[</span><span class=\"token number\">1024</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>i <span class=\"token operator\">=</span> inputStream<span class=\"token punctuation\">.</span><span class=\"token function\">read</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">!=</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n outputStream<span class=\"token punctuation\">.</span><span class=\"token function\">write</span><span class=\"token punctuation\">(</span>buffer<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n outputStream<span class=\"token punctuation\">.</span><span class=\"token function\">flush</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n outputStream<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n inputStream<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 处理导出数据逻辑 * * @param dataList: * 数据 * @param excelExportFileTypeEnum: * 导出报表模板类型 * @param exportPath: * 导出路径 * @return: 导出数据文件 * @author : zhengqing * @date : 2020/9/8 15:49 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> File <span class=\"token function\">handleExport</span><span class=\"token punctuation\">(</span>List<span class=\"token operator\">&lt;</span>Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span><span class=\"token operator\">&gt;</span> dataList<span class=\"token punctuation\">,</span>\n ExcelExportFileTypeEnum excelExportFileTypeEnum<span class=\"token punctuation\">,</span> String exportPath<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n Resource resource <span class=\"token operator\">=</span>\n <span class=\"token keyword\">new</span> <span class=\"token class-name\">ClassPathResource</span><span class=\"token punctuation\">(</span>Constants<span class=\"token punctuation\">.</span>DEFAULT_REPORT_EXPORT_FOLDER <span class=\"token operator\">+</span> excelExportFileTypeEnum<span class=\"token punctuation\">.</span><span class=\"token function\">getTemplateFile</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n InputStream templateInputStream <span class=\"token operator\">=</span> resource<span class=\"token punctuation\">.</span><span class=\"token function\">getInputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n log<span class=\"token punctuation\">.</span><span class=\"token function\">debug</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"导出文件地址为:{}\"</span><span class=\"token punctuation\">,</span> exportPath<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">// 创建文件</span>\n File exportFile <span class=\"token operator\">=</span> FileUtil<span class=\"token punctuation\">.</span><span class=\"token function\">touch</span><span class=\"token punctuation\">(</span>exportPath<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">// 列表数据将存储到指定的excel文件路径</span>\n OutputStream out <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">FileOutputStream</span><span class=\"token punctuation\">(</span>exportPath<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 这里的context是jxls框架上的context内容</span>\n Context context <span class=\"token operator\">=</span> PoiTransformer<span class=\"token punctuation\">.</span><span class=\"token function\">createInitialContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 将列表参数放入context中</span>\n context<span class=\"token punctuation\">.</span><span class=\"token function\">putVar</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dataList\"</span><span class=\"token punctuation\">,</span> dataList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Workbook workbook <span class=\"token operator\">=</span> WorkbookFactory<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>templateInputStream<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// Changing name of the first sheet</span>\n workbook<span class=\"token punctuation\">.</span><span class=\"token function\">setSheetName</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> excelExportFileTypeEnum<span class=\"token punctuation\">.</span><span class=\"token function\">getSheetName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n PoiTransformer transformer <span class=\"token operator\">=</span> PoiTransformer<span class=\"token punctuation\">.</span><span class=\"token function\">createTransformer</span><span class=\"token punctuation\">(</span>workbook<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n transformer<span class=\"token punctuation\">.</span><span class=\"token function\">setOutputStream</span><span class=\"token punctuation\">(</span>out<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 将列表数据按照模板文件中的格式生成</span>\n JxlsHelper<span class=\"token punctuation\">.</span><span class=\"token function\">getInstance</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">processTemplate</span><span class=\"token punctuation\">(</span>context<span class=\"token punctuation\">,</span> transformer<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n templateInputStream<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n out<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> exportFile<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"3_265\"></a>3、其中全局常用变量+导入导出所需枚举类+测试业务数据类</h4> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Constants</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * 导入导出文件相关 */</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> String DEFAULT_REPORT_IMPORT_FOLDER <span class=\"token operator\">=</span> <span class=\"token string\">\"/report/import\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> String DEFAULT_REPORT_EXPORT_FOLDER <span class=\"token operator\">=</span> <span class=\"token string\">\"/report/export\"</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 系统分隔符 */</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> String SYSTEM_SEPARATOR <span class=\"token operator\">=</span> <span class=\"token string\">\"/\"</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 获取项目根目录 */</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> String PROJECT_ROOT_DIRECTORY <span class=\"token operator\">=</span> System<span class=\"token punctuation\">.</span><span class=\"token function\">getProperty</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"user.dir\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">replaceAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\\\\\\\\\"</span><span class=\"token punctuation\">,</span> SYSTEM_SEPARATOR<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * excel导出测试临时存储路径 */</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> String FILE_PATH_TEST_EXPORT_EXCEL <span class=\"token operator\">=</span> PROJECT_ROOT_DIRECTORY <span class=\"token operator\">+</span> <span class=\"token string\">\"/excel.xls\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Getter</span>\n<span class=\"token annotation punctuation\">@AllArgsConstructor</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">enum</span> ExcelImportFileTypeEnum <span class=\"token punctuation\">{\n <!-- --></span>\n\n 测试<span class=\"token punctuation\">(</span><span class=\"token string\">\"/测试.xml\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 导入映射文件XML */</span>\n <span class=\"token keyword\">private</span> String mappingXml<span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Getter</span>\n<span class=\"token annotation punctuation\">@AllArgsConstructor</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">enum</span> ExcelExportFileTypeEnum <span class=\"token punctuation\">{\n <!-- --></span>\n\n 测试<span class=\"token punctuation\">(</span><span class=\"token string\">\"/测试导出模板.xls\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"测试\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 导出模板文件 */</span>\n <span class=\"token keyword\">private</span> String templateFile<span class=\"token punctuation\">;</span>\n <span class=\"token comment\">/** * 导出表格名 */</span>\n <span class=\"token keyword\">private</span> String sheetName<span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Data</span>\n<span class=\"token annotation punctuation\">@Builder</span>\n<span class=\"token annotation punctuation\">@NoArgsConstructor</span>\n<span class=\"token annotation punctuation\">@AllArgsConstructor</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">UserInfoBO</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token keyword\">private</span> String id<span class=\"token punctuation\">;</span>\n\n <span class=\"token keyword\">private</span> String name<span class=\"token punctuation\">;</span>\n\n <span class=\"token keyword\">private</span> String age<span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"4Excel_344\"></a>4、导出Excel模板配置</h4> \n <p><img src=\"https://img-blog.csdnimg.cn/20200912123039478.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"_jxarea_348\"></a>① <code>jx:area</code>标识区域最后一个单元格的引用</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200912123517920.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"_jxeach_352\"></a>② <code>jx:each</code>标识数据循环处理</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200912123724175.png#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"5Excel_356\"></a>5、导入Excel解析配置</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token prolog\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>workbook</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- ① 指定读取哪一个sheet: name=\"测试\" ② 如果只是读取第一个的话,可使用: idx=\"0\" --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>worksheet</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>测试<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 表头开始至结束行 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>section</span> <span class=\"token attr-name\">startRow</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">endRow</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>1<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 开始循环读取文件数据,配置开始行,items映射的list var映射的bean varType 类路径 startRow:开始循环的行数 endRow-startRow:循环体的大小,0代表一行,依次论推 每循环一次,判断是否结束,不结束继续循环,直至结束 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>loop</span> <span class=\"token attr-name\">startRow</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">endRow</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">items</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>dataList<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">var</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>item<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">varType</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>com.zhengqing.demo.bo.UserInfoBO<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 循环开始行 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>section</span> <span class=\"token attr-name\">startRow</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">endRow</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 循环中每一次的节点属性配置 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>mapping</span> <span class=\"token attr-name\">row</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">col</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>0<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>item.id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>mapping</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>mapping</span> <span class=\"token attr-name\">row</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">col</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>1<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>item.name<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>mapping</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>mapping</span> <span class=\"token attr-name\">row</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">col</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>item.age<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>mapping</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>section</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 结束条件配置 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>loopbreakcondition</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rowcheck</span> <span class=\"token attr-name\">offset</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>0<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 空白结束不填 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>cellcheck</span> <span class=\"token attr-name\">offset</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>0<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rowcheck</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>loopbreakcondition</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>loop</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>worksheet</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>workbook</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"6api_392\"></a>6、测试api</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/api/test\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TestController</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/exportData\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">exportData</span><span class=\"token punctuation\">(</span>HttpServletResponse response<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>UserInfoBO<span class=\"token punctuation\">&gt;</span></span> userInfoList <span class=\"token operator\">=</span> Lists<span class=\"token punctuation\">.</span><span class=\"token function\">newArrayList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n userInfoList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">UserInfoBO</span><span class=\"token punctuation\">(</span>String<span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"张三\"</span> <span class=\"token operator\">+</span> i<span class=\"token punctuation\">,</span> String<span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span>i <span class=\"token operator\">*</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n List<span class=\"token operator\">&lt;</span>Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span><span class=\"token operator\">&gt;</span> dataList <span class=\"token operator\">=</span>\n JSON<span class=\"token punctuation\">.</span><span class=\"token function\">parseObject</span><span class=\"token punctuation\">(</span>JSON<span class=\"token punctuation\">.</span><span class=\"token function\">toJSONString</span><span class=\"token punctuation\">(</span>userInfoList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">TypeReference</span><span class=\"token operator\">&lt;</span>List<span class=\"token operator\">&lt;</span>Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span><span class=\"token operator\">&gt;&gt;</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n ExcelUtil<span class=\"token punctuation\">.</span><span class=\"token function\">export</span><span class=\"token punctuation\">(</span>dataList<span class=\"token punctuation\">,</span> ExcelExportFileTypeEnum<span class=\"token punctuation\">.</span>测试<span class=\"token punctuation\">,</span> Constants<span class=\"token punctuation\">.</span>FILE_PATH_TEST_EXPORT_EXCEL<span class=\"token punctuation\">,</span> response<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">// @PostMapping(\"/importData\")</span>\n <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/importData\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">importData</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@RequestParam</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"file\"</span><span class=\"token punctuation\">,</span> required <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span> MultipartFile file<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>UserInfoBO<span class=\"token punctuation\">&gt;</span></span> userInfoList <span class=\"token operator\">=</span> Lists<span class=\"token punctuation\">.</span><span class=\"token function\">newArrayList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 本地File文件转MultipartFile作临时测试前端上传文件导入数据</span>\n File fileLocal <span class=\"token operator\">=</span> FileUtil<span class=\"token punctuation\">.</span><span class=\"token function\">newFile</span><span class=\"token punctuation\">(</span>Constants<span class=\"token punctuation\">.</span>FILE_PATH_TEST_EXPORT_EXCEL<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n InputStream inputStream <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">FileInputStream</span><span class=\"token punctuation\">(</span>fileLocal<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n MultipartFile multipartFile <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MockMultipartFile</span><span class=\"token punctuation\">(</span>fileLocal<span class=\"token punctuation\">.</span><span class=\"token function\">getName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> inputStream<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n ExcelUtil<span class=\"token punctuation\">.</span><span class=\"token function\">read</span><span class=\"token punctuation\">(</span>userInfoList<span class=\"token punctuation\">,</span> ExcelImportFileTypeEnum<span class=\"token punctuation\">.</span>测试<span class=\"token punctuation\">,</span> multipartFile<span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>userInfoList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">Exception</span> e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> e<span class=\"token punctuation\">.</span><span class=\"token function\">getMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"SUCCESS\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <hr> \n <h3><a id=\"demo_434\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200912124119866.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 学会下一次进步,是做大自己的有效法则。因此千万不要让自己睡在已有的成功温床上。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108547861', '2020-09-12 12:49:56', 1, '2020-11-07 15:21:16', 1, '2020-11-07 15:21:16', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (10, 1, 108423264, '解决SpringBoot2.3.3版本文件上传时MultipartFile为空值问题', '----- -----②、error大全', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h4><a id=\"_0\"></a>一、问题发现</h4> \n <p>前段之间为了尝鲜,小编将SpringBoot升级到<code>2.3.3</code>版本,体验了<code>优雅停机</code>的功能,感觉那是非常的舒服,当然项目升级遇到的问题也不少,比如新版本中去掉了部分依赖,需要自己手动引入等等…</p> \n <p>然而最近在上传文件时,发现自己的项目<code>MultipartFile</code>取不到值,这种问题根据不同的环境出现原因也不同,ex:</p> \n <ol>\n <li>前后端参数名对应不一致</li>\n <li><code>spring.servlet.multipart.enabled=false</code>即关闭文件上传支持</li>\n <li>配置文件中指定了文件上传时的大小值问题</li>\n <li>切换内嵌容器<code>tomcat</code>到<code>undertow</code>的配置问题</li>\n <li><code>spring.servlet.multipart.location=/tmp</code>指定了临时文件站,但路径不存在</li>\n <li>多次读取<code>HttpServletRequest</code>流</li>\n <li>springboot已经有<code>CommonsMultipartResolver</code>,需要排除原有的Multipart配置<code>@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})</code></li>\n </ol> \n <p>小编之前配置过多次读取流来解决流只能读一次的问题,如下:</p> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">package</span> com<span class=\"token punctuation\">.</span>zhengqing<span class=\"token punctuation\">.</span>utils<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>BufferedReader<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>ByteArrayInputStream<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>IOException<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>io<span class=\"token punctuation\">.</span>InputStreamReader<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> javax<span class=\"token punctuation\">.</span>servlet<span class=\"token punctuation\">.</span>ReadListener<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> javax<span class=\"token punctuation\">.</span>servlet<span class=\"token punctuation\">.</span>ServletInputStream<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> javax<span class=\"token punctuation\">.</span>servlet<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>HttpServletRequest<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> javax<span class=\"token punctuation\">.</span>servlet<span class=\"token punctuation\">.</span>http<span class=\"token punctuation\">.</span>HttpServletRequestWrapper<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> lombok<span class=\"token punctuation\">.</span>extern<span class=\"token punctuation\">.</span>slf4j<span class=\"token punctuation\">.</span>Slf4j<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>springframework<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>StreamUtils<span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MyMultiReadHttpServletRequest</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">HttpServletRequestWrapper</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * 用于将流保存下来 */</span>\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">byte</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> body<span class=\"token punctuation\">;</span>\n\n <span class=\"token keyword\">public</span> <span class=\"token function\">MyMultiReadHttpServletRequest</span><span class=\"token punctuation\">(</span>HttpServletRequest request<span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> IOException <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n body <span class=\"token operator\">=</span> StreamUtils<span class=\"token punctuation\">.</span><span class=\"token function\">copyToByteArray</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">.</span><span class=\"token function\">getInputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> BufferedReader <span class=\"token function\">getReader</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> IOException <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">BufferedReader</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">InputStreamReader</span><span class=\"token punctuation\">(</span><span class=\"token function\">getInputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> ServletInputStream <span class=\"token function\">getInputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> IOException <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">final</span> ByteArrayInputStream bais <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ByteArrayInputStream</span><span class=\"token punctuation\">(</span>body<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ServletInputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> <span class=\"token function\">read</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> IOException <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> bais<span class=\"token punctuation\">.</span><span class=\"token function\">read</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">boolean</span> <span class=\"token function\">isFinished</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">boolean</span> <span class=\"token function\">isReady</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setReadListener</span><span class=\"token punctuation\">(</span>ReadListener readListener<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span><span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>之后小编将springboot版本切换到<code>2.2.0</code>之前的版本发现可以正常在controller层的方法参数中读到<code>MultipartFile</code>值,但之后的版本始终拿不到值,具体原因目前暂时未知!!!估计是版本升级后某些配置问题~</p> \n <h4><a id=\"_77\"></a>二、问题解决</h4> \n <p>虽然具体原因未知,但是可以用一种曲线救国的方式拿到前端传过来的<code>MultipartFile</code>参数值,如下:</p> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@PostMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/importData\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token annotation punctuation\">@ApiOperation</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"导入数据\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> String <span class=\"token function\">importData</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@RequestParam</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"file\"</span><span class=\"token punctuation\">,</span> required <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span> MultipartFile file<span class=\"token punctuation\">,</span>\n HttpServletRequest request<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n MultipartResolver resolver <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CommonsMultipartResolver</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">.</span><span class=\"token function\">getSession</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getServletContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n MultipartHttpServletRequest multipartRequest <span class=\"token operator\">=</span> resolver<span class=\"token punctuation\">.</span><span class=\"token function\">resolveMultipart</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n MultipartFile fileNew <span class=\"token operator\">=</span> multipartRequest<span class=\"token punctuation\">.</span><span class=\"token function\">getFile</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"file\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> stCrawlerArticleInfoService<span class=\"token punctuation\">.</span><span class=\"token function\">importData</span><span class=\"token punctuation\">(</span>fileNew<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>上传文件时可能还会出现报错:<code>org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/fileupload/disk/DiskFileItemFactory</code></p> \n <p>需要添加如下依赖解决:</p> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/commons-io/commons-io --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>commons-io<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>commons-io<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>2.7<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>commons-fileupload<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>commons-fileupload<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>1.4<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <p>最终如下取到上传的文件数据:</p> \n <p><img src=\"https://img-blog.csdnimg.cn/2020090519313269.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <blockquote> \n <p>今日分享语句:这世上,没有谁活得比谁容易,只是有人在呼天抢地,有人在默默努力。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108423264', '2020-09-05 19:35:57', 1, '2020-11-07 15:21:17', 1, '2020-11-07 15:21:17', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (11, 1, 108258130, 'SpringBoot(32) 整合Forest实现调用第三方接口', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <h6><a id=\"Forest_2\"></a>Forest是什么?</h6> \n <p><code>Forest</code>是一个<code>高层</code>的、<code>极简</code>的<code>轻量级</code> <code>HTTP调用API框架</code>,让Java发送<code>HTTP/HTTPS</code>请求不再难。它比OkHttp和HttpClient更高层,比Feign更轻量,是封装调用第三方restful api client接口的好帮手。</p> \n <blockquote> \n <p>相比于直接使用Httpclient我们不再写一大堆重复的代码了,而是像调用本地方法一样去发送HTTP请求。</p> \n </blockquote> \n <ol>\n <li>项目地址:<a href=\"https://gitee.com/dt_flys/forest\">https://gitee.com/dt_flys/forest</a></li>\n <li>中文文档:<a href=\"https://dt_flys.gitee.io/forest/\">https://dt_flys.gitee.io/forest/</a></li>\n </ol> \n <p><img src=\"https://img-blog.csdnimg.cn/20200827135141821.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"SpringBootForest_14\"></a>二、SpringBoot整合Forest实现调用第三方接口</h3> \n <h4><a id=\"1pomxml_16\"></a>1、<code>pom.xml</code>中引入依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- Forest --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.dtflys.forest<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>spring-boot-starter-forest<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>1.4.0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2applicationyml_27\"></a>2、<code>application.yml</code>中相关配置</h4> \n <pre><code class=\"prism language-yml\"><span class=\"token comment\"># ========================== ↓↓↓↓↓↓ forest配置 ↓↓↓↓↓↓ ==========================</span>\n<span class=\"token key atrule\">forest</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">bean-id</span><span class=\"token punctuation\">:</span> config0 <span class=\"token comment\"># 在spring上下文中bean的id, 默认值为forestConfiguration</span>\n <span class=\"token key atrule\">backend</span><span class=\"token punctuation\">:</span> okhttp3 <span class=\"token comment\"># 后端HTTP API: okhttp3 【支持`okhttp3`/`httpclient`】</span>\n <span class=\"token key atrule\">max-connections</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1000 </span><span class=\"token comment\"># 连接池最大连接数,默认值为500</span>\n <span class=\"token key atrule\">max-route-connections</span><span class=\"token punctuation\">:</span> <span class=\"token number\">500 </span><span class=\"token comment\"># 每个路由的最大连接数,默认值为500</span>\n <span class=\"token key atrule\">timeout</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000 </span><span class=\"token comment\"># 请求超时时间,单位为毫秒, 默认值为3000</span>\n <span class=\"token key atrule\">connect-timeout</span><span class=\"token punctuation\">:</span> <span class=\"token number\">3000 </span><span class=\"token comment\"># 连接超时时间,单位为毫秒, 默认值为2000</span>\n <span class=\"token key atrule\">retry-count</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0 </span><span class=\"token comment\"># 请求失败后重试次数,默认为0次不重试</span>\n <span class=\"token key atrule\">ssl-protocol</span><span class=\"token punctuation\">:</span> SSLv3 <span class=\"token comment\"># 单向验证的HTTPS的默认SSL协议,默认为SSLv3</span>\n <span class=\"token key atrule\">logEnabled</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true </span><span class=\"token comment\"># 打开或关闭日志,默认为true</span>\n</code></pre> \n <h4><a id=\"3_43\"></a>3、配置扫描接口</h4> \n <p>在启动类上加上<code>@ForestScan</code>注解,并在<code>basePackages</code>属性中填写远程接口所在的包名</p> \n <pre><code class=\"prism language-java\"><span class=\"token comment\">// forest扫描远程接口所在的包名</span>\n<span class=\"token annotation punctuation\">@ForestScan</span><span class=\"token punctuation\">(</span>basePackages <span class=\"token operator\">=</span> <span class=\"token string\">\"com.zhengqing.demo.rpc.client\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token annotation punctuation\">@SpringBootApplication</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">DemoApplication</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span>String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n SpringApplication<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span>DemoApplication<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> args<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200827143630280.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"4_62\"></a>4、构建请求接口</h4> \n <blockquote> \n <p>温馨小提示:下面只是简单请求模拟测试,更多可参考官方文档!</p> \n </blockquote> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">MyClient</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * 本地测试接口 */</span>\n <span class=\"token annotation punctuation\">@Get</span><span class=\"token punctuation\">(</span>url <span class=\"token operator\">=</span> <span class=\"token string\">\"http://127.0.0.1:80/demo/index\"</span><span class=\"token punctuation\">)</span>\n String <span class=\"token function\">index</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Get</span><span class=\"token punctuation\">(</span>url <span class=\"token operator\">=</span> <span class=\"token string\">\"http://127.0.0.1:80/demo/hello?msg=${msg}\"</span><span class=\"token punctuation\">)</span>\n String <span class=\"token function\">hello</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@DataVariable</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"msg\"</span><span class=\"token punctuation\">)</span> String msg<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 高德地图API */</span>\n <span class=\"token annotation punctuation\">@Get</span><span class=\"token punctuation\">(</span>url <span class=\"token operator\">=</span> <span class=\"token string\">\"http://ditu.amap.com/service/regeo?longitude=${longitude}&amp;latitude=${latitude}\"</span><span class=\"token punctuation\">)</span>\n Map <span class=\"token function\">getLocation</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@DataVariable</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"longitude\"</span><span class=\"token punctuation\">)</span> String longitude<span class=\"token punctuation\">,</span> <span class=\"token annotation punctuation\">@DataVariable</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"latitude\"</span><span class=\"token punctuation\">)</span> String latitude<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"5_87\"></a>5、测试</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token annotation punctuation\">@RunWith</span><span class=\"token punctuation\">(</span>SpringRunner<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n<span class=\"token annotation punctuation\">@SpringBootTest</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">DemoTest</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@Autowired</span>\n <span class=\"token keyword\">private</span> MyClient myClient<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Test</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">testForest</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> Exception <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 调用接口</span>\n String index <span class=\"token operator\">=</span> myClient<span class=\"token punctuation\">.</span><span class=\"token function\">index</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"index: 【{}】\"</span><span class=\"token punctuation\">,</span> index<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n \n String hello <span class=\"token operator\">=</span> myClient<span class=\"token punctuation\">.</span><span class=\"token function\">hello</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"测试...\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"hello: 【{}】\"</span><span class=\"token punctuation\">,</span> hello<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n Map location <span class=\"token operator\">=</span> myClient<span class=\"token punctuation\">.</span><span class=\"token function\">getLocation</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"121.475078\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"31.223577\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"location: 【{}】\"</span><span class=\"token punctuation\">,</span> location<span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200827143857676.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_117\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 能力配不上野心,是所有烦扰的根源。这个世界是公平的,你要想得到,就得学会付出和坚持。每个人都是通过自己的努力,去决定生活的样子。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108258130', '2020-08-27 14:46:48', 1, '2020-11-07 15:21:18', 1, '2020-11-07 15:21:18', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (12, 1, 107927503, 'Aviator(3) 自定义函数IF', '----- -----①、Aviator', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/107913810\">Aviator(1) SpringBoot整合Aviator入门体验</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/107921112\">Aviator(2) 自定义函数ADD</a></li>\n <li>自定义函数和调用Java方法可参考:<a href=\"https://www.yuque.com/boyan-avfmj/aviatorscript/xbdgg2\">https://www.yuque.com/boyan-avfmj/aviatorscript/xbdgg2</a></li>\n </ol> \n <h3><a id=\"Aviator_IF_6\"></a>二、Aviator 自定义函数<code>IF</code></h3> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TestAviator_IF</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span>String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 注册函数`IF`</span>\n AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">addFunction</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Function_IF</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Object execute1 <span class=\"token operator\">=</span> AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span><span class=\"token string\">\" IF(1.0==1.0,100,200)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Object execute2 <span class=\"token operator\">=</span> AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"IF(1==1,IF(1&gt;=2,10,20),IF(10&lt;=20,30,40))\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>execute1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>execute2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">/** * &lt;p&gt; * Aviator 自定义函数`IF` * &lt;/p&gt; * * @author : zhengqing * @description : 继承`com.googlecode.aviator.runtime.function.AbstractFunction`,并覆写对应参数个数的方法即可 * @date : 2020/8/11 9:15 */</span>\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Function_IF</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AbstractFunction</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * IF函数实现逻辑处理 * * @param env: * 当前执行的上下文 * @param arg1: * if函数中的判断逻辑 * @param arg2: * arg1为true时的结果 * @param arg3: * arg1为false时的结果 * @return: com.googlecode.aviator.runtime.type.AviatorObject * @author : zhengqing * @date : 2020/8/11 9:17 */</span>\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> AviatorObject <span class=\"token function\">call</span><span class=\"token punctuation\">(</span>Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span> env<span class=\"token punctuation\">,</span> AviatorObject arg1<span class=\"token punctuation\">,</span> AviatorObject arg2<span class=\"token punctuation\">,</span> AviatorObject arg3<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n Boolean ifResult <span class=\"token operator\">=</span> FunctionUtils<span class=\"token punctuation\">.</span><span class=\"token function\">getBooleanValue</span><span class=\"token punctuation\">(</span>arg1<span class=\"token punctuation\">,</span> env<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Number ifTrue <span class=\"token operator\">=</span> FunctionUtils<span class=\"token punctuation\">.</span><span class=\"token function\">getNumberValue</span><span class=\"token punctuation\">(</span>arg2<span class=\"token punctuation\">,</span> env<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Number ifFalse <span class=\"token operator\">=</span> FunctionUtils<span class=\"token punctuation\">.</span><span class=\"token function\">getNumberValue</span><span class=\"token punctuation\">(</span>arg3<span class=\"token punctuation\">,</span> env<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>ifResult<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">AviatorDouble</span><span class=\"token punctuation\">(</span>ifTrue<span class=\"token punctuation\">.</span><span class=\"token function\">doubleValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">AviatorDouble</span><span class=\"token punctuation\">(</span>ifFalse<span class=\"token punctuation\">.</span><span class=\"token function\">doubleValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 返回方法名 */</span>\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">getName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"IF\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>运行结果如下:<br> <img src=\"https://img-blog.csdnimg.cn/20200811092310371.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_77\"></a>本文案例demo源码地址</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 当热诚变成习惯,恐惧和忧虑即无处容身。缺乏热诚的人也没有明确的目标。热诚使想象的轮子转动。一个人缺乏热诚就象汽车没有汽油。善于安排玩乐和工作,两者保持热诚,就是最快乐的人。热诚使平凡的话题变得生动。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107927503', '2020-08-11 09:25:47', 1, '2020-11-07 15:21:18', 1, '2020-11-07 15:21:18', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (13, 1, 108047537, 'SpringBoot(31) 整合MinIO实现文件上传与下载', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p><code>MinIO</code> 是一个基于<code>Apache License v2.0</code>开源协议的<code>对象存储</code>服务。它兼容亚马逊S3云存储服务接口,非常适合于存储<code>大容量非结构化</code>的数据,例如<code>图片</code>、<code>视频</code>、<code>日志文件</code>、<code>备份数据</code>和<code>容器/虚拟机镜像</code>等,而一个对象文件可以是任意大小,从几kb到最大5T不等。</p> \n <p>MinIO官方文档:<a href=\"https://docs.min.io/cn/\">https://docs.min.io/cn/</a></p> \n <h3><a id=\"DockerMinIO_6\"></a>二、Docker安装MinIO</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 环境准备</span>\n<span class=\"token function\">git</span> clone https://gitee.com/zhengqingya/docker-compose.git\n\n<span class=\"token comment\"># Liunx系统走此路径</span>\n<span class=\"token function\">cd</span> docker-compose/Liunx\n<span class=\"token comment\"># Windows系统走此路径</span>\n<span class=\"token function\">cd</span> docker-compose/Windows\n\n<span class=\"token comment\"># 运行服务</span>\ndocker-compose -f docker-compose-minio.yml -p minio up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1:9001/minio\"><code>http://127.0.0.1:9001/minio</code></a><br> 登录账号密码:<code>root/password</code></p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200817012304733.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70#pic_center\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"SpringBootMinIO_27\"></a>三、SpringBoot整合MinIO实现文件上传与下载</h3> \n <h4><a id=\"1pomxmlMinIO_29\"></a>1、<code>pom.xml</code>中引入<code>MinIO</code>依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>io.minio<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>minio<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>7.1.0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2applicationymlMinIO_39\"></a>2、<code>application.yml</code>中配置<code>MinIO</code></h4> \n <pre><code class=\"prism language-yml\"><span class=\"token comment\"># ====================== ↓↓↓↓↓↓ MinIO文件服务器 ↓↓↓↓↓↓ ======================</span>\n<span class=\"token key atrule\">minio</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">url</span><span class=\"token punctuation\">:</span> http<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span><span class=\"token number\">9001</span>\n <span class=\"token key atrule\">accessKey</span><span class=\"token punctuation\">:</span> root\n <span class=\"token key atrule\">secretKey</span><span class=\"token punctuation\">:</span> password\n <span class=\"token key atrule\">bucketName</span><span class=\"token punctuation\">:</span> test\n</code></pre> \n <h4><a id=\"3MinIO_50\"></a>3、MinIO属性类</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Data</span>\n<span class=\"token annotation punctuation\">@Configuration</span>\n<span class=\"token annotation punctuation\">@ConfigurationProperties</span><span class=\"token punctuation\">(</span>prefix <span class=\"token operator\">=</span> <span class=\"token string\">\"minio\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MinIoProperties</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * minio地址+端口号 */</span>\n <span class=\"token keyword\">private</span> String url<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * minio用户名 */</span>\n <span class=\"token keyword\">private</span> String accessKey<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * minio密码 */</span>\n <span class=\"token keyword\">private</span> String secretKey<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 文件桶的名称 */</span>\n <span class=\"token keyword\">private</span> String bucketName<span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"4MinIO_81\"></a>4、MinIO工具类</h4> \n <blockquote> \n <p>Java Client API参考文档:https://docs.min.io/cn/java-client-api-reference.html</p> \n </blockquote> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token annotation punctuation\">@Component</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MinIoUtil</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@Autowired</span>\n MinIoProperties minIoProperties<span class=\"token punctuation\">;</span>\n\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> MinioClient minioClient<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 初始化minio配置 * * @param : * @return: void * @date : 2020/8/16 20:56 */</span>\n <span class=\"token annotation punctuation\">@PostConstruct</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{\n <!-- --></span>\n minioClient <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MinioClient</span><span class=\"token punctuation\">(</span>minIoProperties<span class=\"token punctuation\">.</span><span class=\"token function\">getUrl</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> minIoProperties<span class=\"token punctuation\">.</span><span class=\"token function\">getAccessKey</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n minIoProperties<span class=\"token punctuation\">.</span><span class=\"token function\">getSecretKey</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token function\">createBucket</span><span class=\"token punctuation\">(</span>minIoProperties<span class=\"token punctuation\">.</span><span class=\"token function\">getBucketName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">Exception</span> e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n e<span class=\"token punctuation\">.</span><span class=\"token function\">printStackTrace</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"初始化minio配置异常: 【{}】\"</span><span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">.</span><span class=\"token function\">fillInStackTrace</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 判断 bucket是否存在 * * @param bucketName: * 桶名 * @return: boolean * @date : 2020/8/16 20:53 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">boolean</span> <span class=\"token function\">bucketExists</span><span class=\"token punctuation\">(</span>String bucketName<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">bucketExists</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 创建 bucket * * @param bucketName: * 桶名 * @return: void * @date : 2020/8/16 20:53 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">createBucket</span><span class=\"token punctuation\">(</span>String bucketName<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">boolean</span> isExist <span class=\"token operator\">=</span> minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">bucketExists</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>isExist<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">makeBucket</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 获取全部bucket * * @param : * @return: java.util.List&lt;io.minio.messages.Bucket&gt; * @date : 2020/8/16 23:28 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bucket<span class=\"token punctuation\">&gt;</span></span> <span class=\"token function\">getAllBuckets</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">listBuckets</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 文件上传 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param filePath: * 文件路径 * @return: void * @date : 2020/8/16 20:53 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">upload</span><span class=\"token punctuation\">(</span>String bucketName<span class=\"token punctuation\">,</span> String fileName<span class=\"token punctuation\">,</span> String filePath<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">putObject</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">,</span> filePath<span class=\"token punctuation\">,</span> null<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 文件上传 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param stream: * 文件流 * @return: java.lang.String : 文件url地址 * @date : 2020/8/16 23:40 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> String <span class=\"token function\">upload</span><span class=\"token punctuation\">(</span>String bucketName<span class=\"token punctuation\">,</span> String fileName<span class=\"token punctuation\">,</span> InputStream stream<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">putObject</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">,</span> stream<span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">PutObjectOptions</span><span class=\"token punctuation\">(</span>stream<span class=\"token punctuation\">.</span><span class=\"token function\">available</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token function\">getFileUrl</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 文件上传 * * @param bucketName: * 桶名 * @param file: * 文件 * @return: java.lang.String : 文件url地址 * @date : 2020/8/16 23:40 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> String <span class=\"token function\">upload</span><span class=\"token punctuation\">(</span>String bucketName<span class=\"token punctuation\">,</span> MultipartFile file<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">final</span> InputStream is <span class=\"token operator\">=</span> file<span class=\"token punctuation\">.</span><span class=\"token function\">getInputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">final</span> String fileName <span class=\"token operator\">=</span> file<span class=\"token punctuation\">.</span><span class=\"token function\">getOriginalFilename</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">putObject</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">,</span> is<span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">PutObjectOptions</span><span class=\"token punctuation\">(</span>is<span class=\"token punctuation\">.</span><span class=\"token function\">available</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n is<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token function\">getFileUrl</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 删除文件 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @return: void * @date : 2020/8/16 20:53 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">deleteFile</span><span class=\"token punctuation\">(</span>String bucketName<span class=\"token punctuation\">,</span> String fileName<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">removeObject</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 下载文件 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param response: * @return: void * @date : 2020/8/17 0:34 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">download</span><span class=\"token punctuation\">(</span>String bucketName<span class=\"token punctuation\">,</span> String fileName<span class=\"token punctuation\">,</span> HttpServletResponse response<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 获取对象的元数据</span>\n <span class=\"token keyword\">final</span> ObjectStat stat <span class=\"token operator\">=</span> minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">statObject</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n response<span class=\"token punctuation\">.</span><span class=\"token function\">setContentType</span><span class=\"token punctuation\">(</span>stat<span class=\"token punctuation\">.</span><span class=\"token function\">contentType</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n response<span class=\"token punctuation\">.</span><span class=\"token function\">setCharacterEncoding</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"UTF-8\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n response<span class=\"token punctuation\">.</span><span class=\"token function\">setHeader</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Content-Disposition\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"attachment;filename=\"</span> <span class=\"token operator\">+</span> URLEncoder<span class=\"token punctuation\">.</span><span class=\"token function\">encode</span><span class=\"token punctuation\">(</span>fileName<span class=\"token punctuation\">,</span> <span class=\"token string\">\"UTF-8\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n InputStream is <span class=\"token operator\">=</span> minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">getObject</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n IOUtils<span class=\"token punctuation\">.</span><span class=\"token function\">copy</span><span class=\"token punctuation\">(</span>is<span class=\"token punctuation\">,</span> response<span class=\"token punctuation\">.</span><span class=\"token function\">getOutputStream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n is<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 获取minio文件的下载地址 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @return: java.lang.String * @date : 2020/8/16 22:07 */</span>\n <span class=\"token annotation punctuation\">@SneakyThrows</span><span class=\"token punctuation\">(</span>Exception<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> String <span class=\"token function\">getFileUrl</span><span class=\"token punctuation\">(</span>String bucketName<span class=\"token punctuation\">,</span> String fileName<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> minioClient<span class=\"token punctuation\">.</span><span class=\"token function\">presignedGetObject</span><span class=\"token punctuation\">(</span>bucketName<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"5MinIO_265\"></a>5、MinIO测试接口</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/api/minio\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token annotation punctuation\">@Api</span><span class=\"token punctuation\">(</span>tags <span class=\"token operator\">=</span> <span class=\"token punctuation\">{\n <!-- --></span><span class=\"token string\">\"MinIO测试接口\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MinIoController</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@Autowired</span>\n MinIoProperties minIoProperties<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@ApiOperation</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"上传文件\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token annotation punctuation\">@PostMapping</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"/upload\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">upload</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@RequestParam</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"file\"</span><span class=\"token punctuation\">)</span> MultipartFile file<span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> Exception <span class=\"token punctuation\">{\n <!-- --></span>\n String fileUrl <span class=\"token operator\">=</span> MinIoUtil<span class=\"token punctuation\">.</span><span class=\"token function\">upload</span><span class=\"token punctuation\">(</span>minIoProperties<span class=\"token punctuation\">.</span><span class=\"token function\">getBucketName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> file<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"文件下载地址:\"</span> <span class=\"token operator\">+</span> fileUrl<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@ApiOperation</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"下载文件\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"/download\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">download</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@RequestParam</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"fileName\"</span><span class=\"token punctuation\">)</span> String fileName<span class=\"token punctuation\">,</span> HttpServletResponse response<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n MinIoUtil<span class=\"token punctuation\">.</span><span class=\"token function\">download</span><span class=\"token punctuation\">(</span>minIoProperties<span class=\"token punctuation\">.</span><span class=\"token function\">getBucketName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">,</span> response<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@ApiOperation</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"删除文件\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"/delete\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">delete</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@RequestParam</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"fileName\"</span><span class=\"token punctuation\">)</span> String fileName<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n MinIoUtil<span class=\"token punctuation\">.</span><span class=\"token function\">deleteFile</span><span class=\"token punctuation\">(</span>minIoProperties<span class=\"token punctuation\">.</span><span class=\"token function\">getBucketName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"删除成功\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <hr> \n <h3><a id=\"demo_301\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 努力是一种生活态度,与年龄无关。所以,无论什么时候,千万不可放纵自己,给自己找懒散和拖延的借口,对自己严格一点儿,时间长了,努力便成为一种心理习惯,一种生活方式!</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/108047537', '2020-08-17 01:25:50', 1, '2020-11-07 15:21:18', 1, '2020-11-07 15:21:18', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (14, 1, 107921112, 'Aviator(2) 自定义函数ADD', '----- -----①、Aviator', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/107913810\">Aviator(1) SpringBoot整合Aviator入门体验</a></li>\n <li>自定义函数和调用Java方法可参考:<a href=\"https://www.yuque.com/boyan-avfmj/aviatorscript/xbdgg2\">https://www.yuque.com/boyan-avfmj/aviatorscript/xbdgg2</a></li>\n </ol> \n <h3><a id=\"Aviator_ADD_5\"></a>二、Aviator 自定义函数<code>ADD</code></h3> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TestAviator_ADD</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span>String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 注册函数`ADD`</span>\n AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">addFunction</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Function_ADD</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Object execute1 <span class=\"token operator\">=</span> AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ADD(10.5, 20)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Object execute2 <span class=\"token operator\">=</span> AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ADD(ADD(1, 2), 100)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>execute1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>execute2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">/** * &lt;p&gt; * 自定义函数`ADD` * &lt;/p&gt; * * @author : zhengqing * @description : 继承`com.googlecode.aviator.runtime.function.AbstractFunction`,并覆写对应参数个数的方法即可 * @date : 2020/8/10 21:30 */</span>\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Function_ADD</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AbstractFunction</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * 实现将两个参数相加,返回浮点结果 AviatorDouble * * @param env:当前执行的上下文 * @param arg1: * 左参数 * @param arg2: * 右参数 * @return: com.googlecode.aviator.runtime.type.AviatorObject * @date : 2020/8/10 21:33 */</span>\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> AviatorObject <span class=\"token function\">call</span><span class=\"token punctuation\">(</span>Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span> env<span class=\"token punctuation\">,</span> AviatorObject arg1<span class=\"token punctuation\">,</span> AviatorObject arg2<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n Number left <span class=\"token operator\">=</span> FunctionUtils<span class=\"token punctuation\">.</span><span class=\"token function\">getNumberValue</span><span class=\"token punctuation\">(</span>arg1<span class=\"token punctuation\">,</span> env<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Number right <span class=\"token operator\">=</span> FunctionUtils<span class=\"token punctuation\">.</span><span class=\"token function\">getNumberValue</span><span class=\"token punctuation\">(</span>arg2<span class=\"token punctuation\">,</span> env<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">AviatorDouble</span><span class=\"token punctuation\">(</span>left<span class=\"token punctuation\">.</span><span class=\"token function\">doubleValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> right<span class=\"token punctuation\">.</span><span class=\"token function\">doubleValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 返回方法名 */</span>\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">getName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"ADD\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>运行结果如下:<br> <img src=\"https://img-blog.csdnimg.cn/20200810214257836.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_67\"></a>本文案例demo源码地址</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 人生每天都要笑,生活的下一秒发生什么,我们谁也不知道。所以,放下心里的纠结,放下脑中的烦恼,放下生活的不愉快,活在当下。人生喜怒哀乐,百般形态,不如在心里全部淡然处之,轻轻一笑,让心更自在,生命更恒久。积极者相信只有推动自己才能推动世界,只要推动自己就能推动世界。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107921112', '2020-08-10 21:49:00', 1, '2020-11-07 15:21:18', 1, '2020-11-07 15:21:18', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (15, 1, 107913810, 'Aviator(1) SpringBoot整合Aviator入门体验', '----- -----①、Aviator', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p>AviatorScript 是一门<code>高性能</code>、<code>轻量级</code>寄宿于 <code>JVM</code> 之上的<code>脚本语言</code>。</p> \n <ol>\n <li>GitHub地址:<a href=\"https://github.com/killme2008/aviator\">https://github.com/killme2008/aviator</a></li>\n <li>AviatorScript 文档: <a href=\"https://www.yuque.com/boyan-avfmj/aviatorscript\">https://www.yuque.com/boyan-avfmj/aviatorscript</a></li>\n </ol> \n <p><img src=\"https://img-blog.csdnimg.cn/2020081015172334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"SpringBootAviator_9\"></a>二、SpringBoot整合Aviator入门</h3> \n <blockquote> \n <p>温馨小提示:本文demo基于springboot<code>2.3.1.RELEASE</code>版本</p> \n </blockquote> \n <h4><a id=\"1pomxmlaviator_13\"></a>1、<code>pom.xml</code>中引入<code>aviator</code>依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- 表达式引擎 Aviator --&gt;</span>\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/com.googlecode.aviator/aviator --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.googlecode.aviator<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>aviator<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>5.1.2<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2_25\"></a>2、体验</h4> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TestAviator</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span>String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"-----------------------------------------------------------------\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"算术表达式【1+1】: \"</span> <span class=\"token operator\">+</span> AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"1+1\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"逻辑表达式【1==1】: \"</span> <span class=\"token operator\">+</span> AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"1==1\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"三元表达式【1==1 ? \'对\' : \'错\'】: \"</span> <span class=\"token operator\">+</span> AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"1==1 ? \'对\' : \'错\'\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"函数调用【6的3次方】: \"</span> <span class=\"token operator\">+</span> AviatorEvaluator<span class=\"token punctuation\">.</span><span class=\"token function\">execute</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"math.pow(6,3)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"-----------------------------------------------------------------\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>运行效果:<br> <img src=\"https://img-blog.csdnimg.cn/2020081016131877.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_48\"></a>本文案例demo源码地址</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 起点低怕什么,大不了加倍努力。人生就像一场马拉松比赛,拼的不是起点,而是坚持的耐力和成长的速度。只要努力不止,进步也会不止。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107913810', '2020-08-10 16:20:23', 1, '2020-11-07 15:21:18', 1, '2020-11-07 15:21:18', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (16, 1, 107577643, '【Jenkins持续集成(五)】Linux安装教程', '----- -----⑦、Jenkins', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <blockquote> \n <p>Windows安装教程可参考:<a href=\"https://zhengqing.blog.csdn.net/article/details/95232353\">https://zhengqing.blog.csdn.net/article/details/95232353</a></p> \n </blockquote> \n <h3><a id=\"JDK_3\"></a>一、安装JDK</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 通过yum安装的默认路径为:`/usr/lib/jvm`</span>\nyum -y <span class=\"token function\">install</span> java-1.8.0-openjdk*\n</code></pre> \n <h6><a id=\"_10\"></a>配置环境变量</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">vi</span> /etc/profile\n</code></pre> \n <p>在文件最后加入以下内容:</p> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\">############################## ↓↓↓↓↓↓ set java environment ↓↓↓↓↓↓ #############################</span>\nJAVA_HOME<span class=\"token operator\">=</span>/usr/lib/jvm/java\nCLASSPATH<span class=\"token operator\">=</span>.:<span class=\"token variable\">$JAVA_HOME</span>/lib/dt.jar:<span class=\"token variable\">$JAVA_HOME</span>/lib/tools.jar:<span class=\"token variable\">$JAVA_HOME</span>/jre/lib/rt.jar\nPATH<span class=\"token operator\">=</span><span class=\"token variable\">$PATH</span><span class=\"token keyword\">:</span><span class=\"token variable\">$JAVA_HOME</span>/bin\n<span class=\"token function\">export</span> JAVA_HOME CLASSPATH PATH\n<span class=\"token comment\">###############################################################################################</span>\n</code></pre> \n <h6><a id=\"_27\"></a>使配置生效</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token keyword\">.</span> /etc/profile\n</code></pre> \n <h6><a id=\"java_33\"></a>查看java环境配置</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token keyword\">echo</span> <span class=\"token variable\">$JAVA_HOME</span>\n<span class=\"token keyword\">echo</span> <span class=\"token variable\">$PATH</span>\n</code></pre> \n <h6><a id=\"_40\"></a>验证</h6> \n <pre><code class=\"prism language-shell\">java\njavac\njava -version\n</code></pre> \n <h6><a id=\"JDK_48\"></a>如何卸载JDK???</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 查看CentOS自带JDK是否已安装:</span>\nyum list installed <span class=\"token operator\">|</span> <span class=\"token function\">grep</span> java\n<span class=\"token comment\"># 如果存在自带的jdk,删除自带的jdk</span>\nyum -y remove java-1.8.0-openjdk*\nyum -y remove tzdata-java.noarch\n</code></pre> \n <p>温馨小提示:这里创建目录存放之后要下载的安装包</p> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft\n<span class=\"token function\">cd</span> /IT_zhengqing/soft\n</code></pre> \n <h3><a id=\"Maven_64\"></a>二、安装Maven</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 法一:</span>\n<span class=\"token comment\"># 安装yum配置工具</span>\nyum <span class=\"token function\">install</span> -y yum-utils\n<span class=\"token comment\"># 使用配置工具配置第三方epel源仓库</span>\nyum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo\nyum-config-manager --enable epel-apache-maven\n<span class=\"token comment\"># 安装maven</span>\nyum <span class=\"token function\">install</span> -y apache-maven\n\n<span class=\"token comment\"># --------------------------- 法一失败 -------------------------------</span>\n\n<span class=\"token comment\"># 法二:</span>\n<span class=\"token comment\">#配置源</span>\n<span class=\"token function\">wget</span> http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo\n<span class=\"token function\">sed</span> -i s/\\<span class=\"token variable\">$releasever</span>/6/g /etc/yum.repos.d/epel-apache-maven.repo\n<span class=\"token comment\">#安装</span>\nyum <span class=\"token function\">install</span> -y maven\n\n<span class=\"token comment\"># --------------------------- 法二失败 -------------------------------</span>\n\n<span class=\"token comment\"># 法三:【成功】</span>\n<span class=\"token comment\"># 下载`apache-maven-3.6.3-bin.tar.gz` : http://maven.apache.org/download.cgi</span>\n<span class=\"token function\">wget</span> https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz\n<span class=\"token comment\"># 解压</span>\n<span class=\"token function\">tar</span> -zxvf apache-maven-3.6.3-bin.tar.gz\n</code></pre> \n <h6><a id=\"_94\"></a>配置环境变量</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">vi</span> /etc/profile\n</code></pre> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\">############################## ↓↓↓↓↓↓ set maven environment ↓↓↓↓↓↓ #############################</span>\nMAVEN_HOME<span class=\"token operator\">=</span>/IT_zhengqing/soft/apache-maven-3.6.3\nPATH<span class=\"token operator\">=</span><span class=\"token variable\">$PATH</span><span class=\"token keyword\">:</span><span class=\"token variable\">$JAVA_HOME</span>/bin:<span class=\"token variable\">$MAVEN_HOME</span>/bin\n<span class=\"token function\">export</span> MAVEN_HOME PATH\n<span class=\"token comment\">################################################################################################</span>\n</code></pre> \n <h6><a id=\"_108\"></a>使配置生效</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">source</span> /etc/profile\n</code></pre> \n <h6><a id=\"_114\"></a>验证</h6> \n <pre><code class=\"prism language-shell\">mvn -v\n</code></pre> \n <h3><a id=\"NodeJS_120\"></a>三、安装NodeJS</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 下载`node-v12.18.3-linux-x64.tar.xz` : https://nodejs.org/en/download/</span>\n<span class=\"token function\">wget</span> https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz\n<span class=\"token comment\"># 解压</span>\n<span class=\"token function\">tar</span> -xvf node-v12.18.3-linux-x64.tar.xz\n</code></pre> \n <h6><a id=\"_129\"></a>配置环境变量</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">vi</span> /etc/profile\n</code></pre> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\">############################## ↓↓↓↓↓↓ set nodejs environment ↓↓↓↓↓↓ #############################</span>\nNODEJS_HOME<span class=\"token operator\">=</span>/IT_zhengqing/soft/node-v12.18.3-linux-x64\nPATH<span class=\"token operator\">=</span><span class=\"token variable\">$PATH</span><span class=\"token keyword\">:</span><span class=\"token variable\">$NODEJS_HOME</span>/bin\n<span class=\"token function\">export</span> NODEJS_HOME PATH\n<span class=\"token comment\">#################################################################################################</span>\n</code></pre> \n <h6><a id=\"_143\"></a>使配置生效</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">source</span> /etc/profile\n</code></pre> \n <h6><a id=\"_149\"></a>验证</h6> \n <pre><code class=\"prism language-shell\">node -v\n<span class=\"token function\">npm</span> -v\n</code></pre> \n <h3><a id=\"Tomcat__157\"></a>四、安装Tomcat (可选)</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 下载`apache-tomcat-9.0.38-src.tar.gz` : https://tomcat.apache.org/download-90.cgi</span>\n<span class=\"token function\">wget</span> https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.38/src/apache-tomcat-9.0.38-src.tar.gz\n<span class=\"token comment\"># 解压</span>\n<span class=\"token function\">tar</span> -zxv -f apache-tomcat-9.0.38-src.tar.gz\n</code></pre> \n <h3><a id=\"Git_166\"></a>五、Git</h3> \n <pre><code class=\"prism language-shell\">yum <span class=\"token function\">install</span> -y <span class=\"token function\">git</span>\n</code></pre> \n <h3><a id=\"Jenkins_172\"></a>六、安装Jenkins</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 创建目录</span>\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/jenkins\n<span class=\"token function\">cd</span> /IT_zhengqing/soft/jenkins\n<span class=\"token comment\"># 下载 【 根据自己需要的版本下载 http://mirrors.jenkins.io/war-stable/ 】</span>\n<span class=\"token function\">wget</span> http://mirrors.jenkins.io/war-stable/2.235.2/jenkins.war\n<span class=\"token comment\"># 启动 (这里指定新的端口10000运行)</span>\n<span class=\"token function\">nohup</span> java -jar jenkins.war --ajp13Port<span class=\"token operator\">=</span>-1 --httpPort<span class=\"token operator\">=</span>10000 <span class=\"token operator\">&amp;</span>\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200725134951836.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 运行成功后,jenkins配置方面可参考:<br> 【Jenkins持续集成(二)】Windows上安装Jenkins教程: <a href=\"https://zhengqing.blog.csdn.net/article/details/95232353\">https://zhengqing.blog.csdn.net/article/details/95232353</a></p> \n <p>其中<code>全局工具配置</code>: <a href=\"http://localhost:10000/jenkins/configureTools/\">http://ip:10000/jenkins/configureTools/</a><br> Liunx配置如下:</p> \n <blockquote> \n <p>路径可能有所差异</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20200725135350540.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"OTHER_195\"></a>七、OTHER</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 关闭jenkins</span>\nhttp://ip:10000/exit \n\n<span class=\"token comment\"># 重启jenkies</span>\nhttp://ip:10000/restart \n\n<span class=\"token comment\"># 重新加载配置信息</span>\nhttp://ip:10000/reload \n</code></pre> \n <hr> \n <h3><a id=\"DockerJenkins_210\"></a>八、Docker如何安装Jenkins???</h3> \n <blockquote> \n <p>参考:<a href=\"https://gitee.com/zhengqingya/docker-compose\">https://gitee.com/zhengqingya/docker-compose</a></p> \n </blockquote> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">git</span> clone https://gitee.com/zhengqingya/docker-compose.git\n<span class=\"token function\">cd</span> docker-compose/Liunx\ndocker-compose -f docker-compose-jenkins.yml -p jenkins up -d\n</code></pre> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 真正的强大,不是我们从来没有眼泪,而是流着泪还能微笑着坚定前行。人生总是在前行,那些所有你以为过不去的过去,最后都留在了最后。没有安全感的孩子,会爱音乐,会怕黑,却习惯晚睡。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107577643', '2020-07-25 14:03:16', 1, '2020-11-07 15:21:19', 1, '2020-11-07 15:21:19', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (17, 1, 107500344, 'Docker(13) docker-compose安装Graylog实现日志监控', '----- -----⑤、Docker', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li>Graylog官网:<a href=\"https://www.graylog.org/\">https://www.graylog.org/</a></li>\n <li>Graylog Docker安装文档:<a href=\"https://docs.graylog.org/en/3.3/pages/installation/docker.html\">https://docs.graylog.org/en/3.3/pages/installation/docker.html</a></li>\n </ol> \n <h6><a id=\"Graylog_5\"></a>Graylog是什么?</h6> \n <p>一个比<code>ELK</code>轻的分布式日志管理平台…</p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200721223036396.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"dockercomposeGraylog_12\"></a>二、<code>docker-compose</code>安装<code>Graylog</code></h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 环境准备</span>\n<span class=\"token function\">git</span> clone https://gitee.com/zhengqingya/docker-compose.git\n\n<span class=\"token comment\"># Liunx系统走此路径</span>\n<span class=\"token function\">cd</span> docker-compose/Liunx\n<span class=\"token comment\"># Windows系统走此路径</span>\n<span class=\"token function\">cd</span> docker-compose/Windows\n\n<span class=\"token comment\"># 运行服务</span>\ndocker-compose -f docker-compose-graylog.yml -p graylog_demo up -d\n</code></pre> \n <p>等待运行完成…<br> <img src=\"https://img-blog.csdnimg.cn/20200721224826691.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"Graylog_30\"></a>三、Graylog配置</h3> \n <p>访问地址:<a href=\"http://127.0.0.1:9001\"><code>http://127.0.0.1:9001</code></a><br> 默认登录账号密码:<code>admin/admin</code><br> <img src=\"https://img-blog.csdnimg.cn/20200721225349475.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> ① <code>System</code> -&gt; <code>Inputs</code><br> <img src=\"https://img-blog.csdnimg.cn/20200721225524732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> ② 选择<code>GELF UDP</code><br> <img src=\"https://img-blog.csdnimg.cn/2020072122572258.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> ③ <code>Launch new input</code><br> <img src=\"https://img-blog.csdnimg.cn/20200721225912896.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> ④ 如下图完成配置<br> <img src=\"https://img-blog.csdnimg.cn/20200721230106144.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"SpringBoot__Logbackdemo_44\"></a>四、SpringBoot - Logback日志案例demo</h3> \n <blockquote> \n <p>项目基于springboot2.3.1.RELEASE</p> \n </blockquote> \n <h4><a id=\"1pomxmllogbackgelf_48\"></a>1、<code>pom.xml</code>中新增<code>logback-gelf</code>依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- logback-gelf --&gt;</span>\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/de.siegmar/logback-gelf --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>de.siegmar<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>logback-gelf<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>3.0.0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2logbackxml_60\"></a>2、<code>logback.xml</code>日志文件中新增如下配置</h4> \n <p><img src=\"https://img-blog.csdnimg.cn/20200721230452788.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <pre><code class=\"prism language-xml\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>appender</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>GELF<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>de.siegmar.logbackgelf.GelfUdpAppender<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>graylogHost</span><span class=\"token punctuation\">&gt;</span></span>127.0.0.1<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>graylogHost</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>graylogPort</span><span class=\"token punctuation\">&gt;</span></span>12201<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>graylogPort</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>appender</span><span class=\"token punctuation\">&gt;</span></span>\n\n<span class=\"token comment\">&lt;!-- 日志输出级别 --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>root</span> <span class=\"token attr-name\">level</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>DEBUG<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>appender-ref</span> <span class=\"token attr-name\">ref</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>GELF<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>root</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"3_76\"></a>3、编写定时器测试日志输出</h4> \n <blockquote> \n <p>每3秒执行1次</p> \n </blockquote> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token annotation punctuation\">@Component</span>\n<span class=\"token annotation punctuation\">@EnableScheduling</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">AppScheduledJobs</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@Scheduled</span><span class=\"token punctuation\">(</span>cron <span class=\"token operator\">=</span> <span class=\"token string\">\"*/3 * * * * ?\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">test</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">debug</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"==================================================================================\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"&lt;&lt;&lt;&lt;&lt;&lt; error Start: 【{}】 &gt;&gt;&gt;&gt;&gt;&gt;\"</span><span class=\"token punctuation\">,</span> LocalDateTime<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">warn</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"&lt;&lt;&lt;&lt;&lt;&lt; warn Start: 【{}】 &gt;&gt;&gt;&gt;&gt;&gt;\"</span><span class=\"token punctuation\">,</span> LocalDateTime<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"&lt;&lt;&lt;&lt;&lt;&lt; info Start: 【{}】 &gt;&gt;&gt;&gt;&gt;&gt;\"</span><span class=\"token punctuation\">,</span> LocalDateTime<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">debug</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"&lt;&lt;&lt;&lt;&lt;&lt; debug Start: 【{}】 &gt;&gt;&gt;&gt;&gt;&gt;\"</span><span class=\"token punctuation\">,</span> LocalDateTime<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"4_98\"></a>4、启动项目</h4> \n <p><img src=\"https://img-blog.csdnimg.cn/20200721230930803.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"Graylog_102\"></a>五、Graylog中查看日志输出</h3> \n <p><a href=\"http://127.0.0.1:9001/search\">http://127.0.0.1:9001/search</a></p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200721231055288.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"Docker_108\"></a>六、Docker容器日志测试</h3> \n <h4><a id=\"1docker_110\"></a>1、docker</h4> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 启动一个docker测试日志: -&gt; 设置docker的log驱动为GELF</span>\ndocker run -d \\\n--log-driver<span class=\"token operator\">=</span>gelf \\\n--log-opt gelf-address<span class=\"token operator\">=</span>udp://graylog服务器地址:12201 \\\n--log-opt tag<span class=\"token operator\">=</span><span class=\"token operator\">&lt;</span>容器服务标签 -<span class=\"token operator\">&gt;</span> graylog查询分类使用<span class=\"token operator\">&gt;</span> \\\n<span class=\"token operator\">&lt;</span>IMAGE<span class=\"token operator\">&gt;</span> <span class=\"token operator\">&lt;</span>COMMAND<span class=\"token operator\">&gt;</span>\n</code></pre> \n <p>docker-demo</p> \n <pre><code class=\"prism language-shell\">docker run \\\n-d -p 88:88 --name log-java-demo \\\n--log-driver<span class=\"token operator\">=</span>gelf \\\n--log-opt gelf-address<span class=\"token operator\">=</span>udp://127.0.0.1:12201 \\\n--log-opt tag<span class=\"token operator\">=</span><span class=\"token string\">\"{\n <!-- -->{.ImageName}}/{\n <!-- -->{.Name}}/{\n <!-- -->{.ID}}\"</span> \\\nregistry.cn-hangzhou.aliyuncs.com/zhengqing/log-java-demo:latest\n</code></pre> \n <h4><a id=\"2dockercompose_132\"></a>2、docker-compose</h4> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">logging</span><span class=\"token punctuation\">:</span>\n driver<span class=\"token punctuation\">:</span><span class=\"token string\">\"gelf\"</span>\n <span class=\"token key atrule\">options</span><span class=\"token punctuation\">:</span>\n gelf<span class=\"token punctuation\">-</span>address<span class=\"token punctuation\">:</span><span class=\"token string\">\"udp://graylog服务器地址:12201\"</span>\n tag<span class=\"token punctuation\">:</span><span class=\"token string\">\"容器服务标签\"</span>\n</code></pre> \n <p>docker-compose-demo</p> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\'3\'</span>\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">log-java-demo</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> registry.cn<span class=\"token punctuation\">-</span>hangzhou.aliyuncs.com/zhengqing/log<span class=\"token punctuation\">-</span>java<span class=\"token punctuation\">-</span>demo<span class=\"token punctuation\">:</span>latest\n <span class=\"token key atrule\">container_name</span><span class=\"token punctuation\">:</span> log<span class=\"token punctuation\">-</span>java<span class=\"token punctuation\">-</span>demo \n <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n <span class=\"token punctuation\">-</span> <span class=\"token string\">\"88:88\"</span>\n <span class=\"token key atrule\">logging</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">driver</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"gelf\"</span>\n <span class=\"token key atrule\">options</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">gelf-address</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"udp://127.0.0.1:12201\"</span>\n <span class=\"token key atrule\">tag</span><span class=\"token punctuation\">:</span> log<span class=\"token punctuation\">-</span>java<span class=\"token punctuation\">-</span>demo\n</code></pre> \n <p>运行后回到graylog中查看相应日志信息<br> <img src=\"https://img-blog.csdnimg.cn/20200722130408239.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"_163\"></a>七、问题</h3> \n <p>docker-compose v2和v3版本之间的编排命令有所差异,刚开始在graylog官网看的2.x的compose v2版本的编排命令直接拿来在小编的v3版本中跑,出现坑… 最后习惯性的再查看graylog最新3.x版本的文档,重新来了一次,成功! 造成耗时原因在于纠结在那一个版本上了… (害~ 年轻人不能太钻牛角尖!!!)</p> \n <hr> \n <h3><a id=\"demo_169\"></a>本文案例demo源码地址</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n <hr> \n <blockquote> \n <p>今日分享语句:一个人最大的智慧是透过别人的阅历而读懂自己的未来。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107500344', '2020-07-21 23:24:53', 1, '2020-11-07 15:21:19', 1, '2020-11-07 15:21:19', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (18, 1, 107524340, 'Docker(14) docker-compose安装Grafana Loki日志聚合系统', '----- -----⑤、Docker', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <h6><a id=\"Grafana_Loki__2\"></a>Grafana Loki 是什么?</h6> \n <p>Loki 是一个水平可扩展,高可用性,多租户的<code>日志聚合系统</code>。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。</p> \n <p>Loki 组成:</p> \n <ol>\n <li>loki : 主服务器,负责存储日志和处理查询</li>\n <li>promtail : 代理,负责收集日志并将其发送给 loki</li>\n <li>Grafana : Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能</li>\n </ol> \n <p>Loki : <a href=\"https://github.com/grafana/loki\">https://github.com/grafana/loki</a></p> \n <h3><a id=\"dockercomposeGrafana_Loki_15\"></a>二、<code>docker-compose</code>安装<code>Grafana Loki</code></h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 环境准备</span>\n<span class=\"token function\">git</span> clone https://gitee.com/zhengqingya/docker-compose.git\n\n<span class=\"token comment\"># Liunx系统走此路径</span>\n<span class=\"token function\">cd</span> docker-compose/Liunx\n<span class=\"token comment\"># Windows系统走此路径</span>\n<span class=\"token function\">cd</span> docker-compose/Windows\n\n<span class=\"token comment\"># 【 注:Liunx系统先授权,否则会报错:`cannot create directory \'/var/lib/grafana/plugins\': Permission denied` 】</span>\n<span class=\"token function\">chmod</span> 777 <span class=\"token variable\">$PWD</span>/grafana_promtail_loki/grafana/data\n<span class=\"token function\">chmod</span> 777 <span class=\"token variable\">$PWD</span>/grafana_promtail_loki/grafana/log\n\n<span class=\"token comment\"># 运行服务</span>\ndocker-compose -f docker-compose-grafana-promtail-loki.yml -p grafana_promtail_loki up -d\n</code></pre> \n <p>等待运行完成…<br> <img src=\"https://img-blog.csdnimg.cn/20200722220300769.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"java_37\"></a>三、运行一个java小程序测试日志</h3> \n <p>新建docker-compose.yml</p> \n <blockquote> \n <p>温馨小提示:</p> \n <ol>\n <li>这是个定时打印日志任务的java小程序;</li>\n <li>该文件需与上面安装loki的<code>docker-compose-grafana-promtail-loki.yml</code>文件在同一级,目的:同步java程序的日志到<code>promtail</code>日志采集端,当然这里也可以通过将promtail放到容器中去采集日志,可参考:<a href=\"https://gitee.com/zhengqingya/docker-compose/tree/master/Liunx/grafana-promtail-loki-nginx-demo\">https://gitee.com/zhengqingya/docker-compose/tree/master/Liunx/grafana-promtail-loki-nginx-demo</a></li>\n <li>更多可查看promtail和loki具体配置<br> <img src=\"https://img-blog.csdnimg.cn/20200722223457798.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></li>\n </ol> \n </blockquote> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\'3\'</span>\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">log-java-demo</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> registry.cn<span class=\"token punctuation\">-</span>hangzhou.aliyuncs.com/zhengqing/log<span class=\"token punctuation\">-</span>java<span class=\"token punctuation\">-</span>demo<span class=\"token punctuation\">:</span>latest\n <span class=\"token key atrule\">container_name</span><span class=\"token punctuation\">:</span> log<span class=\"token punctuation\">-</span>java<span class=\"token punctuation\">-</span>demo \n <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span> \n <span class=\"token punctuation\">-</span> ./grafana_promtail_loki/logs<span class=\"token punctuation\">:</span>/var/log\n <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n <span class=\"token punctuation\">-</span> <span class=\"token string\">\"88:88\"</span>\n</code></pre> \n <p>运行程序</p> \n <pre><code class=\"prism language-shell\">docker-compose up -d\n</code></pre> \n <h3><a id=\"Grafana_Loki__66\"></a>四、Grafana Loki 配置</h3> \n <p>访问地址:<a href=\"http://127.0.0.1:3000\"><code>http://127.0.0.1:3000</code></a><br> 默认登录账号密码:<code>admin/admin</code><br> <img src=\"https://img-blog.csdnimg.cn/20200722220339314.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 配置loki数据源<br> <img src=\"https://img-blog.csdnimg.cn/20200722220548900.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200722220706760.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200722220742116.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 填写loki地址: <code>http://loki:3100</code><br> <img src=\"https://img-blog.csdnimg.cn/20200722220912104.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 保存成功后,选择<code>Explore</code><br> <img src=\"https://img-blog.csdnimg.cn/20200722221029563.png\" alt=\"在这里插入图片描述\"><br> 这里选择以文件名的方式查看日志信息<br> <img src=\"https://img-blog.csdnimg.cn/2020072222275739.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200722222817272.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 根据日志级别筛选日志<br> <img src=\"https://img-blog.csdnimg.cn/20200722223025519.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 实时查看日志信息<br> <img src=\"https://img-blog.csdnimg.cn/20200722223228643.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 更多日志选择和过滤可自行了解…</p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 给自己的人生设立一个目标,给自己未来一个明确的希望,给自己的生活一个方向灯。让我们为着这个方向而努力,不断去超越自己,提高自己的水平,不让自己有懈怠的时候。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107524340', '2020-07-22 22:42:18', 1, '2020-11-07 15:21:19', 1, '2020-11-07 15:21:19', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (19, 1, 107352979, 'SpringBoot(30) 整合PageOffice实现在线编辑Word和Excel', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li>PageOffice官网: <a href=\"http://www.zhuozhengsoft.com/\">http://www.zhuozhengsoft.com/</a></li>\n <li>PageOffice集成说明: <a href=\"https://www.kancloud.cn/pageoffice_course_group/pageoffice_course/652260\">https://www.kancloud.cn/pageoffice_course_group/pageoffice_course/652260</a></li>\n </ol> \n <h6><a id=\"_5\"></a>准备集成环境</h6> \n <p>下载jar依赖:<a href=\"http://www.zhuozhengsoft.com/dowm/\">http://www.zhuozhengsoft.com/dowm/</a><br> <img src=\"https://img-blog.csdnimg.cn/20200715152425822.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/2020071515250252.png\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"SpringBootPageOfficeWordExcel_11\"></a>二、SpringBoot整合PageOffice实现在线编辑Word和Excel</h3> \n <blockquote> \n <p>本文基于springboot<code>2.3.1.RELEASE</code>版本集成pageoffice</p> \n </blockquote> \n <h4><a id=\"1pomxml_15\"></a>1、<code>pom.xml</code>中新增相关依赖</h4> \n <blockquote> \n <p>将下载的jar依赖放进项目的lib包下 ( 注:这里也可以自定义存放位置,然后修改本地引入位置<code>${project.basedir}/lib/pageoffice4.6.0.4.jar</code>即可 )<br> <img src=\"https://img-blog.csdnimg.cn/20200715152656429.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n </blockquote> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- =================================== ↓↓↓↓↓↓ PageOffice所需依赖 start ↓↓↓↓↓↓ ==================================== --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.springframework.boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>spring-boot-starter-thymeleaf<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n\n<span class=\"token comment\">&lt;!-- 添加Sqlite依赖(可选:如果不需要使用印章功能的话,不需要添加此依赖)--&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.xerial<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>sqlite-jdbc<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>3.7.2<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!-- 添加PageOffice依赖(必须) --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.zhuozheng<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>pageoffice<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>4.6.0.4<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>scope</span><span class=\"token punctuation\">&gt;</span></span>system<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>scope</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>systemPath</span><span class=\"token punctuation\">&gt;</span></span>${project.basedir}/lib/pageoffice4.6.0.4.jar<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>systemPath</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!-- =================================== ↑↑↑↑↑↑ PageOffice所需依赖 end ↑↑↑↑↑↑ ==================================== --&gt;</span>\n</code></pre> \n <p>本地jar包引入需再新增如下,可参考文末源码demo<br> <img src=\"https://img-blog.csdnimg.cn/2020071515294759.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"2applicationymlpageoffice_48\"></a>2、<code>application.yml</code>中新增pageoffice配置</h4> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">spring</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># THYMELEAF (ThymeleafAutoConfiguration)</span>\n <span class=\"token key atrule\">thymeleaf</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">prefix</span><span class=\"token punctuation\">:</span> classpath<span class=\"token punctuation\">:</span>/templates/\n <span class=\"token key atrule\">suffix</span><span class=\"token punctuation\">:</span> .html\n <span class=\"token key atrule\">cache</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">false</span>\n\n<span class=\"token comment\"># ======================== ↓↓↓↓↓↓ PageOffice相关配置 ↓↓↓↓↓↓ ===============================</span>\n<span class=\"token key atrule\">pageoffice</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># 本地文件所在磁盘位置</span>\n <span class=\"token key atrule\">docpath</span><span class=\"token punctuation\">:</span> /pageoffice/doc/\n <span class=\"token comment\"># 设置PageOffice自带印章管理程序的登录密码</span>\n <span class=\"token key atrule\">popassword</span><span class=\"token punctuation\">:</span> <span class=\"token number\">123456</span>\n <span class=\"token comment\"># 指定一个磁盘目录用来存放PageOffice注册成功之后生成的license.lic文件</span>\n <span class=\"token key atrule\">posyspath</span><span class=\"token punctuation\">:</span> /pageoffice/lic/\n</code></pre> \n <h4><a id=\"3resourcestemplates3_68\"></a>3、<code>resources/templates</code>下新增如下3个文件</h4> \n <p><img src=\"https://img-blog.csdnimg.cn/20200715153305864.png\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"_Excelhtml_72\"></a>① Excel.html</h6> \n <pre><code class=\"prism language-html\"><span class=\"token doctype\">&lt;!DOCTYPE html&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span> <span class=\"token attr-name\">xmlns</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://www.w3.org/1999/xhtml<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">xmlns:</span>th</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://www.thymeleaf.org<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">xmlns:</span>sec</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://www.thymeleaf.org/thymeleaf-extras-springsecurity3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>head</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>title</span><span class=\"token punctuation\">&gt;</span></span>打开Excel文件<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>title</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text/javascript<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span><span class=\"token script language-javascript\"> <span class=\"token keyword\">function</span> <span class=\"token function\">Save</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PageOfficeCtrl1\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">WebSave</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text/javascript<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span><span class=\"token script language-javascript\"> <span class=\"token keyword\">function</span> <span class=\"token function\">AddSeal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span> <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{\n <!-- --></span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PageOfficeCtrl1\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>ZoomSeal<span class=\"token punctuation\">.</span><span class=\"token function\">AddSeal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">e</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span> <span class=\"token punctuation\">}</span> <span class=\"token punctuation\">}</span> </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">&gt;</span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>head</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">width</span><span class=\"token punctuation\">:</span>auto<span class=\"token punctuation\">;</span><span class=\"token property\">height</span><span class=\"token punctuation\">:</span>700px<span class=\"token punctuation\">;</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">th:</span>utext</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>${pageoffice}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h6><a id=\"_Wordhtml_101\"></a>② Word.html</h6> \n <pre><code class=\"prism language-html\"><span class=\"token doctype\">&lt;!DOCTYPE html&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span> <span class=\"token attr-name\">xmlns</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://www.w3.org/1999/xhtml<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">xmlns:</span>th</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://www.thymeleaf.org<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">xmlns:</span>sec</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://www.thymeleaf.org/thymeleaf-extras-springsecurity3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>head</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>title</span><span class=\"token punctuation\">&gt;</span></span>打开Word文件<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>title</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text/javascript<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span><span class=\"token script language-javascript\"> <span class=\"token keyword\">function</span> <span class=\"token function\">Save</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PageOfficeCtrl1\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">WebSave</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text/javascript<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span><span class=\"token script language-javascript\"> <span class=\"token keyword\">function</span> <span class=\"token function\">AddSeal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span> <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{\n <!-- --></span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PageOfficeCtrl1\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>ZoomSeal<span class=\"token punctuation\">.</span><span class=\"token function\">AddSeal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">e</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span> <span class=\"token punctuation\">}</span> <span class=\"token punctuation\">}</span> </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">&gt;</span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>head</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">width</span><span class=\"token punctuation\">:</span>auto<span class=\"token punctuation\">;</span><span class=\"token property\">height</span><span class=\"token punctuation\">:</span>700px<span class=\"token punctuation\">;</span></span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">th:</span>utext</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>${pageoffice}<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h6><a id=\"_indexhtml_131\"></a>③ index.html</h6> \n <pre><code class=\"prism language-html\"><span class=\"token doctype\">&lt;!DOCTYPE html&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>head</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">charset</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>utf-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>title</span><span class=\"token punctuation\">&gt;</span></span>HelloWorld<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>title</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>style</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token style language-css\"> <span class=\"token selector\">#main</span> <span class=\"token punctuation\">{\n <!-- --></span> <span class=\"token property\">width</span><span class=\"token punctuation\">:</span> 15%<span class=\"token punctuation\">;</span> <span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> <span class=\"token selector\">ol</span> <span class=\"token punctuation\">{\n <!-- --></span> <span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> left<span class=\"token punctuation\">;</span> <span class=\"token property\">border</span><span class=\"token punctuation\">:</span> solid 1px gray<span class=\"token punctuation\">;</span> \" <span class=\"token punctuation\">}</span> <span class=\"token selector\">ol li</span> <span class=\"token punctuation\">{\n <!-- --></span> <span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> left<span class=\"token punctuation\">;</span> <span class=\"token property\">border-bottom</span><span class=\"token punctuation\">:</span> dotted 1px gray<span class=\"token punctuation\">;</span> <span class=\"token property\">height</span><span class=\"token punctuation\">:</span> 30px<span class=\"token punctuation\">;</span> <span class=\"token property\">margin-top</span><span class=\"token punctuation\">:</span> 10px<span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span> </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>style</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 引用后端项目中的pageoffice.js文件 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text/javascript<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://localhost:8080/pageoffice.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span><span class=\"token script language-javascript\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>head</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>main<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h3</span><span class=\"token punctuation\">&gt;</span></span>HelloWorld<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h3</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ol</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- openWindowModeless用法参考:http://www.zhuozhengsoft.com/help/js3/pobrowser/function/openwindowmodeless.htm --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>javascript:POBrowser.openWindowModeless(<span class=\"token punctuation\">\'</span>http://localhost:8080/api/word<span class=\"token punctuation\">\'</span>,<span class=\"token punctuation\">\'</span>width=1200px;height=800px;<span class=\"token punctuation\">\'</span>);<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>打开Word文档<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>javascript:POBrowser.openWindowModeless(<span class=\"token punctuation\">\'</span>http://localhost:8080/api/excel<span class=\"token punctuation\">\'</span>,<span class=\"token punctuation\">\'</span>width=1200px;height=800px;<span class=\"token punctuation\">\'</span>);<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>打开Excel文档<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ol</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"4_178\"></a>4、全局常用变量</h4> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Constants</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">/** * 项目根目录 */</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> String PROJECT_ROOT_DIRECTORY <span class=\"token operator\">=</span> System<span class=\"token punctuation\">.</span><span class=\"token function\">getProperty</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"user.dir\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">/** * word文件名 */</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> String FILE_NAME_WORD <span class=\"token operator\">=</span> <span class=\"token string\">\"test.doc\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">/** * excel文件名 */</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> String FILE_NAME_EXCEL <span class=\"token operator\">=</span> <span class=\"token string\">\"test.xls\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"5Controller_197\"></a>5、编写测试Controller</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/api\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">DemoController</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${pageoffice.posyspath}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String poSysPath<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${pageoffice.popassword}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String poPassWord<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${pageoffice.docpath}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String docPath<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 被`@PostConstruct`修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。 */</span>\n <span class=\"token annotation punctuation\">@PostConstruct</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n poSysPath <span class=\"token operator\">=</span> Constants<span class=\"token punctuation\">.</span>PROJECT_ROOT_DIRECTORY <span class=\"token operator\">+</span> poSysPath<span class=\"token punctuation\">;</span>\n docPath <span class=\"token operator\">=</span> Constants<span class=\"token punctuation\">.</span>PROJECT_ROOT_DIRECTORY <span class=\"token operator\">+</span> docPath<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/hello\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">hello</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"hello ...\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"HelloWorld~\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"/word\"</span><span class=\"token punctuation\">,</span> method <span class=\"token operator\">=</span> RequestMethod<span class=\"token punctuation\">.</span>GET<span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> ModelAndView <span class=\"token function\">showWord</span><span class=\"token punctuation\">(</span>HttpServletRequest request<span class=\"token punctuation\">,</span> Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span> map<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"编辑word ...\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n PageOfficeCtrl poCtrl <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">PageOfficeCtrl</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 设置服务页面</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">setServerPage</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/poserver.zz\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 添加自定义保存按钮</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">addCustomToolButton</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"保存\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Save\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 添加自定义盖章按钮</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">addCustomToolButton</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"盖章\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"AddSeal\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 拿到请求前缀做拼接保存文件方法</span>\n String requestApiPrefix <span class=\"token operator\">=</span> request<span class=\"token punctuation\">.</span><span class=\"token function\">getServletPath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/word\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 设置处理文件保存的请求方法</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">setSaveFilePage</span><span class=\"token punctuation\">(</span>requestApiPrefix <span class=\"token operator\">+</span> <span class=\"token string\">\"/save\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 打开word</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">webOpen</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"file://\"</span> <span class=\"token operator\">+</span> docPath <span class=\"token operator\">+</span> Constants<span class=\"token punctuation\">.</span>FILE_NAME_WORD<span class=\"token punctuation\">,</span> OpenModeType<span class=\"token punctuation\">.</span>docAdmin<span class=\"token punctuation\">,</span> <span class=\"token string\">\"张三\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n map<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"pageoffice\"</span><span class=\"token punctuation\">,</span> poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">getHtmlCode</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PageOfficeCtrl1\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n ModelAndView mv <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ModelAndView</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Word\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> mv<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"/excel\"</span><span class=\"token punctuation\">,</span> method <span class=\"token operator\">=</span> RequestMethod<span class=\"token punctuation\">.</span>GET<span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> ModelAndView <span class=\"token function\">showExcel</span><span class=\"token punctuation\">(</span>HttpServletRequest request<span class=\"token punctuation\">,</span> Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span> map<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"编辑excel ...\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n PageOfficeCtrl poCtrl <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">PageOfficeCtrl</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 设置服务页面</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">setServerPage</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/poserver.zz\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 添加自定义保存按钮</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">addCustomToolButton</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"保存\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Save\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 添加自定义盖章按钮</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">addCustomToolButton</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"盖章\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"AddSeal\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 拿到请求前缀做拼接保存文件方法</span>\n String requestApiPrefix <span class=\"token operator\">=</span> request<span class=\"token punctuation\">.</span><span class=\"token function\">getServletPath</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">replace</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/excel\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 设置处理文件保存的请求方法</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">setSaveFilePage</span><span class=\"token punctuation\">(</span>requestApiPrefix <span class=\"token operator\">+</span> <span class=\"token string\">\"/save\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 打开word</span>\n poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">webOpen</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"file://\"</span> <span class=\"token operator\">+</span> docPath <span class=\"token operator\">+</span> Constants<span class=\"token punctuation\">.</span>FILE_NAME_EXCEL<span class=\"token punctuation\">,</span> OpenModeType<span class=\"token punctuation\">.</span>xlsNormalEdit<span class=\"token punctuation\">,</span> <span class=\"token string\">\"张三\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n map<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"pageoffice\"</span><span class=\"token punctuation\">,</span> poCtrl<span class=\"token punctuation\">.</span><span class=\"token function\">getHtmlCode</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PageOfficeCtrl1\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n ModelAndView mv <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ModelAndView</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Excel\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> mv<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/save\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">saveFile</span><span class=\"token punctuation\">(</span>HttpServletRequest request<span class=\"token punctuation\">,</span> HttpServletResponse response<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"保存文件 ...\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n FileSaver fs <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">FileSaver</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">,</span> response<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n fs<span class=\"token punctuation\">.</span><span class=\"token function\">saveToFile</span><span class=\"token punctuation\">(</span>docPath <span class=\"token operator\">+</span> fs<span class=\"token punctuation\">.</span><span class=\"token function\">getFileName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n fs<span class=\"token punctuation\">.</span><span class=\"token function\">close</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 添加PageOffice的服务器端授权程序Servlet(必须) * * @return */</span>\n <span class=\"token annotation punctuation\">@Bean</span>\n <span class=\"token keyword\">public</span> ServletRegistrationBean <span class=\"token function\">servletRegistrationBean</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n com<span class=\"token punctuation\">.</span>zhuozhengsoft<span class=\"token punctuation\">.</span>pageoffice<span class=\"token punctuation\">.</span>poserver<span class=\"token punctuation\">.</span>Server poserver <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">com<span class=\"token punctuation\">.</span>zhuozhengsoft<span class=\"token punctuation\">.</span>pageoffice<span class=\"token punctuation\">.</span>poserver<span class=\"token punctuation\">.</span>Server</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 设置PageOffice注册成功后,license.lic文件存放的目录</span>\n poserver<span class=\"token punctuation\">.</span><span class=\"token function\">setSysPath</span><span class=\"token punctuation\">(</span>poSysPath<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n ServletRegistrationBean srb <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ServletRegistrationBean</span><span class=\"token punctuation\">(</span>poserver<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n srb<span class=\"token punctuation\">.</span><span class=\"token function\">addUrlMappings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/poserver.zz\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n srb<span class=\"token punctuation\">.</span><span class=\"token function\">addUrlMappings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/posetup.exe\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n srb<span class=\"token punctuation\">.</span><span class=\"token function\">addUrlMappings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/pageoffice.js\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n srb<span class=\"token punctuation\">.</span><span class=\"token function\">addUrlMappings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/jquery.min.js\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n srb<span class=\"token punctuation\">.</span><span class=\"token function\">addUrlMappings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/pobstyle.css\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n srb<span class=\"token punctuation\">.</span><span class=\"token function\">addUrlMappings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/sealsetup.exe\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> srb<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 添加印章管理程序Servlet(可选) */</span>\n <span class=\"token annotation punctuation\">@Bean</span>\n <span class=\"token keyword\">public</span> ServletRegistrationBean <span class=\"token function\">servletRegistrationBean2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n com<span class=\"token punctuation\">.</span>zhuozhengsoft<span class=\"token punctuation\">.</span>pageoffice<span class=\"token punctuation\">.</span>poserver<span class=\"token punctuation\">.</span>AdminSeal adminSeal <span class=\"token operator\">=</span>\n <span class=\"token keyword\">new</span> <span class=\"token class-name\">com<span class=\"token punctuation\">.</span>zhuozhengsoft<span class=\"token punctuation\">.</span>pageoffice<span class=\"token punctuation\">.</span>poserver<span class=\"token punctuation\">.</span>AdminSeal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 设置印章管理员admin的登录密码</span>\n adminSeal<span class=\"token punctuation\">.</span><span class=\"token function\">setAdminPassword</span><span class=\"token punctuation\">(</span>poPassWord<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 设置印章数据库文件poseal.db存放的目录</span>\n adminSeal<span class=\"token punctuation\">.</span><span class=\"token function\">setSysPath</span><span class=\"token punctuation\">(</span>poSysPath<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n ServletRegistrationBean srb <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ServletRegistrationBean</span><span class=\"token punctuation\">(</span>adminSeal<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n srb<span class=\"token punctuation\">.</span><span class=\"token function\">addUrlMappings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/adminseal.zz\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n srb<span class=\"token punctuation\">.</span><span class=\"token function\">addUrlMappings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/sealimage.zz\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n srb<span class=\"token punctuation\">.</span><span class=\"token function\">addUrlMappings</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/loginseal.zz\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> srb<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"6wordexcel_321\"></a>6、准备测试word和excel文件</h4> \n <p>注意将测试word和excel文件(<code>文件不能为0字节</code>)放在<code>项目根目录/pageoffice/doc</code>目录下,以及新建<code>lic</code>文件夹…</p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200715163408359.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"_327\"></a>三、测试</h3> \n <p>访问<a href=\"http://localhost:8080/\">http://localhost:8080/</a>,点击<code>打开Word文档</code><br> <img src=\"https://img-blog.csdnimg.cn/20200715150935401.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 第一次使用的时候会提示<code>安装PageOffice</code>,直接下一步安装即可~</p> \n <blockquote> \n <p>可参考PageOffice客户端安装步骤:<a href=\"https://www.kancloud.cn/pageoffice_course_group/pageoffice_course/654031\">https://www.kancloud.cn/pageoffice_course_group/pageoffice_course/654031</a></p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20200715150848551.png\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200715151233340.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200715151243505.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 安装完成之后回到页面再次点击<code>打开Word文档</code>,这时候需要填写注册信息,序列号在之前下载的包里面可以找到<br> <img src=\"https://img-blog.csdnimg.cn/20200715161238202.png\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200715161425308.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 注册成功后,正常打开Word文件,之后就可以进行自己的神操作了…<br> <img src=\"https://img-blog.csdnimg.cn/2020071509410059.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <code>打开Excel文档</code>如下:<br> <img src=\"https://img-blog.csdnimg.cn/20200715161527567.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"VuePageOffice_346\"></a>四、Vue页面集成PageOffice</h3> \n <h4><a id=\"1indexhtmlpageofficejs_348\"></a>1、项目的<code>index.html</code>中引入<code>pageoffice.js</code></h4> \n <pre><code class=\"prism language-html\"><span class=\"token comment\">&lt;!-- 引用后端项目中的pageoffice.js文件 --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text/javascript<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://localhost:8080/pageoffice.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span><span class=\"token script language-javascript\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2_355\"></a>2、页面</h4> \n <pre><code class=\"prism language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>template</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>app-container<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>el-button</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>javascript:POBrowser.openWindowModeless(<span class=\"token punctuation\">\'</span>http://localhost:8080/api/word<span class=\"token punctuation\">\'</span>,<span class=\"token punctuation\">\'</span>width=1200px;height=800px;<span class=\"token punctuation\">\'</span>);<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>打开Word文档<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>el-button</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>el-button</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>javascript:POBrowser.openWindowModeless(<span class=\"token punctuation\">\'</span>http://localhost:8080/api/excel<span class=\"token punctuation\">\'</span>,<span class=\"token punctuation\">\'</span>width=1200px;height=800px;<span class=\"token punctuation\">\'</span>);<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>打开Excel文档<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>el-button</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>template</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>style</span> <span class=\"token attr-name\">lang</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>scss<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">scoped</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token style language-css\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>style</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <p>这里页面很简单就2个按钮…<br> <img src=\"https://img-blog.csdnimg.cn/20200715162820214.png\" alt=\"在这里插入图片描述\"><br> 主要通过<code>openWindowModeless</code> 使用非模态框的形式打开文件</p> \n <blockquote> \n <p>用法可参考:<a href=\"http://www.zhuozhengsoft.com/help/js3/pobrowser/function/openwindowmodeless.htm\">http://www.zhuozhengsoft.com/help/js3/pobrowser/function/openwindowmodeless.htm</a></p> \n </blockquote> \n <h4><a id=\"3_373\"></a>3、后端解决前后端分离情况下跨域问题</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Configuration</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CorsConfig</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token keyword\">private</span> CorsConfiguration <span class=\"token function\">config</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n CorsConfiguration corsConfiguration <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CorsConfiguration</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n corsConfiguration<span class=\"token punctuation\">.</span><span class=\"token function\">setAllowCredentials</span><span class=\"token punctuation\">(</span><span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// ① 设置你要允许的网站域名,如果全允许则设为 *</span>\n corsConfiguration<span class=\"token punctuation\">.</span><span class=\"token function\">addAllowedOrigin</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"*\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// corsConfiguration.addAllowedOrigin(\"http://www.zhengqingya.com\");</span>\n <span class=\"token comment\">// ② 如果要限制 HEADER 或 METHOD 请自行更改</span>\n corsConfiguration<span class=\"token punctuation\">.</span><span class=\"token function\">addAllowedHeader</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"*\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n corsConfiguration<span class=\"token punctuation\">.</span><span class=\"token function\">addAllowedMethod</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"*\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> corsConfiguration<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Bean</span>\n <span class=\"token keyword\">public</span> CorsFilter <span class=\"token function\">corsFilter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n UrlBasedCorsConfigurationSource source <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">UrlBasedCorsConfigurationSource</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n source<span class=\"token punctuation\">.</span><span class=\"token function\">registerCorsConfiguration</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/**\"</span><span class=\"token punctuation\">,</span> <span class=\"token function\">config</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">CorsFilter</span><span class=\"token punctuation\">(</span>source<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h3><a id=\"__PageofficeWord0x80040154_401\"></a>五、问题 -&gt; 使用Pageoffice打开Word时报<code>0x80040154</code>错误</h3> \n <p>问题出现可能原因:安装WPS时关联了.doc.xls.ppt等文件,导致Office无法自动关联</p> \n <p>解决:</p> \n <ol>\n <li>想办法去掉默认关联</li>\n <li>直接卸载WPS</li>\n <li>自行谷歌</li>\n </ol> \n <hr> \n <h3><a id=\"demo_415\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107352979', '2020-07-15 17:07:47', 1, '2020-11-07 15:21:19', 1, '2020-11-07 15:21:19', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (20, 1, 107137808, 'Go基础(2) IDE工具之GoLand安装教程', '-----❶、Go基础', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p><a href=\"https://zhengqing.blog.csdn.net/article/details/107128453\">Go基础(1) 下载、安装、环境变量配置</a></p> \n <h3><a id=\"IDE_4\"></a>二、IDE下载安装</h3> \n <p>GoLand下载地址:<a href=\"https://www.jetbrains.com/go/download/#section=windows\">https://www.jetbrains.com/go/download/#section=windows</a><br> <img src=\"https://img-blog.csdnimg.cn/20200705145856757.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <p>双击安装<br> <img src=\"https://img-blog.csdnimg.cn/20200705133113236.png\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200705133227685.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200705133320222.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200705141617583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/2020070513372129.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 等待安装完成…<br> <img src=\"https://img-blog.csdnimg.cn/20200705133740113.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 安装完成之后,提示重启电脑,这里我们还是重启一下吧…<br> <img src=\"https://img-blog.csdnimg.cn/20200705133836993.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 重启完之后,双击运行<br> <img src=\"https://img-blog.csdnimg.cn/20200705134422722.png\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200705134506579.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 第一次安装的话直接选第二个不导入配置即可~<br> <img src=\"https://img-blog.csdnimg.cn/20200705134527402.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 这里选择跳过剩余步骤并设置默认配置<br> <img src=\"https://img-blog.csdnimg.cn/20200705134631175.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 这里因为GoLand是收费的,可以暂时选择<code>Evaluate for free</code> -&gt; <code>Evaluate</code>免费试用30天<br> <img src=\"https://img-blog.csdnimg.cn/20200705142512711.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200705143034543.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 那么如何一直使用呢??<br> 下载<code>jetbrains-agent.jar</code>:<a href=\"https://gitee.com/zhengqingya/java-developer-document\">https://gitee.com/zhengqingya/java-developer-document</a><br> <img src=\"https://img-blog.csdnimg.cn/20200705143203961.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/2020070514325312.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 重启之后选择<code>为GoLand安装</code>即可<br> <img src=\"https://img-blog.csdnimg.cn/20200705143337782.png\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200705143425368.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 最后进入GoLand可以查看相关信息<br> <img src=\"https://img-blog.csdnimg.cn/20200705145520673.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"Go__HelloWorld_39\"></a>三、新建一个简单的Go项目 - HelloWorld</h3> \n <p><img src=\"https://img-blog.csdnimg.cn/20200705150045563.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200705150438761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200705150923349.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200705151009745.png\" alt=\"在这里插入图片描述\"><br> 编写文件内容:</p> \n <pre><code class=\"prism language-go\"><span class=\"token keyword\">package</span> main\n\n<span class=\"token keyword\">import</span> <span class=\"token string\">\"fmt\"</span>\n\n<span class=\"token keyword\">func</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n fmt<span class=\"token punctuation\">.</span><span class=\"token function\">Print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello World !\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>右击选择<code>Run \'go build hello.go\'</code>运行<br> <img src=\"https://img-blog.csdnimg.cn/20200705152649904.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 成长是,明白很多事情无法顺着自己的意思,但是要努力用恰当的方式让事情变成最后自己要的样子。坚强是,如果最后事情实在无法实现,那么也能够接受下来,不会失控,而是冷静理智地去想下一步。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107137808', '2020-07-05 15:42:12', 1, '2020-11-07 15:21:19', 1, '2020-11-07 15:21:19', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (21, 1, 107128453, 'Go基础(1) 下载、安装、环境变量配置', '-----❶、Go基础', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p><code>Go</code>(Golang) 是Google开发的一种<code>静态强类型</code>、<code>编译型</code>、<code>并发型</code>,并具有<code>垃圾回收</code>功能的编程语言。</p> \n <h3><a id=\"_4\"></a>二、下载安装</h3> \n <p>Go官网下载地址: <a href=\"https://golang.org/dl/\">https://golang.org/dl/</a><br> <img src=\"https://img-blog.csdnimg.cn/20200704183154701.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <blockquote> \n <p>小编这里下载的是 <a href=\"https://golang.org/doc/install?download=go1.14.4.windows-amd64.msi\">go1.14.4.windows-amd64.msi</a></p> \n </blockquote> \n <p>下载之后双击安装即可<br> <img src=\"https://img-blog.csdnimg.cn/20200704185927795.png\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200704191059166.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200704191115955.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200704191214666.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200704191257672.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 然后等待安装完成…<br> <img src=\"https://img-blog.csdnimg.cn/20200704191315376.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200704191400534.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 安装完成如下图:<br> <img src=\"https://img-blog.csdnimg.cn/20200704191503395.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200704183920223.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 快捷键<code>win+r</code>输入<code>cmd</code>回车执行命令<code>go version</code> 可查看对应版本号~<br> <img src=\"https://img-blog.csdnimg.cn/20200704191554294.png\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"_GOROOTGOPATHPath__26\"></a>三、环境变量配置( GOROOT、GOPATH、Path )</h3> \n <p><code>此电脑</code> -&gt; <code>属性</code> -&gt; <code>高级系统设置</code> -&gt; <code>高级</code> -&gt; <code>环境变量</code><br> <img src=\"https://img-blog.csdnimg.cn/20200704194342510.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <blockquote> \n <p>温馨小提示:小编安装的时候,系统默认配置GOPATH等一些环境变量值,看了一下不是想要的,于是直接删除重新配置的~</p> \n </blockquote> \n <h6><a id=\"1GOROOTGo_33\"></a>1、新建系统变量<code>GOROOT</code>对应Go安装路径</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200704194722711.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"2GOPATHGo_37\"></a>2、新建系统变量<code>GOPATH</code>对应Go项目路径</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200704195053428.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"3PathGOROOTbin_41\"></a>3、编辑<code>Path</code>,新建<code>%GOROOT%\\bin</code></h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200704195617821.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 完成之后,确定保存</p> \n <p>快捷键<code>win+r</code>输入<code>cmd</code>回车执行命令<code>go env</code> 可检查配置信息<br> <img src=\"https://img-blog.csdnimg.cn/20200704200313134.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"HelloWorld_49\"></a>四、HelloWorld</h3> \n <p>新建文件<code>hello.go</code><br> <img src=\"https://img-blog.csdnimg.cn/20200704201003335.png\" alt=\"在这里插入图片描述\"><br> 编辑文件</p> \n <pre><code class=\"prism language-go\"><span class=\"token keyword\">package</span> main\n\n<span class=\"token keyword\">import</span> <span class=\"token string\">\"fmt\"</span>\n\n<span class=\"token keyword\">func</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n fmt<span class=\"token punctuation\">.</span><span class=\"token function\">Println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello World!\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>cmd执行命令<code>go run hello.go</code>运行程序<br> <img src=\"https://img-blog.csdnimg.cn/20200704201255777.png\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <blockquote> \n <p>今日分享语句:<br> 如果有人拿你不当回事,没必要生气,更别拼了命去表现,非要证明自己多出色会累死你,拿你不当一回事的人多着呢,他算老几;你无法满足所有人的眼光,最好是谁不在乎你,你也不必在乎他。不必为别人的一两句话就改变对自己的看法,自己该怎样继续这样,你的努力,只是为了自己。</p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107128453', '2020-07-04 20:21:01', 1, '2020-11-07 15:21:20', 1, '2020-11-07 15:21:20', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (22, 1, 107078960, 'SpringBoot(29) 整合WebMagic实现爬取和解析CSDN文章数据', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <ol>\n <li><code>WebMagic</code>:一款简单灵活的爬虫框架,基于它我们可以非常容易的编写一个爬虫。</li>\n <li>官网文档地址:<a href=\"http://webmagic.io/docs/zh/\">http://webmagic.io/docs/zh/</a></li>\n </ol> \n <p><img src=\"https://img-blog.csdnimg.cn/20200702103750586.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <blockquote> \n <p>下面小编将通过爬取+解析自己的csdn文章数据来演示一个简单的爬虫案例demo</p> \n </blockquote> \n <h3><a id=\"SpringBoot__WebMagic_9\"></a>二、SpringBoot 整合 WebMagic</h3> \n <h4><a id=\"1pomxml_11\"></a>1、<code>pom.xml</code>中引入相关依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- WebMagic:爬虫 --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>us.codecraft<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>webmagic-core<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>0.7.3<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>us.codecraft<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>webmagic-extension<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>0.7.3<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2_27\"></a>2、定义全局常用变量-博主博客地址</h4> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Constants</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * csdn博主博客地址 */</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> String CSDN_URL <span class=\"token operator\">=</span> <span class=\"token string\">\"https://blog.csdn.net/qq_38225558/article/list/1\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"3CSDN_40\"></a>3、CSDN博客文章信息实体类</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Data</span>\n<span class=\"token annotation punctuation\">@AllArgsConstructor</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Csdn</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * id */</span>\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> id<span class=\"token punctuation\">;</span>\n <span class=\"token comment\">/** * 文章标题 */</span>\n <span class=\"token keyword\">private</span> String title<span class=\"token punctuation\">;</span>\n <span class=\"token comment\">/** * 文章发布时间 */</span>\n <span class=\"token keyword\">private</span> String time<span class=\"token punctuation\">;</span>\n <span class=\"token comment\">/** * 文章所属分类 */</span>\n <span class=\"token keyword\">private</span> String category<span class=\"token punctuation\">;</span>\n <span class=\"token comment\">/** * 文章内容 */</span>\n <span class=\"token keyword\">private</span> String content<span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"4_72\"></a>4、编写一个简单的爬虫</h4> \n <p>实现<code>PageProcessor</code>类</p> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">SamplePageProcessor</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">PageProcessor</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * 记录总分页列表url数 */</span>\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">&gt;</span></span> urlList <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ArrayList</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">&gt;</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 文章详情信息 */</span>\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Csdn<span class=\"token punctuation\">&gt;</span></span> articleDetailInfoList <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ArrayList</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">&gt;</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 【部分一】:抓取网站的相关配置,包括编码、抓取间隔、重试次数等 */</span>\n <span class=\"token keyword\">private</span> Site site <span class=\"token operator\">=</span> Site<span class=\"token punctuation\">.</span><span class=\"token function\">me</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>\n <span class=\"token comment\">// 重试次数</span>\n <span class=\"token function\">setRetryTimes</span><span class=\"token punctuation\">(</span><span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>\n <span class=\"token comment\">// 抓取间隔</span>\n <span class=\"token function\">setSleepTime</span><span class=\"token punctuation\">(</span><span class=\"token number\">1000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>\n <span class=\"token comment\">// 超时时间</span>\n <span class=\"token function\">setTimeOut</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span> <span class=\"token operator\">*</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑 * * @param page: * 页面数据 * @return: void * @author : zhengqing * @date : 2020/7/1 16:43 */</span>\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">process</span><span class=\"token punctuation\">(</span>Page page<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 【部分二】:定义如何抽取页面信息,并保存下来</span>\n Html html <span class=\"token operator\">=</span> page<span class=\"token punctuation\">.</span><span class=\"token function\">getHtml</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">// 根据url判断该页面属于列表页还是文章详情页面</span>\n String url <span class=\"token operator\">=</span> page<span class=\"token punctuation\">.</span><span class=\"token function\">getUrl</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"页面url地址:【{}】\"</span><span class=\"token punctuation\">,</span> url<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">.</span><span class=\"token function\">contains</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"article/details\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 详情页面处理逻辑...</span>\n <span class=\"token comment\">// 文章id</span>\n <span class=\"token keyword\">int</span> articleId <span class=\"token operator\">=</span> Integer<span class=\"token punctuation\">.</span><span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">.</span><span class=\"token function\">substring</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">.</span><span class=\"token function\">lastIndexOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\'/\'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 文章标题</span>\n String articleTitle <span class=\"token operator\">=</span> html<span class=\"token punctuation\">.</span><span class=\"token function\">xpath</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"//h1[@class=\'title-article\']//text()\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 文章发布时间</span>\n String articleTime <span class=\"token operator\">=</span> html<span class=\"token punctuation\">.</span><span class=\"token function\">xpath</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"//div[@class=\'bar-content\']//span[@class=\'time\']//text()\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 文章所属分类</span>\n String articleCategory <span class=\"token operator\">=</span> html<span class=\"token punctuation\">.</span><span class=\"token function\">xpath</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"//a[@class=\'tag-link\']//text()\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 文章内容</span>\n String articleContent <span class=\"token operator\">=</span> html<span class=\"token punctuation\">.</span><span class=\"token function\">xpath</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"//article[@class=\'baidu_pl\']\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"文章id:【{}】 文章标题:【{}】 文章所属分类:【{}】\"</span><span class=\"token punctuation\">,</span> articleId<span class=\"token punctuation\">,</span> articleTitle<span class=\"token punctuation\">,</span> articleCategory<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Csdn csdn <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Csdn</span><span class=\"token punctuation\">(</span>articleId<span class=\"token punctuation\">,</span> articleTitle<span class=\"token punctuation\">,</span> articleTime<span class=\"token punctuation\">,</span> articleCategory<span class=\"token punctuation\">,</span> articleContent<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>articleDetailInfoList<span class=\"token punctuation\">.</span><span class=\"token function\">contains</span><span class=\"token punctuation\">(</span>csdn<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n articleDetailInfoList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>csdn<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">.</span><span class=\"token function\">contains</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"article/list\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 列表页面处理逻辑...</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>urlList<span class=\"token punctuation\">.</span><span class=\"token function\">contains</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n urlList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Selectable<span class=\"token punctuation\">&gt;</span></span> articleList <span class=\"token operator\">=</span> html\n <span class=\"token punctuation\">.</span><span class=\"token function\">xpath</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"//div[@class=\'article-list\']//div[@class=\'article-item-box csdn-tracking-statistics\']\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">nodes</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>CollectionUtils<span class=\"token punctuation\">.</span><span class=\"token function\">isEmpty</span><span class=\"token punctuation\">(</span>articleList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 这里移除最后一条错误元素</span>\n urlList<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span>urlList<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span>urlList<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"总列表数:【{}】 总文章数:【{}】\"</span><span class=\"token punctuation\">,</span> urlList<span class=\"token punctuation\">,</span> articleDetailInfoList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token comment\">// 开始解析每一篇文章数据【文章标题,发送时间,文章详情url地址】</span>\n articleList<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>article <span class=\"token operator\">-</span><span class=\"token operator\">&gt;</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 文章标题</span>\n String articleTitle <span class=\"token operator\">=</span> article<span class=\"token punctuation\">.</span>$<span class=\"token punctuation\">(</span><span class=\"token string\">\"a\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"text\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 文章详情url地址</span>\n String articleUrl <span class=\"token operator\">=</span> article<span class=\"token punctuation\">.</span><span class=\"token function\">links</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// 文章发布时间</span>\n String articleTime <span class=\"token operator\">=</span>\n article<span class=\"token punctuation\">.</span><span class=\"token function\">xpath</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"//div[@class=\'info-box d-flex align-content-center\']//span[@class=\'date\']/text()\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token punctuation\">.</span><span class=\"token function\">toString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"文章标题:【{}】 文章地址:【{}】 文章发布时间:【{}】\"</span><span class=\"token punctuation\">,</span> articleTitle<span class=\"token punctuation\">,</span> articleUrl<span class=\"token punctuation\">,</span> articleTime<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">// 进入文章内部获取文章详情内容</span>\n page<span class=\"token punctuation\">.</span><span class=\"token function\">addTargetRequests</span><span class=\"token punctuation\">(</span>article<span class=\"token punctuation\">.</span><span class=\"token function\">links</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">all</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">// 【部分三】:从页面发现后续的url地址来抓取 (这里因csdn暂时拿不了页面尾部的分页数,因此手动模拟了一下数据...)</span>\n <span class=\"token keyword\">int</span> nextPage <span class=\"token operator\">=</span> Integer<span class=\"token punctuation\">.</span><span class=\"token function\">parseInt</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">.</span><span class=\"token function\">substring</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">.</span><span class=\"token function\">lastIndexOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\'/\'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n String newUrl <span class=\"token operator\">=</span> <span class=\"token string\">\"https://blog.csdn.net/qq_38225558/article/list/\"</span> <span class=\"token operator\">+</span> nextPage<span class=\"token punctuation\">;</span>\n page<span class=\"token punctuation\">.</span><span class=\"token function\">addTargetRequest</span><span class=\"token punctuation\">(</span>newUrl<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// Other ...</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"该页面url【{}】无法解析...\"</span><span class=\"token punctuation\">,</span> url<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> Site <span class=\"token function\">getSite</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> site<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span>String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n Spider<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">SamplePageProcessor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n <span class=\"token comment\">// 从指定的url地址开始抓</span>\n <span class=\"token punctuation\">.</span><span class=\"token function\">addUrl</span><span class=\"token punctuation\">(</span>Constants<span class=\"token punctuation\">.</span>CSDN_URL<span class=\"token punctuation\">)</span>\n <span class=\"token comment\">// 开启5个线程抓取</span>\n <span class=\"token punctuation\">.</span><span class=\"token function\">thread</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span>\n <span class=\"token comment\">// 启动爬虫</span>\n <span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"5_195\"></a>5、定时器定时爬取数据</h4> \n <blockquote> \n <p>这部分看自己需求,不是必要…</p> \n </blockquote> \n <p>① 启动类开启定时任务</p> \n <p><img src=\"https://img-blog.csdnimg.cn/2020070210523416.png\" alt=\"在这里插入图片描述\"></p> \n <p>② 编写定时任务</p> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token annotation punctuation\">@Component</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">AppScheduledJobs</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * 每10秒执行一次 * * @return: void * @author : zhengqing * @date : 2020/7/1 11:44 */</span>\n <span class=\"token annotation punctuation\">@Scheduled</span><span class=\"token punctuation\">(</span>cron <span class=\"token operator\">=</span> <span class=\"token string\">\"*/10 * * * * ?\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">cralwer</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"&lt;&lt;&lt;&lt;&lt;&lt; Start: 【{}】 &gt;&gt;&gt;&gt;&gt;&gt;\"</span><span class=\"token punctuation\">,</span> LocalDateTime<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n Spider<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">SamplePageProcessor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n <span class=\"token comment\">// .setDownloader(new HttpClientDownloader())</span>\n <span class=\"token comment\">// 从指定的url地址开始抓</span>\n <span class=\"token punctuation\">.</span><span class=\"token function\">addUrl</span><span class=\"token punctuation\">(</span>Constants<span class=\"token punctuation\">.</span>CSDN_URL<span class=\"token punctuation\">)</span>\n <span class=\"token comment\">// 开启5个线程抓取</span>\n <span class=\"token punctuation\">.</span><span class=\"token function\">thread</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span>\n <span class=\"token comment\">// 启动爬虫</span>\n <span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h3><a id=\"_233\"></a>三、运行项目测试</h3> \n <p>可以看到我们解析获取到的文章标题,文章内容,文章发布时间等一系列信息…<br> <img src=\"https://img-blog.csdnimg.cn/20200702105452361.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_240\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107078960', '2020-07-02 11:00:30', 1, '2020-11-07 15:21:20', 1, '2020-11-07 15:21:20', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (23, 1, 107058214, 'SpringBoot(28) 整合JustAuth实现第三方登录', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p><code>JustAuth</code>:一个第三方授权登录的工具类库 <a href=\"https://gitee.com/yadong.zhang/JustAuth\">https://gitee.com/yadong.zhang/JustAuth</a></p> \n <h3><a id=\"_SpringBootJustAuth__4\"></a>二、 基于SpringBoot整合JustAuth 三步曲</h3> \n <h4><a id=\"1pomxml_6\"></a>1、<code>pom.xml</code>中引入相关依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- reids --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.springframework.boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>spring-boot-starter-data-redis<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!-- 对象池,使用redis时必须引入 --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.apache.commons<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>commons-pool2<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n\n<span class=\"token comment\">&lt;!-- oauth工具类 --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.xkcoding<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>justauth-spring-boot-starter<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>1.1.0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n\n<span class=\"token comment\">&lt;!-- lombok插件 --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>org.projectlombok<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>lombok<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>optional</span><span class=\"token punctuation\">&gt;</span></span>true<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>optional</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>cn.hutool<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>hutool-all<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>5.3.8<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/com.google.guava/guava --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.google.guava<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>guava<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>29.0-jre<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2applicationyml_49\"></a>2、<code>application.yml</code>中相关配置</h4> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">server</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span>\n <span class=\"token key atrule\">servlet</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">context-path</span><span class=\"token punctuation\">:</span> /demo\n\n<span class=\"token key atrule\">spring</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">application</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> demo\n\n <span class=\"token comment\"># ======================== ↓↓↓↓↓↓ redis相关配置 ↓↓↓↓↓↓ ===============================</span>\n <span class=\"token key atrule\">redis</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># Redis服务器地址</span>\n <span class=\"token key atrule\">host</span><span class=\"token punctuation\">:</span> 127.0.0.1\n <span class=\"token comment\"># Redis服务器连接端口</span>\n <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">6379</span>\n <span class=\"token comment\"># 连接超时时间(毫秒</span>\n <span class=\"token key atrule\">timeout</span><span class=\"token punctuation\">:</span> 10000ms\n <span class=\"token comment\"># Redis服务器连接密码(默认为空)</span>\n <span class=\"token key atrule\">password</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># Redis数据库索引(默认为0)</span>\n <span class=\"token key atrule\">database</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\n <span class=\"token key atrule\">lettuce</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">pool</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># 连接池最大连接数(使用负值表示没有限制) 默认 8</span>\n <span class=\"token key atrule\">max-active</span><span class=\"token punctuation\">:</span> <span class=\"token number\">8</span>\n <span class=\"token comment\"># 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1</span>\n <span class=\"token key atrule\">max-wait</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">-</span>1ms\n <span class=\"token comment\"># 连接池中的最大空闲连接 默认 8</span>\n <span class=\"token key atrule\">max-idle</span><span class=\"token punctuation\">:</span> <span class=\"token number\">8</span>\n <span class=\"token comment\"># 连接池中的最小空闲连接 默认 0</span>\n <span class=\"token key atrule\">min-idle</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n <span class=\"token key atrule\">cache</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># 一般来说是不用配置的,Spring Cache 会根据依赖的包自行装配</span>\n <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> redis\n\n<span class=\"token key atrule\">justauth</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">enabled</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\n <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">github</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">client-id</span><span class=\"token punctuation\">:</span> 101d************<span class=\"token important\">*8b3a</span>\n <span class=\"token key atrule\">client-secret</span><span class=\"token punctuation\">:</span> 58e************************<span class=\"token important\">*5edd</span>\n <span class=\"token key atrule\">redirect-uri</span><span class=\"token punctuation\">:</span> http<span class=\"token punctuation\">:</span>//127.0.0.1/demo/oauth/github/callback\n <span class=\"token key atrule\">qq</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">client-id</span><span class=\"token punctuation\">:</span> 10*****<span class=\"token important\">*85</span>\n <span class=\"token key atrule\">client-secret</span><span class=\"token punctuation\">:</span> 1f7d***********************<span class=\"token important\">*d629e</span>\n <span class=\"token key atrule\">redirect-uri</span><span class=\"token punctuation\">:</span> http<span class=\"token punctuation\">:</span>//127.0.0.1/demo/oauth/qq/callback\n <span class=\"token key atrule\">wechat</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">client-id</span><span class=\"token punctuation\">:</span> wxdcb*****<span class=\"token important\">*4ff4</span>\n <span class=\"token key atrule\">client-secret</span><span class=\"token punctuation\">:</span> b4e9dc***********************<span class=\"token important\">*a08ed6d</span>\n <span class=\"token key atrule\">redirect-uri</span><span class=\"token punctuation\">:</span> http<span class=\"token punctuation\">:</span>//127.0.0.1/demo/oauth/wechat/callback\n <span class=\"token key atrule\">google</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">client-id</span><span class=\"token punctuation\">:</span> 716*****<span class=\"token important\">*17</span><span class=\"token punctuation\">-</span>6db*****<span class=\"token important\">*vh</span>*****<span class=\"token important\">*ttj320i</span>*****<span class=\"token important\">*userco</span>*****<span class=\"token important\">*t</span>.com\n <span class=\"token key atrule\">client-secret</span><span class=\"token punctuation\">:</span> 9IBorn***********<span class=\"token important\">*7</span><span class=\"token punctuation\">-</span>E\n <span class=\"token key atrule\">redirect-uri</span><span class=\"token punctuation\">:</span> http<span class=\"token punctuation\">:</span>//127.0.0.1/demo/oauth/google/callback\n <span class=\"token key atrule\">microsoft</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">client-id</span><span class=\"token punctuation\">:</span> 7bdce8*****************<span class=\"token important\">*e194ad76c1b</span>\n <span class=\"token key atrule\">client-secret</span><span class=\"token punctuation\">:</span> Iu0zZ4***********************<span class=\"token important\">*tl9PWan_</span>.\n <span class=\"token key atrule\">redirect-uri</span><span class=\"token punctuation\">:</span> https<span class=\"token punctuation\">:</span>//127.0.0.1/demo/oauth/microsoft/callback\n <span class=\"token key atrule\">mi</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">client-id</span><span class=\"token punctuation\">:</span> 288***********<span class=\"token important\">*2994</span>\n <span class=\"token key atrule\">client-secret</span><span class=\"token punctuation\">:</span> nFeTt89************************==\n <span class=\"token key atrule\">redirect-uri</span><span class=\"token punctuation\">:</span> http<span class=\"token punctuation\">:</span>//127.0.0.1/demo/oauth/mi/callback\n <span class=\"token key atrule\">wechat_enterprise</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">client-id</span><span class=\"token punctuation\">:</span> ww58*****<span class=\"token important\">*f3</span>***********<span class=\"token important\">*fbc</span>\n <span class=\"token key atrule\">client-secret</span><span class=\"token punctuation\">:</span> 8G6PCr00j***********************<span class=\"token important\">*rgk</span>***********<span class=\"token important\">*AyzaPc78</span>\n <span class=\"token key atrule\">redirect-uri</span><span class=\"token punctuation\">:</span> http<span class=\"token punctuation\">:</span>//127.0.0.1/demo/oauth/wechat_enterprise/callback\n <span class=\"token key atrule\">agent-id</span><span class=\"token punctuation\">:</span> 1******<span class=\"token important\">*2</span>\n <span class=\"token key atrule\">cache</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> redis\n <span class=\"token key atrule\">prefix</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\'SOCIAL::STATE::\'</span>\n <span class=\"token key atrule\">timeout</span><span class=\"token punctuation\">:</span> 1h\n</code></pre> \n <h6><a id=\"ex_GitHubClient_IDClient_Secret_125\"></a>ex: 获取GitHub的<code>Client ID</code>和<code>Client Secret</code></h6> \n <blockquote> \n <p>其它平台自行百度了解,本文只是单纯记录一个实现方式~</p> \n </blockquote> \n <ol>\n <li>申请地址:<a href=\"https://github.com/settings/developers\">https://github.com/settings/developers</a></li>\n <li>点击<code>New OAuth App</code><br> <img src=\"https://img-blog.csdnimg.cn/20200702090432881.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200702090543945.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></li>\n <li>申请之后点击应用我们就可以拿到自己所需的了<br> <img src=\"https://img-blog.csdnimg.cn/20200702090847450.png\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200702091005237.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></li>\n </ol> \n <h4><a id=\"3Controller_137\"></a>3、编写第三方登录Controller类</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/oauth\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token annotation punctuation\">@RequiredArgsConstructor</span><span class=\"token punctuation\">(</span>onConstructor_ <span class=\"token operator\">=</span> <span class=\"token annotation punctuation\">@Autowired</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">OauthController</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">final</span> AuthRequestFactory factory<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 登录类型 */</span>\n <span class=\"token annotation punctuation\">@GetMapping</span>\n <span class=\"token keyword\">public</span> Map<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> String<span class=\"token punctuation\">&gt;</span></span> <span class=\"token function\">loginType</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">&gt;</span></span> oauthList <span class=\"token operator\">=</span> factory<span class=\"token punctuation\">.</span><span class=\"token function\">oauthList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> oauthList<span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">collect</span><span class=\"token punctuation\">(</span>Collectors\n <span class=\"token punctuation\">.</span><span class=\"token function\">toMap</span><span class=\"token punctuation\">(</span>oauth <span class=\"token operator\">-</span><span class=\"token operator\">&gt;</span> oauth<span class=\"token punctuation\">.</span><span class=\"token function\">toLowerCase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">\"登录\"</span><span class=\"token punctuation\">,</span>\n oauth <span class=\"token operator\">-</span><span class=\"token operator\">&gt;</span> <span class=\"token string\">\"http://127.0.0.1/demo/oauth/login/\"</span> <span class=\"token operator\">+</span> oauth<span class=\"token punctuation\">.</span><span class=\"token function\">toLowerCase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 登录 * * @param oauthType 第三方登录类型 * @param response response * @throws IOException */</span>\n <span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/login/{oauthType}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">renderAuth</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@PathVariable</span> String oauthType<span class=\"token punctuation\">,</span> HttpServletResponse response<span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">throws</span> IOException <span class=\"token punctuation\">{\n <!-- --></span>\n AuthRequest authRequest <span class=\"token operator\">=</span> factory<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token function\">getAuthSource</span><span class=\"token punctuation\">(</span>oauthType<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n response<span class=\"token punctuation\">.</span><span class=\"token function\">sendRedirect</span><span class=\"token punctuation\">(</span>authRequest<span class=\"token punctuation\">.</span><span class=\"token function\">authorize</span><span class=\"token punctuation\">(</span>oauthType <span class=\"token operator\">+</span> <span class=\"token string\">\"::\"</span> <span class=\"token operator\">+</span> AuthStateUtils<span class=\"token punctuation\">.</span><span class=\"token function\">createState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 登录成功后的回调 * * @param oauthType 第三方登录类型 * @param callback 携带返回的信息 * @return 登录成功后的信息 */</span>\n <span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/{oauthType}/callback\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> AuthResponse <span class=\"token function\">login</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@PathVariable</span> String oauthType<span class=\"token punctuation\">,</span> AuthCallback callback<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n AuthRequest authRequest <span class=\"token operator\">=</span> factory<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token function\">getAuthSource</span><span class=\"token punctuation\">(</span>oauthType<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n AuthResponse response <span class=\"token operator\">=</span> authRequest<span class=\"token punctuation\">.</span><span class=\"token function\">login</span><span class=\"token punctuation\">(</span>callback<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"【response】= {}\"</span><span class=\"token punctuation\">,</span> JSONUtil<span class=\"token punctuation\">.</span><span class=\"token function\">toJsonStr</span><span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> response<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token keyword\">private</span> AuthSource <span class=\"token function\">getAuthSource</span><span class=\"token punctuation\">(</span>String type<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>StrUtil<span class=\"token punctuation\">.</span><span class=\"token function\">isNotBlank</span><span class=\"token punctuation\">(</span>type<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> AuthSource<span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span>type<span class=\"token punctuation\">.</span><span class=\"token function\">toUpperCase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">RuntimeException</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"不支持的类型\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h3><a id=\"_199\"></a>三、测试登录</h3> \n <p>运行项目后访问: <a href=\"http://127.0.0.1/demo/oauth\">http://127.0.0.1/demo/oauth</a><br> <img src=\"https://img-blog.csdnimg.cn/20200701104506663.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 举例点击github登录会跳转进入授权页面<br> <img src=\"https://img-blog.csdnimg.cn/20200701104656163.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 授权成功后就会跳转到我们在<code>application.yml</code>中配置的回调地址<br> <img src=\"https://img-blog.csdnimg.cn/20200701104931383.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_210\"></a>本文案例demo项目地址</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/107058214', '2020-07-01 10:57:55', 1, '2020-11-07 15:21:20', 1, '2020-11-07 15:21:20', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (24, 1, 106902853, 'Java开发者文档(开发软件+规范)', '★一、Java城堡搭建☺★', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h1><a id=\"javadeveloperdocument_0\"></a>java-developer-document</h1> \n <p>文档地址:<a href=\"https://gitee.com/zhengqingya/java-developer-document\">https://gitee.com/zhengqingya/java-developer-document</a></p> \n <h2><a id=\"_4\"></a>一、开发环境</h2> \n <blockquote> \n <p>Java开发环境系列分享链接:<a href=\"https://pan.baidu.com/s/1jIB_5E-1g3_XrMSloF88YA\">https://pan.baidu.com/s/1jIB_5E-1g3_XrMSloF88YA</a> 提取码:8xa5<br> <img src=\"https://img-blog.csdnimg.cn/20200622152859212.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n </blockquote> \n <h3><a id=\"Windows10_9\"></a>Windows10专业版</h3> \n <p><a href=\"https://www.panyun.com/\">点击下载盘云装机助手</a></p> \n <p>激活:</p> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># “以管理员身份”运行cmd</span>\n\n<span class=\"token comment\"># \"已成功卸载了产品密钥”</span>\nslmgr.vbs /upk\n\n<span class=\"token comment\"># “成功的安装了产品密钥”</span>\nslmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX\n\n<span class=\"token comment\"># “密钥管理服务计算机名成功的设置为zh.us.to”</span>\nslmgr /skms zh.us.to\n\n<span class=\"token comment\"># “成功的激活了产品”</span>\nslmgr /ato\n</code></pre> \n <h3><a id=\"_31\"></a>谷歌插件</h3> \n <p><a href=\"http://one.newday.me/\">点击下载集装箱</a></p> \n <h3><a id=\"Docker_35\"></a>Docker</h3> \n <ol>\n <li><a href=\"https://hub.docker.com/?overlay=onboarding\">点击下载Docker Desktop</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/103441358\">点击查看安装教程</a></li>\n </ol> \n <h3><a id=\"Git_40\"></a>Git</h3> \n <ol>\n <li><a href=\"https://git-scm.com/downloads\">点击下载Git</a></li>\n <li><a href=\"https://tortoisegit.org/download/\">点击下载TortoiseGit</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/86213813\">Git安装教程</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/86220668\">TortoiseGit安装教程</a></li>\n </ol> \n <h3><a id=\"JDK_47\"></a>JDK</h3> \n <ol>\n <li><a href=\"https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html\">点击下载JDK8</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/81361749\">点击查看安装教程</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/80492944\">点击查看环境变量配置</a></li>\n </ol> \n <h3><a id=\"Apache_Maven_53\"></a>Apache Maven</h3> \n <ol>\n <li><a href=\"http://maven.apache.org/download.cgi\">点击下载Apache Maven</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/83956373\">点击查看安装与配置</a></li>\n </ol> \n <h3><a id=\"Gradle_58\"></a>Gradle</h3> \n <p><a href=\"https://services.gradle.org/distributions/\">点击下载Gradle</a></p> \n <h3><a id=\"IntelliJ_IDEA_62\"></a>IntelliJ IDEA</h3> \n <p><a href=\"https://www.jetbrains.com/idea/download/#section=windows\">点击下载IDEA</a></p> \n <hr> \n <h3><a id=\"Nodejs_68\"></a>Node.js</h3> \n <p><a href=\"https://nodejs.org/zh-cn/download/\">点击下载</a></p> \n <h3><a id=\"Visual_Studio_Code_72\"></a>Visual Studio Code</h3> \n <p><a href=\"https://code.visualstudio.com/\">点击下载</a></p> \n <h3><a id=\"Python_76\"></a>Python</h3> \n <ol>\n <li><a href=\"https://www.python.org/getit/\">点击下载解释器</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/81464255\">点击查看解释器安装教程</a></li>\n <li><a href=\"https://zhengqing.blog.csdn.net/article/details/104180344\">点击查看PyCharm安装教程</a></li>\n </ol> \n <h3><a id=\"FinalShell_82\"></a>FinalShell</h3> \n <p><a href=\"http://www.hostbuf.com/t/988.html\">点击下载</a></p> \n <h3><a id=\"Everything_86\"></a>Everything</h3> \n <p><a href=\"https://www.voidtools.com/zh-cn/downloads/\">点击下载</a></p> \n <h3><a id=\"_90\"></a>微信开发者工具</h3> \n <p><a href=\"https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html\">点击下载</a></p> \n <h3><a id=\"HBuilderX_94\"></a>HBuilderX</h3> \n <p><a href=\"https://www.dcloud.io/\">点击下载</a></p> \n <h3><a id=\"Other_Tools_98\"></a>Other Tools</h3> \n <p><a href=\"https://gitee.com/zhengqingya/docker-compose\">mysql、redis、mq等可通过<code>docker-compose</code>直接安装,点击进入查看详情</a></p> \n <hr> \n <h2><a id=\"_109\"></a>二、开发规范</h2> \n <h3><a id=\"IDEA_111\"></a>IDEA插件</h3> \n <blockquote> \n <p>这里根据自己的情况来选择安装即可</p> \n </blockquote> \n <table>\n <thead>\n <tr>\n <th>是否必装</th>\n <th>插件名称</th>\n <th>插件介绍</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>√</td>\n <td>Alibaba Java Coding Guidelines</td>\n <td>阿里巴巴出的代码规范检查插件</td>\n </tr>\n <tr>\n <td>√</td>\n <td>Eclipse Code Formatter</td>\n <td>阿里代码规范code style所需</td>\n </tr>\n <tr>\n <td>√</td>\n <td>Save Actions</td>\n <td>保存时的一些自动操作,如按下Ctrl + S 即可自动按照阿里巴巴编码风格格式化代码</td>\n </tr>\n <tr>\n <td>√</td>\n <td>Lombok</td>\n <td>类上注解@Data省去getter/setter、toString等方法滴</td>\n </tr>\n <tr>\n <td></td>\n <td>JRebel</td>\n <td>热部署滴 快捷键:Ctrl+F9</td>\n </tr>\n <tr>\n <td></td>\n <td>Free Mybatis plugin</td>\n <td>在 Mybatis 的 mapper Java 接口方法和 mapper XML 文件之间来回切换</td>\n </tr>\n <tr>\n <td></td>\n <td>MyBatis Log Plugin</td>\n <td>Mybatis运行后的相关sql日志可转换成sql语句直接输出在console中</td>\n </tr>\n <tr>\n <td></td>\n <td>CodeGlance</td>\n <td>类似SublimeText的Mini Map插件,一个代码编辑区缩略图插件,可以快速定位代码</td>\n </tr>\n <tr>\n <td></td>\n <td>CamelCase</td>\n <td>命名风格转换插件,可以在 kebab_case,SNAKE_CASE,PascalCase,camelCase,snake_case 和 空格风格之间切换。快捷键苹果为 ⇧+⌥+ U ,windows 下为 Shift + Alt +U</td>\n </tr>\n <tr>\n <td></td>\n <td>RestfulToolkit</td>\n <td>一套 RESTful 服务开发辅助工具集,可根据url定位controller</td>\n </tr>\n <tr>\n <td></td>\n <td>Grep Console</td>\n <td>自定义设置控制台输出颜色,显示不同日志信息级别的颜色和背景色</td>\n </tr>\n <tr>\n <td></td>\n <td>.ignore</td>\n <td>各类版本控制忽略文件生成工具</td>\n </tr>\n <tr>\n <td></td>\n <td>GenerateAllSetter</td>\n <td>生成对象set方法</td>\n </tr>\n </tbody>\n </table> \n <h3><a id=\"_Code_Style_132\"></a>代码规范 Code Style</h3> \n <h6><a id=\"Google_134\"></a>Google</h6> \n <ol>\n <li>下载<a href=\"https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml\">intellij-java-google-style.xml</a></li>\n <li><img src=\"https://img-blog.csdnimg.cn/20200622153026211.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></li>\n </ol> \n <h6><a id=\"_140\"></a>阿里</h6> \n <blockquote> \n <p>需<code>Eclipse Code Formatter</code>插件</p> \n </blockquote> \n <ol>\n <li>下载<a href=\"https://github.com/alibaba/p3c/tree/master/p3c-formatter\">eclipse-codestyle.xml</a></li>\n <li><img src=\"https://img-blog.csdnimg.cn/2020062215303981.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></li>\n </ol> \n <h3><a id=\"Java_147\"></a>阿里巴巴Java开发手册</h3> \n <p><a href=\"https://github.com/alibaba/p3c/blob/master/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C%EF%BC%88%E6%B3%B0%E5%B1%B1%E7%89%88%EF%BC%89.pdf\">点击下载</a></p> \n <h3><a id=\"Ctrl__S_152\"></a>自动格式化代码<code>Ctrl + S</code></h3> \n <blockquote> \n <p>需<code>Save Actions</code>插件<br> <img src=\"https://img-blog.csdnimg.cn/20200622153048605.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n </blockquote> \n <hr> \n <blockquote> \n <p>目前暂时就更新到这里,后期有时间应该会不断更新: <a href=\"https://gitee.com/zhengqingya/java-developer-document\">https://gitee.com/zhengqingya/java-developer-document</a></p> \n </blockquote> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/106902853', '2020-06-22 15:42:28', 1, '2020-11-07 15:21:20', 1, '2020-11-07 15:21:20', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (25, 1, 106603065, 'Docker(12) Windows上通过docker-compose安装开发环境篇(mysql、redis、nginx、mq ...)', '----- -----⑤、Docker', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <p><img src=\"https://img-blog.csdnimg.cn/20200607162514253.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"_4\"></a>一、前言</h3> \n <p>本文主要讲述在Windows系统上通过docker-compose安装开发环境(mysql、redis、nginx、mq …)</p> \n <p>Liunx版的可参考:<a href=\"https://zhengqing.blog.csdn.net/article/details/105937297\">https://zhengqing.blog.csdn.net/article/details/105937297</a></p> \n <h3><a id=\"Docker_10\"></a>二、Docker安装</h3> \n <p>参考:<a href=\"https://zhengqing.blog.csdn.net/article/details/103441358\">https://zhengqing.blog.csdn.net/article/details/103441358</a></p> \n <h3><a id=\"_14\"></a>三、环境准备</h3> \n <blockquote> \n <p>注:建议使用<code>Git Bash Here</code>执行以下命令</p> \n </blockquote> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 创建文件夹</span>\n<span class=\"token function\">mkdir</span> -p E:/IT_zhengqing/soft/soft-dev/Docker\n<span class=\"token function\">cd</span> E:/IT_zhengqing/soft/soft-dev/Docker\n\n<span class=\"token function\">git</span> clone https://gitee.com/zhengqingya/docker-compose.git\n<span class=\"token function\">cd</span> docker-compose/Windows\n</code></pre> \n <h3><a id=\"_27\"></a>四、运行服务</h3> \n <h6><a id=\"1DockerPortainer_29\"></a>1、安装Docker可视化界面工具<code>Portainer</code></h6> \n <blockquote> \n <p>挂载宿主机目录的时候可能会出现如下问题,点击<code>Share it</code>即可<br> <img src=\"https://img-blog.csdnimg.cn/20200607162914372.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n </blockquote> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-portainer.yml -p portainer up -d\n</code></pre> \n <p>然后访问 <a href=\"http://127.0.0.1:9000/\">http://127.0.0.1:9000/</a> 创建用户账号密码</p> \n <p><img src=\"https://img-blog.csdnimg.cn/20191208150557715.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGVuZ3FpbmcuYmxvZy5jc2RuLm5ldA==,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <p>打开docker设置<br> <img src=\"https://img-blog.csdnimg.cn/20191208150723677.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGVuZ3FpbmcuYmxvZy5jc2RuLm5ldA==,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <p>然后回到浏览器填写如下信息即可~</p> \n <blockquote> \n <p>local_zq -&gt; docker.for.win.localhost:2375</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20191208151003133.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGVuZ3FpbmcuYmxvZy5jc2RuLm5ldA==,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20191208151031150.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly96aGVuZ3FpbmcuYmxvZy5jc2RuLm5ldA==,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"2MySQL_52\"></a>2、MySQL</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-mysql.yml -p mysql up -d\n</code></pre> \n <h6><a id=\"3Yearning_58\"></a>3、Yearning</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-yearning.yml -p yearning up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1:8000/\"><code>http://127.0.0.1:8000/</code></a><br> 默认登录账号密码:<code>admin/Yearning_admin</code></p> \n <h6><a id=\"4Couchbase_67\"></a>4、Couchbase</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-couchbase.yml -p couchbase up -d\n</code></pre> \n <p>管理平台地址:<a href=\"http://127.0.0.1:8091\"><code>http://127.0.0.1:8091</code></a><br> 默认登录账号密码:<code>Administrator/password</code></p> \n <h6><a id=\"5Redis_76\"></a>5、Redis</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-redis.yml -p redis up -d\n</code></pre> \n <p>连接redis</p> \n <pre><code class=\"prism language-shell\">docker <span class=\"token function\">exec</span> -it redis redis-cli -a 123456 <span class=\"token comment\"># 密码为123456</span>\n</code></pre> \n <h6><a id=\"6Jrebel_88\"></a>6、Jrebel</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-jrebel.yml -p jrebel up -d\n</code></pre> \n <p>默认反代<code>idea.lanyus.com</code>, 运行起来后</p> \n <ol>\n <li>激活地址: <code>http://127.0.0.1:8888/UUID</code> -&gt; 注:UUID可以自己生成,并且必须是UUID才能通过验证 -&gt; <a href=\"http://www.uuid.online/\">UUID在线生成</a></li>\n <li>邮箱随意填写</li>\n </ol> \n <p><img src=\"https://img-blog.csdnimg.cn/20200607163308144.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"7Nginx_101\"></a>7、Nginx</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-nginx.yml -p nginx up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1/\"><code>http://127.0.0.1/</code></a></p> \n <h6><a id=\"8Elasticsearch_109\"></a>8、Elasticsearch</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-elasticsearch.yml -p elasticsearch up -d\n</code></pre> \n <h6><a id=\"9RabbitMQ_115\"></a>9、RabbitMQ</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-rabbitmq.yml -p rabbitmq up -d\n</code></pre> \n <p>web管理端:<a href=\"http://127.0.0.1:15672\"><code>http://127.0.0.1:15672</code></a><br> 登录账号密码:<code>admin/admin</code></p> \n <h6><a id=\"10ActiveMQ_124\"></a>10、ActiveMQ</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-activemq.yml -p activemq up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1:8161\"><code>http://127.0.0.1:8161</code></a><br> 登录账号密码:<code>admin/admin</code></p> \n <h6><a id=\"11BaiduPCSWeb_133\"></a>11、BaiduPCS-Web</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-baidupcs-web.yml -p baidupcs-web up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1:5299\"><code>http://127.0.0.1:5299</code></a></p> \n <h6><a id=\"12MinIO_141\"></a>12、MinIO</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-minio.yml -p minio up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1:9001/minio\"><code>http://127.0.0.1:9001/minio</code></a><br> 登录账号密码:<code>root/password</code></p> \n <h6><a id=\"13Nacos_151\"></a>13、Nacos</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-nacos.yml -p nacos up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1:8848/nacos\"><code>http://127.0.0.1:8848/nacos</code></a><br> 登录账号密码默认:<code>nacos/nacos</code></p> \n <h6><a id=\"14Sentinel_160\"></a>14、Sentinel</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-sentinel.yml -p sentinel up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1:8858\"><code>http://127.0.0.1:8858</code></a><br> 登录账号密码:<code>sentinel/sentinel</code></p> \n <h6><a id=\"15Kafka_169\"></a>15、Kafka</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-kafka.yml -p kafka up -d\n</code></pre> \n <p>集群管理地址:<a href=\"http://127.0.0.1:9001\"><code>http://127.0.0.1:9001</code></a></p> \n <h6><a id=\"16Tomcat_177\"></a>16、Tomcat</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-tomcat.yml -p tomcat up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1:8081\"><code>http://127.0.0.1:8081</code></a></p> \n <h6><a id=\"17GitLab_185\"></a>17、GitLab</h6> \n <blockquote> \n <p>docker-compose-gitlab.yml文件参考:<a href=\"https://github.com/sameersbn/docker-gitlab/blob/master/docker-compose.yml\">https://github.com/sameersbn/docker-gitlab/blob/master/docker-compose.yml</a></p> \n </blockquote> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-gitlab.yml -p gitlab up -d\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200607163421890.png\" alt=\"在这里插入图片描述\"></p> \n <p>gitlab容器启动完成日志如图:<br> <img src=\"https://img-blog.csdnimg.cn/20200607163431331.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <p>访问地址:<a href=\"http://127.0.0.1:10080/\"><code>http://127.0.0.1:10080/</code></a><br> 设置root账号密码<br> <img src=\"https://img-blog.csdnimg.cn/20200607163442239.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <p>登录成功如下:<br> <img src=\"https://img-blog.csdnimg.cn/20200607163458342.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"18Jenkins_205\"></a>18、Jenkins</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-jenkins.yml -p jenkins up -d\n</code></pre> \n <p>访问地址:<a href=\"http://127.0.0.1:8080\"><code>http://127.0.0.1:8080</code></a></p> \n <hr> \n <h3><a id=\"Other_215\"></a>五、Other</h3> \n <p>更多可关注:<a href=\"https://gitee.com/zhengqingya/docker-compose\">https://gitee.com/zhengqingya/docker-compose</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/106603065', '2020-06-07 16:50:00', 1, '2020-11-07 15:21:20', 1, '2020-11-07 15:21:20', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (26, 1, 105937297, 'Docker(11) docker-compose部署开发环境篇(mysql、redis、nginx、mq ...)', '----- -----⑤、Docker', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <p><img src=\"https://img-blog.csdnimg.cn/20200506131910627.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"_5\"></a>一、前言</h3> \n <ol>\n <li>蹭着这次五一小假期,小编整理了一下之前docker部署开发环境系列的笔记,目前整理出来的有<code>docker-compose</code>部署<code>portainer</code>、<code>mysql</code>、<code>oracle18c</code>、<code>jenkins</code>、<code>jrebel</code>、<code>redis</code>、<code>nginx</code>、<code>elasticsearch</code>、<code>rabbitmq</code>、<code>activemq</code>、<code>baidupcs-web</code>、<code>nacos</code>、<code>sentinel</code>、<code>minio</code>、<code>kafka</code> 、<code>yearning</code> …</li>\n <li><code>docker-compose</code>系列笔记地址: <a href=\"https://gitee.com/zhengqingya/docker-compose\">https://gitee.com/zhengqingya/docker-compose</a> (如果以后有时间,将会不定期更新,有需要的小伙伴们自取即可)</li>\n <li>部分可能需要根据自己的实际环境来做修改才能成功运行哦,比如端口占用之类…<br> <img src=\"https://img-blog.csdnimg.cn/20200505192713184.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></li>\n </ol> \n <h3><a id=\"_12\"></a>二、环境准备</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">git</span> clone https://gitee.com/zhengqingya/docker-compose.git\n<span class=\"token function\">cd</span> docker-compose\n</code></pre> \n <h3><a id=\"_19\"></a>三、运行服务</h3> \n <h6><a id=\"1portainer_21\"></a>1、portainer</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-portainer.yml -p portainer up -d\n\n-p:项目名称\n-f:指定docker-compose.yml文件路径\n-d:后台启动\n</code></pre> \n <p>访问地址:<code>ip地址:9000</code></p> \n <h6><a id=\"2mysql_33\"></a>2、mysql</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-mysql.yml -p mysql up -d\n</code></pre> \n <h6><a id=\"3oracle18c_39\"></a>3、oracle18c</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-oracle18c.yml -p oracle18c up -d\n</code></pre> \n <blockquote> \n <p>配置参考:<a href=\"https://zhengqing.blog.csdn.net/article/details/103296040\">Docker(9) 安装Oracle18c</a></p> \n </blockquote> \n <h6><a id=\"4jenkins_47\"></a>4、jenkins</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-jenkins.yml -p jenkins up -d\n</code></pre> \n <p>访问地址:<code>ip地址:8080</code></p> \n <h6><a id=\"5jrebel_55\"></a>5、jrebel</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-jrebel.yml -p jrebel up -d\n</code></pre> \n <p>默认反代<code>idea.lanyus.com</code>, 运行起来后</p> \n <ol>\n <li>激活地址: <code>ip地址:8888/UUID</code> -&gt; 注:UUID可以自己生成,并且必须是UUID才能通过验证 -&gt; <a href=\"http://www.uuid.online/\">UUID在线生成</a></li>\n <li>邮箱随意填写</li>\n </ol> \n <h6><a id=\"6redis_66\"></a>6、redis</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-redis.yml -p redis up -d\n</code></pre> \n <p>连接redis</p> \n <pre><code class=\"prism language-shell\">docker <span class=\"token function\">exec</span> -it redis redis-cli -a 123456 <span class=\"token comment\"># 密码为123456</span>\n</code></pre> \n <h6><a id=\"7nginx_78\"></a>7、nginx</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-nginx.yml -p nginx up -d\n</code></pre> \n <p>访问地址:<code>ip地址:80</code></p> \n <h6><a id=\"8elasticsearch_86\"></a>8、elasticsearch</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-elasticsearch.yml -p elasticsearch up -d\n</code></pre> \n <h6><a id=\"9rabbitmq_92\"></a>9、rabbitmq</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-rabbitmq.yml -p rabbitmq up -d\n</code></pre> \n <p>web管理端:<code>ip地址:15672</code><br> 登录账号密码:<code>admin/admin</code></p> \n <h6><a id=\"10activemq_101\"></a>10、activemq</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-activemq.yml -p activemq up -d\n</code></pre> \n <p>访问地址:<code>ip地址:8161</code><br> 登录账号密码:<code>admin/admin</code></p> \n <h6><a id=\"11baidupcsweb_110\"></a>11、baidupcs-web</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-baidupcs-web.yml -p baidupcs-web up -d\n</code></pre> \n <p>访问地址:<code>ip地址:5299</code></p> \n <h6><a id=\"12nacos_118\"></a>12、nacos</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-nacos.yml -p nacos up -d\n</code></pre> \n <p>访问地址:<code>ip地址:8848/nacos</code><br> 登录账号密码默认:<code>nacos/nacos</code></p> \n <h6><a id=\"13sentinel_127\"></a>13、sentinel</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-sentinel.yml -p sentinel up -d\n</code></pre> \n <p>访问地址:<code>ip地址:8858</code><br> 登录账号密码:<code>sentinel/sentinel</code></p> \n <h6><a id=\"14minio_136\"></a>14、minio</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-minio.yml -p minio up -d\n</code></pre> \n <p>访问地址:<code>ip地址:9000/minio</code><br> 登录账号密码:<code>root/password</code></p> \n <h6><a id=\"15kafka_146\"></a>15、kafka</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-kafka.yml -p kafka up -d\n</code></pre> \n <p>集群管理地址:<code>ip地址:9000</code></p> \n <h6><a id=\"16yearning_155\"></a>16、yearning</h6> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-yearning.yml -p yearning up -d\n</code></pre> \n <p>访问地址:<code>ip地址:8000</code><br> 默认登录账号密码:<code>admin/Yearning_admin</code></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/105937297', '2020-05-05 20:08:58', 1, '2020-11-07 15:21:22', 1, '2020-11-07 15:21:22', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (27, 1, 105840947, 'MyBatis(12) 源码解析之SQL执行流程', '----- -----④、MyBatis', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <h4><a id=\"_2\"></a>资料</h4> \n <ol>\n <li>mybatis文档:<a href=\"https://mybatis.org/mybatis-3/index.html\">https://mybatis.org/mybatis-3/index.html</a></li>\n <li>mybatis源码:<a href=\"https://github.com/mybatis/mybatis-3\">https://github.com/mybatis/mybatis-3</a></li>\n </ol> \n <h3><a id=\"mybatis_7\"></a>二、mybatis是什么?</h3> \n <ol>\n <li>一款优秀的<code>持久层框架</code>,支持<code>自定义SQL</code>、<code>存储过程</code>以及<code>高级映射</code>。</li>\n <li><code>免除</code>了传统的<code>JDBC代码</code>以及<code>设置参数</code>和<code>获取结果集</code>的工作。</li>\n <li>可以通过<code>XML</code>/<code>注解</code>方式来<code>配置和映射</code> <code>原始类型</code>、<code>接口</code>和<code>Java POJO</code>为数据库中的记录。</li>\n </ol> \n <p>mybatis和hibernate都属于<code>ORM</code>框架</p> \n <h6><a id=\"ORM_15\"></a>ORM是什么?</h6> \n <p>ORM<code>对象关系映射</code>: <code>用于实现面向对象编程语言里不同类型系统数据之间的转换</code>,解决数据库与程序间的异构性</p> \n <p>ex: <code>username</code>字段在数据库中为<code>VARCHAR</code>类型,而在Java对象中为<code>String</code>类型<br> <img src=\"https://img-blog.csdnimg.cn/2020042921411580.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"_21\"></a>三、入门环境准备</h3> \n <p>这里可直接参考mybatis文档:<a href=\"https://mybatis.org/mybatis-3/getting-started.html\">https://mybatis.org/mybatis-3/getting-started.html</a></p> \n <p>小编这里使用的是mybatis源码环境,即 将源码clone下来根据文档入门实现了一个简单的sql查询</p> \n <blockquote> \n <p>详细代码可自行参考: <a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/2020042918340219.png\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200429162148199.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200429162634688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <p>下面将通过debug一步一步探索源码,主要将围绕如图3大模块来debug</p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200429220854645.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"mybatis_42\"></a>四、mybatis获取数据源</h3> \n <p><img src=\"https://img-blog.csdnimg.cn/20200429164356700.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200429170249269.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 这里的root即拿到的配置文件中的内容,然后一个一个去解析加载数据<br> <img src=\"https://img-blog.csdnimg.cn/20200429170427331.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <code>propertiesElement(root.evalNode(\"properties\"))</code>:加载<code>jdbc.properties</code>配置文件中数据<br> <img src=\"https://img-blog.csdnimg.cn/20200429172227562.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 执行完,到<code>environmentsElement(root.evalNode(\"environments\"))</code>方法处,即已经拿到我们配置文件的数据源信息<br> <img src=\"https://img-blog.csdnimg.cn/20200429173047931.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 然后进入<code>dataSourceElement(child.evalNode(\"dataSource\"))</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429175321579.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 再进入<code>resolveClass</code>,发现通过<code>pooled</code>这个key可以拿到<code>org.apache.ibatis.datasource.pooled.PooledDataSourceFactory</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429175637650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 回来我们可以发现获取到的这个<code>pooled</code>值value,也就是<code>org.apache.ibatis.datasource.pooled.PooledDataSourceFactory</code>Class类再newInstance拿到<code>DataSourceFactory</code>这么一个实例</p> \n <pre><code class=\"prism language-java\">DataSourceFactory factory <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>DataSourceFactory<span class=\"token punctuation\">)</span> <span class=\"token function\">resolveClass</span><span class=\"token punctuation\">(</span>type<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getDeclaredConstructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">newInstance</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</code></pre> \n <p>最终返回,即发现已经拿到了我们的<code>dataSource</code>数据库源,然后通过Builder设计模式赋值给<code>Environment</code>,存放到<code>org.apache.ibatis.session.Configuration#environment</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429180604933.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"mybatissql_65\"></a>五、mybatis获取sql执行语句</h3> \n <p>首先要明白我们的sql语句是写在mapper.xml中,然后是在<code>mybatis-config.xml</code>中解析,因此debug 查看<code>org.apache.ibatis.builder.xml.XMLConfigBuilder#parseConfiguration</code> 方法中的 <code>mapperElement(root.evalNode(\"mappers\"))</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429184308964.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 这里因为只有<code>resource</code>,因此走如下断点处方式解析mapper<br> <img src=\"https://img-blog.csdnimg.cn/20200429185254187.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 进入<code>mapperParser.parse()</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429191254362.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 这里因此我们的sql是select语句,因此直接进入<code>buildStatementFromContext(context.evalNodes(\"select|insert|update|delete\"))</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429192141656.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 注意此时list中的就是我们mapper中的sql语句<br> <img src=\"https://img-blog.csdnimg.cn/20200429192418302.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 然后进入<code>statementParser.parseStatementNode()</code>看看mybatis拿到sql内容之后又是怎么做的呢</p> \n <p>可以看见mybatis是将<code>context</code>中的sql内容一个一个解析成临时的局部变量<br> <img src=\"https://img-blog.csdnimg.cn/20200429192913605.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 再走到下面,发现解析的变量是在这里被使用,因此进入<code>builderAssistant.addMappedStatement(...)</code>方法<br> <img src=\"https://img-blog.csdnimg.cn/20200429193221801.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 最终可以看见这些变量是存到了<code>MappedStatement</code>类中,然后传给<code>org.apache.ibatis.session.Configuration#mappedStatements</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429194330443.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"mybatis_86\"></a>六、mybatis操作数据库</h3> \n <p><img src=\"https://img-blog.csdnimg.cn/20200429203246788.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 进入<code>configuration.newExecutor(tx, execType)</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429204000427.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 这里可以看见默认返回一个<code>SimpleExecutor</code>简单执行器,以及我们的mybatis在这里默认开启一级缓存<br> <img src=\"https://img-blog.csdnimg.cn/2020042920424252.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 执行完这里会返回一个<code>DefaultSqlSession</code><br> <img src=\"https://img-blog.csdnimg.cn/202004292045432.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 然后调用<code>selectOne</code>方法<br> <img src=\"https://img-blog.csdnimg.cn/20200429204718976.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 进入<code>selectList</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429204904762.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 这里<code>ms</code>中含之前获取的sql执行语句,然后进入<code>executor.query</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429205644862.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/2020042921043951.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200429210628300.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 这里可以看见<code>prepareStatement</code>方法中拿到我们的<code>connection</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429211531274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 然后进入<code>handler.query(stmt, resultHandler)</code>可以看到拿到了<code>PreparedStatement</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429212329985.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 然后进入<code>resultSetHandler.handleResultSets(ps)</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429213018892.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 进入<code>getFirstResultSet(stmt)</code>方法<br> <img src=\"https://img-blog.csdnimg.cn/20200429213112349.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 进入<code>ResultSetWrapper</code><br> <img src=\"https://img-blog.csdnimg.cn/20200429213328776.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 到这里我们就可以明白什么是ORM了!!!</p> \n <p><code>用于实现面向对象编程语言里不同类型系统数据之间的转换</code></p> \n <p><code>username</code>字段在数据库中为<code>VARCHAR</code>类型,而在Java对象中为<code>String</code>类型<br> <img src=\"https://img-blog.csdnimg.cn/2020042921411580.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 最后回到<code>org.apache.ibatis.executor.BaseExecutor#queryFromDatabase</code>方法处,<code>list</code>中的数据也就是最后sql查询到的结果<br> <img src=\"https://img-blog.csdnimg.cn/2020042921523318.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> debug结束后,最终完美拿到了我们的数据<br> <img src=\"https://img-blog.csdnimg.cn/2020042921560443.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 现在再来看看这幅图,应该会更容易理解了<br> <img src=\"https://img-blog.csdnimg.cn/20200429221006595.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"mybatis_126\"></a>七、mybatis执行流程</h3> \n <p><img src=\"https://img-blog.csdnimg.cn/20200429221516123.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 参考:<a href=\"https://www.jianshu.com/p/6b957c494fa8\">MyBatis体系结构源码解读</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/105840947', '2020-04-29 22:22:34', 1, '2020-11-07 15:21:22', 1, '2020-11-07 15:21:22', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (28, 1, 105429784, 'Element(5) 动态显示隐藏筛选表格列数据', '----- ----- Element', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p>本文将实现<code>element</code>的动态显示隐藏筛选表格列数据,功能很简单,这里简单的记录一下,效果图如下:<br> <img src=\"https://img-blog.csdnimg.cn/20200410113702122.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"_5\"></a>二、功能实现</h3> \n <p>主要使用element的 <code>多选框组checkbox-group</code> + <code>popover弹出框</code> 来实现</p> \n <ol>\n <li>checkbox-group: <a href=\"https://element.eleme.cn/2.10/#/zh-CN/component/checkbox\">https://element.eleme.cn/2.10/#/zh-CN/component/checkbox</a></li>\n <li>popover弹出框: <a href=\"https://element.eleme.cn/2.10/#/zh-CN/component/popover\">https://element.eleme.cn/2.10/#/zh-CN/component/popover</a></li>\n </ol> \n <h3><a id=\"_12\"></a>三、代码部分</h3> \n <blockquote> \n <p>温馨小提示:个人实现代码仅供参考,建议多看下element官网提供的资料来实现~</p> \n </blockquote> \n <h4><a id=\"1_16\"></a>1、列筛选弹出框</h4> \n <pre><code class=\"prism language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>el-popover</span> <span class=\"token attr-name\">placement</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>right<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">title</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>列筛选<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">trigger</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>click<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>el-checkbox-group</span> <span class=\"token attr-name\">v-model</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>factorNames<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">@change</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>handleColumnFilter<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>el-checkbox</span> <span class=\"token attr-name\">v-for</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>item in factorNameColumnList<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">:key</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>item<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">:label</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>item<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>{\n <!-- -->{ item.factorName }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>el-checkbox</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>el-checkbox-group</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>el-button</span> <span class=\"token attr-name\">slot</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>reference<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>i</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>el-icon-arrow-down el-icon-menu<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/&gt;</span></span>监测因子<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>el-button</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>el-popover</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2_31\"></a>2、表格数据</h4> \n <pre><code class=\"prism language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>el-table</span> <span class=\"token attr-name\">:data</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>list<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">border</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 写死的固定字段 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>el-table-column</span> <span class=\"token attr-name\">label</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>xx<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">prop</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>xx<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">align</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>center<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 活的,从后端动态获取的字段 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>template</span> <span class=\"token attr-name\">v-for</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>(col,i) in factorNames<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>el-table-column</span> <span class=\"token attr-name\">:label</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>col.factorName<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">align</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>center<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>template</span> <span class=\"token attr-name\">slot-scope</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>scope<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n {\n <!-- -->{ scope.row.factorList[i].monitorValue }}\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>template</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>el-table-column</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>template</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>el-table</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"3JS_48\"></a>3、JS</h4> \n <pre><code class=\"prism language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token punctuation\">{\n <!-- --></span>\n name<span class=\"token punctuation\">:</span> <span class=\"token string\">\'App\'</span><span class=\"token punctuation\">,</span>\n <span class=\"token function\">data</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{\n <!-- --></span>\n list<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n factorNames<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// 用于显示的列</span>\n factorNameColumnList<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// 监测因子所有列-用于可选择的列</span>\n listLoading<span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n <span class=\"token function\">created</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// 获取表格数据</span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getFactorTypeList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// 动态获取表格列</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n methods<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token function\">getList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>listLoading <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span>\n <span class=\"token function\">getDataList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{\n <!-- --></span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span>response <span class=\"token operator\">=&gt;</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>list <span class=\"token operator\">=</span> response<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>records\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>listLoading <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n <span class=\"token function\">getFactorTypeList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token function\">getFactorList</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{\n <!-- --></span> <span class=\"token string\">\'type\'</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span>response <span class=\"token operator\">=&gt;</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>factorNames <span class=\"token operator\">=</span> response<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span>item <span class=\"token operator\">=&gt;</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{\n <!-- --></span> factorId<span class=\"token punctuation\">:</span> item<span class=\"token punctuation\">.</span>factorId<span class=\"token punctuation\">,</span> factorName<span class=\"token punctuation\">:</span> item<span class=\"token punctuation\">.</span>name <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>factorNameColumnList <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>factorNames\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n <span class=\"token comment\">// 列过滤</span>\n <span class=\"token function\">handleColumnFilter</span><span class=\"token punctuation\">(</span>val<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>factorNames <span class=\"token operator\">=</span> val\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>script<span class=\"token operator\">&gt;</span>\n</code></pre> \n <h3><a id=\"4_90\"></a>4、部分代码解释</h3> \n <ol>\n <li><code>el-checkbox-group</code> 绑定的<code>factorNames</code>值为所显示的动态的列</li>\n <li><code>el-checkbox</code> 循环的<code>factorNameColumnList</code>数据为所要筛选的列</li>\n </ol> \n <h4><a id=\"5_95\"></a>5、后端响应的表格列数据格式</h4> \n <p>动态列字段:<br> <img src=\"https://img-blog.csdnimg.cn/20200410115726351.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <p>表格列数据:<br> <img src=\"https://img-blog.csdnimg.cn/20200410120013835.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/105429784', '2020-04-10 12:02:39', 1, '2020-11-07 15:21:22', 1, '2020-11-07 15:21:22', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (29, 1, 105665404, 'SpringBoot(26) 整合 Kafka', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <h4><a id=\"Kafka_2\"></a>Kafka是什么?</h4> \n <ol>\n <li>Kafka是一种<code>高吞吐量</code>的<code>分布式</code>发布订阅<code>消息系统</code>,可以处理消费者在网站中的所有动作流数据。</li>\n <li>目的:通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。</li>\n </ol> \n <h4><a id=\"_7\"></a>环境</h4> \n <ol>\n <li>springboot</li>\n <li>idea</li>\n <li>docker-compose</li>\n <li>zookeeper</li>\n <li>kafka</li>\n <li>kafka-manager</li>\n </ol> \n <h3><a id=\"dockercomposekafka_17\"></a>二、docker-compose安装kafka</h3> \n <h4><a id=\"1_dockercomposekafkayml_19\"></a>1. docker-compose-kafka.yml</h4> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\'3\'</span>\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">zookepper</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> wurstmeister/zookeeper <span class=\"token comment\"># 原镜像`wurstmeister/zookeeper`</span>\n <span class=\"token key atrule\">container_name</span><span class=\"token punctuation\">:</span> zookeeper_server <span class=\"token comment\"># 容器名为\'zookeeper_server\'</span>\n <span class=\"token key atrule\">restart</span><span class=\"token punctuation\">:</span> always <span class=\"token comment\"># 指定容器退出后的重启策略为始终重启</span>\n <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 数据卷挂载路径设置,将本机目录映射到容器目录</span>\n <span class=\"token punctuation\">-</span> <span class=\"token string\">\"/etc/localtime:/etc/localtime\"</span>\n <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 映射端口</span>\n <span class=\"token punctuation\">-</span> <span class=\"token string\">\"2181:2181\"</span>\n\n <span class=\"token key atrule\">kafka</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> wurstmeister/kafka <span class=\"token comment\"># 原镜像`wurstmeister/kafka`</span>\n <span class=\"token key atrule\">container_name</span><span class=\"token punctuation\">:</span> kafka_server <span class=\"token comment\"># 容器名为\'kafka_server\'</span>\n <span class=\"token key atrule\">restart</span><span class=\"token punctuation\">:</span> always <span class=\"token comment\"># 指定容器退出后的重启策略为始终重启</span>\n <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 数据卷挂载路径设置,将本机目录映射到容器目录</span>\n <span class=\"token punctuation\">-</span> <span class=\"token string\">\"/etc/localtime:/etc/localtime\"</span>\n <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 设置环境变量,相当于docker run命令中的-e</span>\n <span class=\"token key atrule\">KAFKA_ADVERTISED_HOST_NAME</span><span class=\"token punctuation\">:</span> www.zhengqingya.com <span class=\"token comment\"># TODO 本机IP</span>\n <span class=\"token key atrule\">KAFKA_ADVERTISED_PORT</span><span class=\"token punctuation\">:</span> <span class=\"token number\">9092 </span><span class=\"token comment\"># 端口</span>\n <span class=\"token key atrule\">KAFKA_BROKER_ID</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0 </span><span class=\"token comment\"># 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己</span>\n <span class=\"token key atrule\">KAFKA_ADVERTISED_LISTENERS</span><span class=\"token punctuation\">:</span> PLAINTEXT<span class=\"token punctuation\">:</span>//www.zhengqingya.com<span class=\"token punctuation\">:</span><span class=\"token number\">9092 </span><span class=\"token comment\"># TODO 将kafka的地址端口注册给zookeeper</span>\n <span class=\"token key atrule\">KAFKA_LISTENERS</span><span class=\"token punctuation\">:</span> PLAINTEXT<span class=\"token punctuation\">:</span>//0.0.0.0<span class=\"token punctuation\">:</span><span class=\"token number\">9092 </span><span class=\"token comment\"># 配置kafka的监听端口</span>\n <span class=\"token key atrule\">KAFKA_ZOOKEEPER_CONNECT</span><span class=\"token punctuation\">:</span> www.zhengqingya.com<span class=\"token punctuation\">:</span><span class=\"token number\">2181 </span><span class=\"token comment\"># TODO zookeeper地址</span>\n <span class=\"token key atrule\">KAFKA_CREATE_TOPICS</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"hello_world\"</span>\n <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 映射端口</span>\n <span class=\"token punctuation\">-</span> <span class=\"token string\">\"9092:9092\"</span>\n <span class=\"token key atrule\">depends_on</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 解决容器依赖启动先后问题</span>\n <span class=\"token punctuation\">-</span> zookepper\n\n <span class=\"token key atrule\">kafka-manager</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> sheepkiller/kafka<span class=\"token punctuation\">-</span>manager <span class=\"token comment\"># 原镜像`sheepkiller/kafka-manager`</span>\n <span class=\"token key atrule\">container_name</span><span class=\"token punctuation\">:</span> kafka<span class=\"token punctuation\">-</span>manager <span class=\"token comment\"># 容器名为\'kafka-manager\'</span>\n <span class=\"token key atrule\">restart</span><span class=\"token punctuation\">:</span> always <span class=\"token comment\"># 指定容器退出后的重启策略为始终重启</span>\n <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 设置环境变量,相当于docker run命令中的-e</span>\n <span class=\"token key atrule\">ZK_HOSTS</span><span class=\"token punctuation\">:</span> www.zhengqingya.com<span class=\"token punctuation\">:</span><span class=\"token number\">2181 </span><span class=\"token comment\"># TODO zookeeper地址</span>\n <span class=\"token key atrule\">APPLICATION_SECRET</span><span class=\"token punctuation\">:</span> zhengqing\n <span class=\"token key atrule\">KAFKA_MANAGER_AUTH_ENABLED</span><span class=\"token punctuation\">:</span> \"true\" <span class=\"token comment\"># 开启kafka-manager权限校验</span>\n <span class=\"token key atrule\">KAFKA_MANAGER_USERNAME</span><span class=\"token punctuation\">:</span> admin <span class=\"token comment\"># 登陆账户</span>\n <span class=\"token key atrule\">KAFKA_MANAGER_PASSWORD</span><span class=\"token punctuation\">:</span> <span class=\"token number\">123456 </span><span class=\"token comment\"># 登陆密码</span>\n <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 映射端口</span>\n <span class=\"token punctuation\">-</span> <span class=\"token string\">\"9001:9000\"</span>\n <span class=\"token key atrule\">depends_on</span><span class=\"token punctuation\">:</span> <span class=\"token comment\"># 解决容器依赖启动先后问题</span>\n <span class=\"token punctuation\">-</span> kafka\n</code></pre> \n <h4><a id=\"2__69\"></a>2. 运行</h4> \n <pre><code class=\"prism language-shell\">docker-compose -f docker-compose-kafka.yml -p kafka up -d\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200421234825103.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200421234914526.png\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"3_kafkamanagerkafka_78\"></a>3. <code>kafka-manager</code>(kafka集群管理工具)</h4> \n <p>访问<a href=\"http://www.zhengqingya.com:9001/\"><code>ip:9001</code></a></p> \n <blockquote> \n <p>温馨小提示:下面只是简单使用,更多可自行查询资料了解</p> \n </blockquote> \n <h6><a id=\"_Cluster_Cluster__Add_Cluster_84\"></a>① 新建Cluster: 点击<code>Cluster</code> -&gt; <code>Add Cluster</code></h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200421221632917.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200421235613333.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> Save保存时出现如下提示至少为2,修改一下默认值为2即可~<br> <img src=\"https://img-blog.csdnimg.cn/20200421222702691.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"_topic_90\"></a>② 查看topic</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200421235705960.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/2020042123572469.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200422000051554.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"SpringBootKafka_96\"></a>三、SpringBoot整合Kafka</h3> \n <h4><a id=\"_pomxml_98\"></a>① <code>pom.xml</code>中引入依赖</h4> \n <pre><code class=\"prism language-java\"><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>dependency<span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>groupId<span class=\"token punctuation\">&gt;</span></span>org<span class=\"token punctuation\">.</span>springframework<span class=\"token punctuation\">.</span>kafka<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>groupId<span class=\"token operator\">&gt;</span>\n <span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>artifactId<span class=\"token punctuation\">&gt;</span></span>spring<span class=\"token operator\">-</span>kafka<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>artifactId<span class=\"token operator\">&gt;</span>\n<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>dependency<span class=\"token operator\">&gt;</span>\n</code></pre> \n <h4><a id=\"_applicationymlkafka_107\"></a>② <code>application.yml</code>中配置kafka</h4> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">spring</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># ======================== ↓↓↓↓↓↓ kafka相关配置 ↓↓↓↓↓↓ ===============================</span>\n <span class=\"token key atrule\">kafka</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">bootstrap-servers</span><span class=\"token punctuation\">:</span> www.zhengqingya.com<span class=\"token punctuation\">:</span><span class=\"token number\">9092 </span><span class=\"token comment\"># 指定kafka server地址,集群(多个逗号分隔)</span>\n <span class=\"token key atrule\">producer</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># 指定消息key和消息体的编解码方式</span>\n <span class=\"token key atrule\">key-serializer</span><span class=\"token punctuation\">:</span> org.apache.kafka.common.serialization.StringSerializer\n <span class=\"token key atrule\">value-serializer</span><span class=\"token punctuation\">:</span> org.apache.kafka.common.serialization.StringSerializer\n <span class=\"token comment\"># 写入失败时,重试次数。当leader节点失效,一个repli节点会替代成为leader节点,此时可能出现写入失败,</span>\n <span class=\"token comment\"># 当retris为0时,produce不会重复。retirs重发,此时repli节点完全成为leader节点,不会产生消息丢失。</span>\n <span class=\"token key atrule\">retries</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n <span class=\"token comment\"># 每次批量发送消息的数量,produce积累到一定数据,一次发送</span>\n <span class=\"token key atrule\">batch-size</span><span class=\"token punctuation\">:</span> <span class=\"token number\">16384</span>\n <span class=\"token comment\"># produce积累数据一次发送,缓存大小达到buffer.memory就发送数据</span>\n <span class=\"token key atrule\">buffer-memory</span><span class=\"token punctuation\">:</span> <span class=\"token number\">33554432</span>\n <span class=\"token key atrule\">consumer</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">group-id</span><span class=\"token punctuation\">:</span> default_consumer_group <span class=\"token comment\"># 指定默认消费者 群组ID</span>\n <span class=\"token key atrule\">enable-auto-commit</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\n <span class=\"token key atrule\">auto-commit-interval</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1000</span>\n <span class=\"token comment\"># procedure要求leader在考虑完成请求之前收到的确认数,用于控制发送记录在服务端的持久化,其值可以为如下:</span>\n <span class=\"token comment\"># acks = 0 如果设置为零,则生产者将不会等待来自服务器的任何确认,该记录将立即添加到套接字缓冲区并视为已发送。在这种情况下,无法保证服务器已收到记录,并且重试配置将不会生效(因为客户端通常不会知道任何故障),为每条记录返回的偏移量始终设置为-1。</span>\n <span class=\"token comment\"># acks = 1 这意味着leader会将记录写入其本地日志,但无需等待所有副本服务器的完全确认即可做出回应,在这种情况下,如果leader在确认记录后立即失败,但在将数据复制到所有的副本服务器之前,则记录将会丢失。</span>\n <span class=\"token comment\"># acks = all 这意味着leader将等待完整的同步副本集以确认记录,这保证了只要至少一个同步副本服务器仍然存活,记录就不会丢失,这是最强有力的保证,这相当于acks = -1的设置。</span>\n <span class=\"token comment\"># 可以设置的值为:all, -1, 0, 1</span>\n <span class=\"token key atrule\">acks</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\n <span class=\"token comment\"># 指定消息key和消息体的编解码方式</span>\n <span class=\"token key atrule\">key-deserializer</span><span class=\"token punctuation\">:</span> org.apache.kafka.common.serialization.StringDeserializer\n <span class=\"token key atrule\">value-deserializer</span><span class=\"token punctuation\">:</span> org.apache.kafka.common.serialization.StringDeserializer\n</code></pre> \n <h4><a id=\"____140\"></a>③ 生产者 - 发送消息</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/api/\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Producer</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token annotation punctuation\">@Autowired</span>\n <span class=\"token keyword\">private</span> KafkaTemplate<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>String<span class=\"token punctuation\">,</span> Object<span class=\"token punctuation\">&gt;</span></span> kafkaTemplate<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"send\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">send</span><span class=\"token punctuation\">(</span>String msg<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n kafkaTemplate<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"hello\"</span><span class=\"token punctuation\">,</span> msg<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"SUCCESS\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"____157\"></a>④ 消费者 - 接收消息</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Slf4j</span>\n<span class=\"token annotation punctuation\">@Component</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Consumer</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token annotation punctuation\">@KafkaListener</span><span class=\"token punctuation\">(</span>topics <span class=\"token operator\">=</span> <span class=\"token string\">\"hello\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">listen</span><span class=\"token punctuation\">(</span>ConsumerRecord<span class=\"token operator\">&lt;</span><span class=\"token operator\">?</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">?</span><span class=\"token operator\">&gt;</span> record<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n log<span class=\"token punctuation\">.</span><span class=\"token function\">info</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"topic: \"</span> <span class=\"token operator\">+</span> record<span class=\"token punctuation\">.</span><span class=\"token function\">topic</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">\" &lt;|============|&gt; 消息内容:\"</span> <span class=\"token operator\">+</span> record<span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h3><a id=\"_171\"></a>四、测试</h3> \n <p>① 调用接口发送消息:<a href=\"http://127.0.0.1/api/send?msg=hello,kafka\">http://127.0.0.1/api/send?msg=hello,kafka</a></p> \n <p>② 查看控制台打印日志信息:<br> <img src=\"https://img-blog.csdnimg.cn/20200421233248635.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_182\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/105665404', '2020-04-22 00:05:05', 1, '2020-11-07 15:21:22', 1, '2020-11-07 15:21:22', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (30, 1, 105747906, 'SpringBoot(27) 整合jasypt加密yml配置文件', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <h4><a id=\"1_2\"></a>1、问题</h4> \n <p>通常项目配置文件中的账号信息如下,都是直接暴露出来的,如果源码不小心泄露将会引起一系列安全问题…<br> <img src=\"https://img-blog.csdnimg.cn/20200425153614404.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"2_7\"></a>2、解决</h4> \n <ol>\n <li>通过<code>配置中心</code>动态加载配置文件</li>\n <li>通过<code>jasypt</code>加密组件进行<code>加密</code>/<code>解密</code></li>\n </ol> \n <h3><a id=\"springbootjasypt_yml_12\"></a>二、<code>springboot</code>整合<code>jasypt</code> <code>加密</code>yml<code>配置文件</code></h3> \n <h4><a id=\"1pomxml_14\"></a>1、<code>pom.xml</code>中引入依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- jasypt加密组件: https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.github.ulisesbocchio<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>jasypt-spring-boot-starter<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>2.1.0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2applicationyml_25\"></a>2、<code>application.yml</code>中配置加密密钥</h4> \n <pre><code class=\"prism language-yml\"><span class=\"token comment\"># 配置加密密钥</span>\n<span class=\"token key atrule\">jasypt</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">encryptor</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">password</span><span class=\"token punctuation\">:</span> zhengqing <span class=\"token comment\"># TODO 这里密钥修改为自己的!!!</span>\n</code></pre> \n <h4><a id=\"3jasypt_34\"></a>3、jasypt加密/解密测试类</h4> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">JasyptTest</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token annotation punctuation\">@Test</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">test</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token comment\">// 对应配置文件中配置的加密密钥</span>\n System<span class=\"token punctuation\">.</span><span class=\"token function\">setProperty</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"jasypt.encryptor.password\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"zhengqing\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n StringEncryptor stringEncryptor <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">DefaultLazyEncryptor</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">StandardEnvironment</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"加密: \"</span> <span class=\"token operator\">+</span> stringEncryptor<span class=\"token punctuation\">.</span><span class=\"token function\">encrypt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"root\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"解密: \"</span> <span class=\"token operator\">+</span> stringEncryptor<span class=\"token punctuation\">.</span><span class=\"token function\">decrypt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"N/+f2B9SznK4MUDSp24Upw==\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200425154716944.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"4yml_51\"></a>4、修改yml配置文件账号信息为加密方式</h4> \n <p>ex: <code>root</code> -&gt; <code>ENC(N/+f2B9SznK4MUDSp24Upw==)</code></p> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">server</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">80</span>\n\n<span class=\"token key atrule\">spring</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">application</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> demo\n\n <span class=\"token comment\"># =========================== ↓↓↓↓↓↓ 配置数据源 ↓↓↓↓↓↓ ===========================</span>\n <span class=\"token key atrule\">datasource</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">url</span><span class=\"token punctuation\">:</span> jdbc<span class=\"token punctuation\">:</span>mysql<span class=\"token punctuation\">:</span>//127.0.0.1<span class=\"token punctuation\">:</span>3306/demo<span class=\"token punctuation\">?</span>allowMultiQueries=true<span class=\"token important\">&amp;useUnicode</span>=true<span class=\"token important\">&amp;characterEncoding</span>=UTF8<span class=\"token important\">&amp;zeroDateTimeBehavior</span>=convertToNull<span class=\"token important\">&amp;useSSL</span>=false <span class=\"token comment\"># MySQL在高版本需要指明是否进行SSL连接 解决则加上 &amp;useSSL=false</span>\n <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> demo\n <span class=\"token key atrule\">username</span><span class=\"token punctuation\">:</span> ENC(N/+f2B9SznK4MUDSp24Upw==)\n <span class=\"token key atrule\">password</span><span class=\"token punctuation\">:</span> ENC(N/+f2B9SznK4MUDSp24Upw==)\n <span class=\"token key atrule\">platform</span><span class=\"token punctuation\">:</span> mysql\n <span class=\"token key atrule\">driver-class-name</span><span class=\"token punctuation\">:</span> com.mysql.jdbc.Driver\n\n<span class=\"token comment\"># 配置加密密钥</span>\n<span class=\"token key atrule\">jasypt</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">encryptor</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">password</span><span class=\"token punctuation\">:</span> zhengqing <span class=\"token comment\"># TODO 这里密钥修改为自己的!!!</span>\n</code></pre> \n <h3><a id=\"_78\"></a>三、进阶</h3> \n <h4><a id=\"1_80\"></a>1、自定义加密标识</h4> \n <p>jasypt默认使用<code>ENC()</code>来标识加密,加载配置的时候检测到<code>ENC()</code>即会自动解密</p> \n <p>下面我们来尝试自定义一个加密标识,<code>JASYPT_ZQ()</code></p> \n <p><code>application.yml</code>中新增如下配置:</p> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">jasypt</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">encryptor</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">property</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">prefix</span><span class=\"token punctuation\">:</span> JASYPT_ZQ( <span class=\"token comment\"># TODO 加密前缀</span>\n <span class=\"token key atrule\">suffix</span><span class=\"token punctuation\">:</span> ) <span class=\"token comment\"># TODO 加密后缀</span>\n <span class=\"token key atrule\">password</span><span class=\"token punctuation\">:</span> zhengqing <span class=\"token comment\"># TODO 加密密钥</span>\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200425160246810.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"2_99\"></a>2、将<code>加密密钥</code>作为<code>启动运行参数</code></h4> \n <p>以上我们的密钥也是保存在配置文件中的,一旦密钥泄露,信息被解密,安全隐患依然存在!<br> 因此我们可以通过将密钥设置为程序启动时的参数来避免!!!<br> <img src=\"https://img-blog.csdnimg.cn/20200425162345414.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <pre><code class=\"prism language-java\">java <span class=\"token operator\">-</span>Djasypt<span class=\"token punctuation\">.</span>encryptor<span class=\"token punctuation\">.</span>password<span class=\"token operator\">=</span>zhengqing <span class=\"token operator\">-</span>jar app<span class=\"token punctuation\">.</span>jar\n</code></pre> \n <p>idea中如下配置运行:<br> <img src=\"https://img-blog.csdnimg.cn/2020042516180075.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"3_114\"></a>3、自定义加密规则…</h4> \n <p>网上很多资源,可自行了解</p> \n <p>参考: <a href=\"https://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&amp;mid=2247485657&amp;idx=1&amp;sn=90c133b9a72a24ee4fd1c26daada4526&amp;chksm=fddede1dcaa9570b21743ba8bb6e7664b6e7cbe19e22428e3b0c39d510f4d39e8c6e97979452&amp;mpshare=1&amp;scene=1&amp;srcid=&amp;sharer_sharetime=1587779354864&amp;sharer_shareid=936076bf8d5bee83e89fd7e769b5c6db&amp;key=f507b9b0259644edd1f930974d4889b0f82cb18afcc994eba182eaaaa6f508cf83e90a83181f96c8f3d48c33bbc9a1c4c4ff1595199e910bab8600804a8ed5b46565f278480da81da8f454cfc2d61879&amp;ascene=1&amp;uin=MTg4MzA0MzMxNA==&amp;devicetype=Windows%2010%20x64&amp;version=62090070&amp;lang=zh_CN&amp;exportkey=AR8HvbeJI12kmZ%2buYybssq8=&amp;pass_ticket=pn0NjMXu38wvdRXcouFgoGaFNJda4reHhGX6y6WRvmkqxyGFVPO7G59P1tsfao3r\">数据库密码配置项都不加密?心也太大了!</a></p> \n <hr> \n <h3><a id=\"demo_125\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/105747906', '2020-04-25 16:36:31', 1, '2020-11-07 15:21:22', 1, '2020-11-07 15:21:22', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (31, 1, 105208633, 'SpringBoot(25) 整合Nacos实现配置管理、服务注册与发现', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p>本文将基于<code>springboot2.1.8.RELEASE</code>整合<code>Nacos</code>实现<code>配置管理(动态加载配置)</code>、<code>服务注册与发现</code></p> \n <blockquote> \n <p>Nacos文档: <a href=\"https://nacos.io/zh-cn/docs/what-is-nacos.html\">https://nacos.io/zh-cn/docs/what-is-nacos.html</a></p> \n </blockquote> \n <h3><a id=\"DockerNacos_6\"></a>二、<code>Docker</code>安装<code>Nacos</code></h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 单机模式运行【-e MODE=standalone】</span>\ndocker run --name nacos_server -d -p 8848:8848 --restart<span class=\"token operator\">=</span>always -e MODE<span class=\"token operator\">=</span>standalone -v <span class=\"token variable\">$PWD</span>/logs:/home/nacos/logs nacos/nacos-server:latest\n</code></pre> \n <p>通过 <code>IP:8848/nacos</code> 访问,默认登录账号密码:<code>nacos/nacos</code></p> \n <p>ex: <a href=\"http://www.zhengqingya.com:8848/nacos\">www.zhengqingya.com:8848/nacos</a></p> \n <h3><a id=\"SpringBootNacos_18\"></a>三、<code>SpringBoot</code>整合<code>Nacos</code></h3> \n <h4><a id=\"1pomxmlnacos_20\"></a>1、<code>pom.xml</code>中<code>引入nacos</code>相关<code>依赖</code></h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- nacos 配置管理 --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.alibaba.boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>nacos-config-spring-boot-starter<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>0.2.1<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!-- nacos 服务发现 --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.alibaba.boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>nacos-discovery-spring-boot-starter<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>0.2.1<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!--nacos配置--&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.alibaba.nacos<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>nacos-client<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>1.1.4<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2applicationymlnacos_43\"></a>2、<code>application.yml</code>中配置<code>nacos</code></h4> \n <pre><code class=\"prism language-yml\"><span class=\"token key atrule\">server</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">port</span><span class=\"token punctuation\">:</span> <span class=\"token number\">8080</span>\n\n<span class=\"token key atrule\">spring</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">application</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> nacos<span class=\"token punctuation\">-</span>demo <span class=\"token comment\"># nacos服务名</span>\n\n<span class=\"token comment\"># ======================== ↓↓↓↓↓↓ nacos相关配置 ↓↓↓↓↓↓ ===============================</span>\n<span class=\"token key atrule\">nacos</span><span class=\"token punctuation\">:</span>\n <span class=\"token comment\"># 配置管理</span>\n <span class=\"token key atrule\">config</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">server-addr</span><span class=\"token punctuation\">:</span> www.zhengqingya.com<span class=\"token punctuation\">:</span><span class=\"token number\">8848 </span><span class=\"token comment\"># TODO 这里换成自己的ip加端口</span>\n <span class=\"token comment\"># 服务注册与发现</span>\n <span class=\"token key atrule\">discovery</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">server-addr</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{\n <!-- --></span>nacos.config.server<span class=\"token punctuation\">-</span>addr<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"3_63\"></a>3、配置管理</h4> \n <h6><a id=\"NacosPropertySource_65\"></a>①启动类上添加<code>@NacosPropertySource</code></h6> \n <pre><code class=\"prism language-java\"><span class=\"token comment\">// 使用 @NacosPropertySource 加载 `dataId` 为 `application.yml` 的配置源,并开启自动更新</span>\n<span class=\"token annotation punctuation\">@NacosPropertySource</span><span class=\"token punctuation\">(</span>dataId <span class=\"token operator\">=</span> <span class=\"token string\">\"application.yml\"</span><span class=\"token punctuation\">,</span> autoRefreshed <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span>\n<span class=\"token annotation punctuation\">@SpringBootApplication</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">DemoApplication</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span>String<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n SpringApplication<span class=\"token punctuation\">.</span><span class=\"token function\">run</span><span class=\"token punctuation\">(</span>DemoApplication<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> args<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h6><a id=\"Controller_78\"></a>②新增动态加载配置测试Controller</h6> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">HelloController</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@NacosValue</span><span class=\"token punctuation\">(</span>value <span class=\"token operator\">=</span> <span class=\"token string\">\"${helloworld:HelloWorld}\"</span><span class=\"token punctuation\">,</span> autoRefreshed <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String hello<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/hello\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">hello</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> hello<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h6><a id=\"nacos_95\"></a>③nacos服务端新增配置</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200330213802649.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200330214021535.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"__100\"></a>④ 启动项目,修改配置,刷新页面</h6> \n <p>启动项目访问<a href=\"http://127.0.0.1:8080/hello\">http://127.0.0.1:8080/hello</a>,修改nacos服务端配置参数,然后刷新页面,测试是否动态加载配置~<br> <img src=\"https://img-blog.csdnimg.cn/20200330214256512.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"4_104\"></a>4、服务注册</h4> \n <h6><a id=\"Nacos_Api__106\"></a>①Nacos Api 直接注册服务方式</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">curl</span> -X PUT <span class=\"token string\">\'http://www.zhengqingya.com:8848/nacos/v1/ns/instance?serviceName=example&amp;ip=127.0.0.1&amp;port=8080\'</span>`\n</code></pre> \n <h6><a id=\"Java_112\"></a>②Java</h6> \n <p>通过<code>@PostConstruct</code>来实现注册服务</p> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Component</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">RegisterNacos</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@NacosInjected</span>\n <span class=\"token keyword\">private</span> NamingService namingService<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${server.port}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> serverPort<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${spring.application.name}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String applicationName<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 注册服务 * * @throws NacosException */</span>\n <span class=\"token annotation punctuation\">@PostConstruct</span> <span class=\"token comment\">// 修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次!!!</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">registerInstance</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> NacosException <span class=\"token punctuation\">{\n <!-- --></span>\n namingService<span class=\"token punctuation\">.</span><span class=\"token function\">registerInstance</span><span class=\"token punctuation\">(</span>applicationName<span class=\"token punctuation\">,</span> <span class=\"token string\">\"127.0.0.1\"</span><span class=\"token punctuation\">,</span> serverPort<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h6><a id=\"_142\"></a>③查看服务</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200330215513579.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"5_145\"></a>5、服务发现</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"discovery\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">DiscoveryController</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@NacosInjected</span>\n <span class=\"token keyword\">private</span> NamingService namingService<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 获取实例 * * @param serviceName: 服务名 * @return * @throws NacosException */</span>\n <span class=\"token annotation punctuation\">@GetMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/getInstance\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">public</span> List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Instance<span class=\"token punctuation\">&gt;</span></span> <span class=\"token function\">getInstance</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@RequestParam</span> String serviceName<span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> NacosException <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> namingService<span class=\"token punctuation\">.</span><span class=\"token function\">getAllInstances</span><span class=\"token punctuation\">(</span>serviceName<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>访问<a href=\"http://127.0.0.1:8080/discovery/getInstance?serviceName=nacos-demo\">http://127.0.0.1:8080/discovery/getInstance?serviceName=nacos-demo</a></p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200330215921262.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_178\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/105208633', '2020-03-30 22:05:04', 1, '2020-11-07 15:21:23', 1, '2020-11-07 15:21:23', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (32, 1, 105345011, 'IDE工具(46) idea远程调试springboot项目', '-----❼、IDE工具', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <h6><a id=\"_2\"></a>基本环境</h6> \n <ol>\n <li>IntelliJ IDEA 2019.3</li>\n <li>SpringBoot项目</li>\n <li>Docker部署运行项目</li>\n </ol> \n <h3><a id=\"dockerspringboot_8\"></a>二、docker部署运行springboot项目</h3> \n <p>注:<code>address</code> 是开启的远程端口,本地会通过监听这个端口来实现远程调试!!!</p> \n <pre><code class=\"prism language-shell\">docker run -d -p 8080:8080 -p 5005:5005 --name app \\\n-v /IT_zhengqing/code_test/app.jar:/tmp/app.jar \\\njava:latest \\\njava -agentlib:jdwp<span class=\"token operator\">=</span>transport<span class=\"token operator\">=</span>dt_socket,server<span class=\"token operator\">=</span>y,suspend<span class=\"token operator\">=</span>n,address<span class=\"token operator\">=</span>5005 -jar /tmp/app.jar\n</code></pre> \n <h3><a id=\"idea_19\"></a>三、通过idea在本地进行远程调试</h3> \n <h6><a id=\"_Remote_21\"></a>① 选择<code>Remote</code></h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200406155350535.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"_HostPort_25\"></a>② 填写项目所运行的远程主机<code>Host</code>和端口<code>Port</code>,其它参数默认即可~</h6> \n <p>注:这里端口是远程项目运行时所配置的address中的端口哦!!!</p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200406155552761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"__31\"></a>③ 启动本地调试</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200406155846278.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"_debug_35\"></a>④ 本地debug测试</h6> \n <p>在本地打个断点,然后访问远程api接口 ex: <a href=\"http://zhengqingya.com:8080/hello\">zhengqingya.com:8080/hello</a> ,可以看到本地idea中打的断点生效 ~</p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200406160234980.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <h3><a id=\"demo_45\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/105345011', '2020-04-06 16:12:31', 1, '2020-11-07 15:21:23', 1, '2020-11-07 15:21:23', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (33, 1, 105238068, '郑清 - 日常作息表(2020-03)', '-----、生活', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <table>\n <thead>\n <tr>\n <th align=\"center\">日期</th>\n <th align=\"center\">早上</th>\n <th align=\"center\">中午</th>\n <th align=\"center\">下午</th>\n <th align=\"center\">晚上</th>\n <th align=\"center\">回家安排</th>\n <th align=\"center\">今日总结</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td align=\"center\">2020-03-31 星期二 晴</td>\n <td align=\"center\">8:05起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-30 星期一 晴</td>\n <td align=\"center\">8:10起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务 + 编写教程<a href=\"https://zhengqing.blog.csdn.net/article/details/105208633\"><code>SpringBoot(25) 整合Nacos实现配置管理、服务注册与发现</code></a></td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-29 星期天 晴</td>\n <td align=\"center\"></td>\n <td align=\"center\">15:00起床,吃饭</td>\n <td align=\"center\">玩</td>\n <td align=\"center\">吃饭</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-28 星期六 阴</td>\n <td align=\"center\"></td>\n <td align=\"center\">12:00起床,吃饭</td>\n <td align=\"center\">玩</td>\n <td align=\"center\">吃饭</td>\n <td align=\"center\">4:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-27 星期五 晴</td>\n <td align=\"center\">8:10起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-26 星期四 阴</td>\n <td align=\"center\">7:50起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-25 星期三 晴</td>\n <td align=\"center\">8:10起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-24 星期二 晴</td>\n <td align=\"center\">8:10起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-23 星期一 晴</td>\n <td align=\"center\">8:15起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-22 星期天 晴</td>\n <td align=\"center\"></td>\n <td align=\"center\">12:00起床,吃饭</td>\n <td align=\"center\">玩</td>\n <td align=\"center\">吃饭</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-21 星期六 晴</td>\n <td align=\"center\">8:20起床</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">玩</td>\n <td align=\"center\">吃饭</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-20 星期五 晴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-19 星期四 晴</td>\n <td align=\"center\">8:15起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:30休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-18 星期三 晴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-17 星期二 晴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-16 星期一 小雨</td>\n <td align=\"center\">8:15起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:30休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-15 星期天 晴</td>\n <td align=\"center\"></td>\n <td align=\"center\"></td>\n <td align=\"center\">15:00起床,休息</td>\n <td align=\"center\">19:00吃饭,休息</td>\n <td align=\"center\">0:30休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-14 星期六 晴</td>\n <td align=\"center\">9:45起床,加班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">加班</td>\n <td align=\"center\">吃饭,加班</td>\n <td align=\"center\">5:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-13 星期五 晴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,加班</td>\n <td align=\"center\">3:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-12 星期四 晴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:30休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-11 星期三 晴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-10 星期二 晴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务 + 编写教程<a href=\"https://zhengqing.blog.csdn.net/article/details/104768296\"><code>MySQL(21) docker安装mycat-web性能监控工具</code></a></td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-09 星期一 阴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:30休息</td>\n <td align=\"center\">实现公司业务 + 编写教程<a href=\"https://zhengqing.blog.csdn.net/article/details/104746435\"><code>MySQL(19) Mycat分片(分库分表)配置</code></a>、<a href=\"https://zhengqing.blog.csdn.net/article/details/104762525\"><code>MySQL(20) 通过ZooKeeper集群管理Mycat配置</code></a></td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-08 星期天 晴</td>\n <td align=\"center\"></td>\n <td align=\"center\"></td>\n <td align=\"center\">13:00起床,吃饭</td>\n <td align=\"center\">19:00吃饭,休息</td>\n <td align=\"center\">22:00休息</td>\n <td align=\"center\">休息日 + 编写教程<a href=\"https://zhengqing.blog.csdn.net/article/details/104700437\"><code>MySQL(18) 通过Docker搭建Mycat实现读写分离</code></a></td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-07 星期六 晴</td>\n <td align=\"center\"></td>\n <td align=\"center\"></td>\n <td align=\"center\">13:00起床,吃饭</td>\n <td align=\"center\">19:00吃饭,休息</td>\n <td align=\"center\">3:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-06 星期五 阴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:30休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-05 星期四 阴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务 + 编写教程<a href=\"https://zhengqing.blog.csdn.net/article/details/104679425\"><code>MySQL(17) 通过Docker搭建主从同步</code></a></td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-04 星期三 晴</td>\n <td align=\"center\">8:35起床,上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务 + 编写教程<a href=\"https://zhengqing.blog.csdn.net/article/details/104650009\"><code>SpringBoot(24) 整合七牛云实现文件上传</code></a></td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-03 星期二 阴</td>\n <td align=\"center\">8:35起床,骑行12分钟上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:30休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-02 星期一 小雨</td>\n <td align=\"center\">8:30起床,办小区出入证,骑行12分钟上班</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-03-01 星期天 阴</td>\n <td align=\"center\"></td>\n <td align=\"center\"></td>\n <td align=\"center\">13:00起床</td>\n <td align=\"center\">19:00吃饭,休息</td>\n <td align=\"center\">22:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n </tbody>\n </table> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/105238068', '2020-04-01 09:04:29', 1, '2020-11-07 15:21:23', 1, '2020-11-07 15:21:23', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (34, 1, 104768296, 'MySQL(21) docker安装mycat-web性能监控工具', '----- -----①、MySQL', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p><a href=\"https://zhengqing.blog.csdn.net/article/details/104679425\">MySQL(17) 通过Docker搭建主从同步</a><br> <a href=\"https://zhengqing.blog.csdn.net/article/details/104700437\">MySQL(18) 通过Docker搭建Mycat实现读写分离</a><br> <a href=\"https://zhengqing.blog.csdn.net/article/details/104746435\">MySQL(19) Mycat分片(分库分表)配置</a><br> <a href=\"https://zhengqing.blog.csdn.net/article/details/104762525\">MySQL(20) 通过ZooKeeper集群管理Mycat配置</a></p> \n <p>本文将基于<code>docker</code>来安装mycat的一个监控工具<code>mycat-web</code></p> \n <h3><a id=\"dockermycatweb_9\"></a>二、docker安装mycat-web性能监控工具</h3> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 拉取镜像</span>\ndocker pull registry.cn-hangzhou.aliyuncs.com/zhengqing/mycat-web\n<span class=\"token comment\"># 运行</span>\ndocker run --name mycat-web -d -p 8082:8082 --restart<span class=\"token operator\">=</span>always registry.cn-hangzhou.aliyuncs.com/zhengqing/mycat-web\n</code></pre> \n <h3><a id=\"mycatweb_18\"></a>三、mycat-web使用</h3> \n <p>浏览器访问<code>你的ip:8082/mycat/</code> ex: <code>www.zhengqingya.com:8082/mycat/</code></p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200310102200203.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"1mycat_24\"></a>1、配置mycat服务</h4> \n <p><img src=\"https://img-blog.csdnimg.cn/20200310104008928.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> <img src=\"https://img-blog.csdnimg.cn/20200310111011660.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"2sql_29\"></a>2、sql监控</h4> \n <p><img src=\"https://img-blog.csdnimg.cn/20200310111405669.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/104768296', '2020-03-10 11:16:24', 1, '2020-11-07 15:21:23', 1, '2020-11-07 15:21:23', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (35, 1, 104762525, 'MySQL(20) 通过ZooKeeper集群管理Mycat配置', '----- -----①、MySQL', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p><a href=\"https://zhengqing.blog.csdn.net/article/details/104679425\">MySQL(17) 通过Docker搭建主从同步</a><br> <a href=\"https://zhengqing.blog.csdn.net/article/details/104700437\">MySQL(18) 通过Docker搭建Mycat实现读写分离</a><br> <a href=\"https://zhengqing.blog.csdn.net/article/details/104746435\">MySQL(19) Mycat分片(分库分表)配置</a></p> \n <h6><a id=\"ZooKeeper_7\"></a>ZooKeeper是什么?</h6> \n <p>ZooKeeper是一个集中的服务,用于<code>配置管理</code>、<code>命名服务</code>、提供<code>分布式同步</code>和提供<code>组服务</code>等。</p> \n <p>本文将通过<code>ZK</code>的<code>配置集中管理</code>去管理Mycat配置(<code>schema.xml</code>,<code>server.xml</code>,<code>rule.xml</code> …),即将mycat的配置全部放到ZK上进行监听,一旦配置信息改变,就从ZK获取最新的配置信息应用到mycat服务中<br> <img src=\"https://img-blog.csdnimg.cn/20200309215530114.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"ZooKeeperMycat_15\"></a>二、通过ZooKeeper集群管理Mycat配置</h3> \n <h4><a id=\"1DockerZK_17\"></a>1、Docker安装配置ZK</h4> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 创建所需文件夹,用于映射容器相应文件路径</span>\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/zookeeper/conf\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/zookeeper/data\n\n<span class=\"token function\">cd</span> /IT_zhengqing/soft/zookeeper/conf\n\n<span class=\"token comment\"># echo:如果没有这个文件则创建。如果有这个文件,那么新内容将会代替原来的内容</span>\n<span class=\"token keyword\">echo</span> <span class=\"token string\">\'# 心跳检查的时间 2秒 tickTime=2000 # 初始化时连接到服务器端的间隔次数,总时间5*2=10秒 initLimit=5 # ZK Leader 和follower 之间通讯的次数,总时间2*2=4秒 syncLimit=2 autopurge.snapRetainCount=3 autopurge.purgeInterval=0 maxClientCnxns=60 standaloneEnabled=true admin.enableServer=true # 数据目录 dataDir=/data # 日志目录 dataLogDir=/datalog # 客户端端口 clientPort=2181 # 对应<span class=\"token variable\"><span class=\"token variable\">`</span>myid<span class=\"token variable\">`</span></span>文件数据1 2888:集群内机器通讯使用(Leader监听此端口) 3888:选举leader使用 server.1=www.zhengqingya.com:2888:3888 # server.2=www.zhengqingya.com:2888:3888 # server.3=www.zhengqingya.com:2888:3888\'</span> <span class=\"token operator\">&gt;</span> zoo.cfg\n\n<span class=\"token function\">cd</span> /IT_zhengqing/soft/zookeeper/data\n\n<span class=\"token keyword\">echo</span> <span class=\"token string\">\'1\'</span> <span class=\"token operator\">&gt;</span> myid\n\n<span class=\"token comment\"># 拉取ZK镜像</span>\ndocker pull zookeeper\n<span class=\"token comment\"># 运行ZK (记得开放端口供远程访问)</span>\ndocker run --name zookeeper_server -d -p 2181:2181 -v /IT_zhengqing/soft/zookeeper/data/myid:/data/myid -v /IT_zhengqing/soft/zookeeper/conf/zoo.cfg:/conf/zoo.cfg zookeeper\n<span class=\"token comment\"># 进行容器</span>\ndocker <span class=\"token function\">exec</span> -it zookeeper_server /bin/bash\n</code></pre> \n <p>这里由于小编只部署了一台ZK服务,所有只配置了一个<code>server.1</code>,如果有多个的话即配置<code>server.2</code>,<code>server.3</code>… 然后修改每一台ZK服务对应的myid即可!</p> \n <h4><a id=\"2MycatZK_65\"></a>2、配置Mycat支持ZK管理</h4> \n <h6><a id=\"_myidproperties_67\"></a>① 修改<code>myid.properties</code>配置文件</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 进入mycat容器</span>\ndocker <span class=\"token function\">exec</span> -it mycat_server /bin/bash\n<span class=\"token comment\"># 修改`myid.properties`配置文件</span>\n<span class=\"token function\">vi</span> /usr/local/mycat/conf/myid.properties\n</code></pre> \n <p><code>myid.properties</code>配置文件修改如下:</p> \n <pre><code>loadZk=true\n# ZK集群节点,多个用逗号分隔\nzkURL=www.zhengqingya.com:2181\n# ZK集群内mycat集群ID\nclusterId=mycat-cluster-1\n# mycat集群本实例节点ID,不能重复,如另一台是mycat_fz_02...\nmyid=mycat_fz_01\n# mycat集群节点个数\nclusterSize=1\n# mycat集群所有节点成员,逗号分隔\nclusterNodes=mycat_fz_01\n#clusterSize=3\n#clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_03\n#server booster ; booster install on db same server,will reset all minCon to 1\ntype=server\nboosterDataHosts=dn2,dn3\n</code></pre> \n <h6><a id=\"_ZKmycatZK_97\"></a>② 初始化ZK数据完成mycat同步数据到ZK</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 拷贝mycat初始配置,将配置好的conf目录下的配置文件复制到同级目录zkconf下</span>\n<span class=\"token function\">cp</span> /usr/local/mycat/conf/*.xml /usr/local/mycat/conf/zkconf/\n<span class=\"token function\">cp</span> /usr/local/mycat/conf/*.properties /usr/local/mycat/conf/zkconf/\n<span class=\"token function\">cp</span> /usr/local/mycat/conf/*.txt /usr/local/mycat/conf/zkconf/\n<span class=\"token function\">cp</span> /usr/local/mycat/conf/*.conf /usr/local/mycat/conf/zkconf/\n\n<span class=\"token comment\"># 初始化ZK数据</span>\n<span class=\"token function\">cd</span> /usr/local/mycat/bin\n./init_zk_data.sh\n</code></pre> \n <h4><a id=\"3ZKMycat_111\"></a>3、测试使用ZK配置管理Mycat</h4> \n <h4><a id=\"ZooInspectorZK_113\"></a>使用ZooInspector工具管理ZK</h4> \n <ol>\n <li>下载地址:<a href=\"https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip\"><code>https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip</code></a></li>\n <li>解压,进入build目录,运行<code>java -jar zookeeper-dev-ZooInspector.jar</code></li>\n </ol> \n <p><img src=\"https://img-blog.csdnimg.cn/20200309205757728.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 建立连接<br> <img src=\"https://img-blog.csdnimg.cn/20200309205920820.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 连接成功后,我们就可以修改其配置然后点击保存,对应的mycat配置也会同步更新!<br> <img src=\"https://img-blog.csdnimg.cn/20200309213235630.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <p>最后,我们就这样简单的完成了ZooKeeper集群管理Mycat配置~</p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/104762525', '2020-03-09 21:56:56', 1, '2020-11-07 15:21:23', 1, '2020-11-07 15:21:23', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (36, 1, 104746435, 'MySQL(19) Mycat分片(分库分表)配置', '----- -----①、MySQL', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p><a href=\"https://zhengqing.blog.csdn.net/article/details/104679425\">MySQL(17) 通过Docker搭建主从同步</a><br> <a href=\"https://zhengqing.blog.csdn.net/article/details/104700437\">MySQL(18) 通过Docker搭建Mycat实现读写分离</a></p> \n <p>本文将基于主从复制,读写分离的环境基础上进行一个简单的分片(分库分表)配置<br> <img src=\"https://img-blog.csdnimg.cn/20200309115128482.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"Mycat_8\"></a>二、Mycat分片配置</h3> \n <p>mycat分片主要在<code>scheam.xml</code>,<code>rule.xml</code>这2个表中配置</p> \n <h4><a id=\"_scheamxml_12\"></a>① <code>scheam.xml</code>:配置逻辑表以及对应使用的分片规则</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token prolog\">&lt;?xml version=\"1.0\"?&gt;</span>\n<span class=\"token doctype\">&lt;!DOCTYPE mycat:schema SYSTEM \"schema.dtd\"&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">mycat:</span>schema</span> <span class=\"token attr-name\"><span class=\"token namespace\">xmlns:</span>mycat</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://io.mycat/<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 逻辑库:TESTDB 限制每一条sql最多访问100条数据 指定数据节点:dn1 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>schema</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>TESTDB<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">checkSQLschema</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>true<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">sqlMaxLimit</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 对`t_user`表进行分片,主键id,自增,数据节点为dn1,dn2,dn3,分片规则为`auto-sharding-long` --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>table</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>t_user<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">primaryKey</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>id<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">autoIncrement</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>true<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">dataNode</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>dn1,dn2,dn3<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">rule</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>auto-sharding-long<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>schema</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 指定数据节点对应指定的数据主机以及后端真实物理数据库 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dataNode</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>dn1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">dataHost</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>localhost1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">database</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>db1<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dataNode</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>dn2<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">dataHost</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>localhost1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">database</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>db2<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dataNode</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>dn3<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">dataHost</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>localhost1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">database</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>db3<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 定义最大连接数,最小连接数,是否对后端的多个从库进行负载均衡,数据库类型,驱动... --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dataHost</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>localhost1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">maxCon</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>1000<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">minCon</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>10<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">balance</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">writeType</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>0<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">dbType</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mysql<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">dbDriver</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>native<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">switchType</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">slaveThreshold</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 定义如何监测后端数据库是否健康 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>heartbeat</span><span class=\"token punctuation\">&gt;</span></span>select user()<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>heartbeat</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 写数据库 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>writeHost</span> <span class=\"token attr-name\">host</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>www.zhengqingya.com<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">url</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>www.zhengqingya.com:3310<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">user</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>root<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">password</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>root<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- 读数据库 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>readHost</span> <span class=\"token attr-name\">host</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>www.zhengqingya.com<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">url</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>www.zhengqingya.com:3311<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">user</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>root<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">password</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>root<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>writeHost</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dataHost</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token namespace\">mycat:</span>schema</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <p>这里小编主要对<code>t_user</code>表进行分片,使用的分片规则为<code>auto-sharding-long</code>(每个库下的表中保存500万条数据),也就是说:<br> 分了3个库(db1,db2,db3),这3个库下的t_user表分别保存500万条数据</p> \n <ol>\n <li><code>db1</code> : 1~5000000</li>\n <li><code>db2</code> : 5000001~10000000</li>\n <li><code>db3</code> : 10000001~15000000</li>\n </ol> \n <p>详细的分片规则主要在<code>rule.xml</code>中定义,然后取<code>tableRule</code>标签中的<code>name</code>属性值即可<br> 比如上面使用到的<code>auto-sharding-long</code>:</p> \n <pre><code class=\"prism language-xml\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>auto-sharding-long<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>rang-long<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>rang-long<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.AutoPartitionByLong<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mapFile<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>autopartition-long.txt<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <p>如果对多个表进行分片配置则配置多个<code>table</code>,指定相应的<code>dataNode</code>,<code>rule</code>等信息即可</p> \n <h4><a id=\"_rulexml__64\"></a>② <code>rule.xml</code> :定义分片规则</h4> \n <p>在这里我们可以自定义分片规则,然后在<code>schema.xml</code>中使用</p> \n <p><code>tableRule</code></p> \n <ol>\n <li><code>name</code> : 对应<code>schema.xml</code>配置文件中<code>table</code>标签对应的<code>rule</code>属性,即逻辑表的分片规则</li>\n <li><code>columns</code> : 指定拆分的列字段</li>\n <li><code>algorithm</code> : 定义分片规则即具体的分片算法,对应<code>function</code>标签的<code>name</code>属性值</li>\n </ol> \n <p><code>function</code></p> \n <ol>\n <li><code>name</code> : 分片算法名</li>\n <li><code>class</code> : 分片算法对应的具体的类</li>\n <li><code>property</code> : 算法具体需要的一些属性,不同的算法对应的配置不同</li>\n </ol> \n <blockquote> \n <p>下面贴出mycat默认的一些分片规则,实际应用中可根据自已的需求来自定义!</p> \n </blockquote> \n <pre><code class=\"prism language-xml\"><span class=\"token prolog\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;</span>\n<span class=\"token comment\">&lt;!-- - - Licensed under the Apache License, Version 2.0 (the \"License\"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an \"AS IS\" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --&gt;</span>\n<span class=\"token doctype\">&lt;!DOCTYPE mycat:rule SYSTEM \"rule.dtd\"&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token namespace\">mycat:</span>rule</span> <span class=\"token attr-name\"><span class=\"token namespace\">xmlns:</span>mycat</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>http://io.mycat/<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>rule1<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>func1<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>rule2<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>user_id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>func1<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>sharding-by-intfile<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>sharding_id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>hash-int<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>auto-sharding-long<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>rang-long<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mod-long<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>mod-long<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>sharding-by-murmur<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>murmur<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>crc32slot<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>crc32slot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>sharding-by-month<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>create_time<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>partbymonth<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>latest-month-calldate<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>calldate<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>latestMonth<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>auto-sharding-rang-mod<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>rang-mod<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>tableRule</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>jch<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>columns</span><span class=\"token punctuation\">&gt;</span></span>id<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>columns</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>jump-consistent-hash<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>algorithm</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>tableRule</span><span class=\"token punctuation\">&gt;</span></span>\n\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>murmur<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.PartitionByMurmurHash<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>seed<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token comment\">&lt;!-- 默认是0 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>count<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>2<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token comment\">&lt;!-- 要分片的数据库节点数量,必须指定,否则没法分片 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>virtualBucketTimes<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>160<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token comment\">&lt;!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 --&gt;</span>\n <span class=\"token comment\">&lt;!-- &lt;property name=\"weightMapFile\"&gt;weightMapFile&lt;/property&gt; 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 --&gt;</span>\n <span class=\"token comment\">&lt;!-- &lt;property name=\"bucketMapPath\"&gt;/etc/mycat/bucketMapPath&lt;/property&gt; 用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>crc32slot<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.PartitionByCRC32PreSlot<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>count<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>2<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span><span class=\"token comment\">&lt;!-- 要分片的数据库节点数量,必须指定,否则没法分片 --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>hash-int<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.PartitionByFileMap<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mapFile<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>partition-hash-int.txt<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>rang-long<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.AutoPartitionByLong<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mapFile<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>autopartition-long.txt<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mod-long<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.PartitionByMod<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token comment\">&lt;!-- how many data nodes --&gt;</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>count<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>3<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>func1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.PartitionByLong<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>partitionCount<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>8<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>partitionLength<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>128<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>latestMonth<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.LatestMonthPartion<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>splitOneDay<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>24<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>partbymonth<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.PartitionByMonth<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>dateFormat<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>yyyy-MM-dd<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>sBeginDate<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>2015-01-01<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>rang-mod<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.PartitionByRangeMod<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mapFile<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>partition-range-mod.txt<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>function</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>jump-consistent-hash<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>io.mycat.route.function.PartitionByJumpConsistentHash<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>property</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>totalBuckets<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">&gt;</span></span>3<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>property</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>function</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token namespace\">mycat:</span>rule</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"_mycat_216\"></a>③ 重启mycat服务</h4> \n <h3><a id=\"_219\"></a>三、创建表插入数据测试分片</h3> \n <p>这里注意要先在<code>mysql主库</code>上新建我们上面<code>scheam.xml</code>配置文件中配置的<code>db1,db2,db3</code>这3个库再连接mycat服务哦,不然连接mycat的时候会出现如下的问题</p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200309103327854.png\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"1NavicatMycatt_user_225\"></a>1、<code>Navicat</code>连接<code>Mycat</code>创建表<code>t_user</code></h4> \n <blockquote> \n <p>温馨小提示:如果之前mycat中已经有了t_user表,即之前的操作中我们的mysql下已经存在一个db1库下的t_user表,但db2以及db3库下却没有的话,需要我们自己手动在db2,db3库下创建与db1库下t_user表相同的<code>表结构</code>,这里小编为了方便是直接将之前存在的t_user表删除后重新创建一个新的,但实际情况中建议不要这样操作哦,毕竟表里面是存在数据的,数据就是财富,如果吗,没有数据的话就随便怎么搞!</p> \n </blockquote> \n <p>创建完成效果为主从数据库下的db1,db2,db3库下都会出现t_user表</p> \n <p><img src=\"https://img-blog.csdnimg.cn/20200309104229325.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"2_233\"></a>2、插入数据</h4> \n <blockquote> \n <p>温馨小提示:在mycat中操作数据,mysql中刷新以查看效果哦~</p> \n </blockquote> \n <h6><a id=\"_id15000000_237\"></a>① 插入id为<code>1~5000000</code>的数据</h6> \n <p>效果如下,只有db1库下存在数据,db2,db3库下均无数据<br> <img src=\"https://img-blog.csdnimg.cn/20200309111913701.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"_id500000110000000_242\"></a>② 插入id为<code>5000001~10000000</code>的数据</h6> \n <p>效果如下,只有db2库下存在数据,db1,db3库下均无数据<br> <img src=\"https://img-blog.csdnimg.cn/20200309112531978.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"_id1000000115000000_247\"></a>③ 插入id为<code>10000001~15000000</code>的数据</h6> \n <p>效果如下,只有db3库下存在数据,db1,db2库下均无数据<br> <img src=\"https://img-blog.csdnimg.cn/2020030911291279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <p>最后我们一个简单的mycat分片配置就成功完成了~</p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/104746435', '2020-03-09 11:34:06', 1, '2020-11-07 15:21:24', 1, '2020-11-07 15:21:24', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (37, 1, 104700437, 'MySQL(18) 通过Docker搭建Mycat实现读写分离', '----- -----①、MySQL', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p>之前小编已经完成了<a href=\"https://zhengqing.blog.csdn.net/article/details/104679425\">MySQL的主从复制</a>,本文将基于<code>Docker</code>部署<code>Mycat</code>服务实现<code>读写分离</code></p> \n <h3><a id=\"DockerMycat_4\"></a>二、Docker搭建Mycat实现读写分离</h3> \n <h4><a id=\"1_6\"></a>1、创建所需文件夹,用于映射容器相应文件路径</h4> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/mysql/mycat\n</code></pre> \n <h4><a id=\"2mycat_13\"></a>2、mycat读写分离配置文件</h4> \n <p>mycat主要配置文件有以下3个:</p> \n <ol>\n <li><code>scheam.xml</code>: 定义<code>逻辑库</code>和<code>逻辑表</code>,<code>数据节点</code>,<code>数据主机</code>等信息</li>\n <li><code>server.xml</code>: 配置mycat用户</li>\n <li><code>rule.xml</code>: 配置<code>分片</code>(分库分表)</li>\n </ol> \n <p>由于本文仅是实现读写分离,因此只需要配置<code>scheam.xml</code>,<code>server.xml</code>这2个配置文件</p> \n <blockquote> \n <p>温馨小提示:关于mycat配置文件的详解可查看mycat文档 <a href=\"http://www.mycat.io/document/mycat-definitive-guide.pdf\">http://www.mycat.io/document/mycat-definitive-guide.pdf</a></p> \n </blockquote> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">cd</span> /IT_zhengqing/soft/mysql/mycat\n</code></pre> \n <h6><a id=\"_scheamxml_29\"></a>① <code>scheam.xml</code></h6> \n <blockquote> \n <p>echo: 如果没有这个文件则创建。如果有这个文件,那么新内容将会代替原来的内容</p> \n </blockquote> \n <pre><code class=\"prism language-shell\"><span class=\"token keyword\">echo</span> <span class=\"token string\">\'&lt;?xml version=\"1.0\"?&gt; &lt;!DOCTYPE mycat:schema SYSTEM \"schema.dtd\"&gt; &lt;mycat:schema xmlns:mycat=\"http://io.mycat/\"&gt; &lt;!-- 逻辑库:TESTDB 限制每一条sql最多访问100条数据 指定数据节点:dn1 --&gt; &lt;schema name=\"TESTDB\" checkSQLschema=\"true\" sqlMaxLimit=\"100\" dataNode=\"dn1\"&gt;&lt;/schema&gt; &lt;!-- 指定数据主机:localhost1 后端真实物理数据库:db1 --&gt; &lt;dataNode name=\"dn1\" dataHost=\"localhost1\" database=\"db1\" /&gt; &lt;!-- 定义最大连接数,最小连接数,是否对后端的多个从库进行负载均衡,数据库类型,驱动... --&gt; &lt;dataHost name=\"localhost1\" maxCon=\"1000\" minCon=\"10\" balance=\"1\" writeType=\"0\" dbType=\"mysql\" dbDriver=\"native\" switchType=\"1\" slaveThreshold=\"100\"&gt; &lt;!-- 定义如何监测后端数据库是否健康 --&gt; &lt;heartbeat&gt;select user()&lt;/heartbeat&gt; &lt;!-- 写数据库 --&gt; &lt;writeHost host=\"www.zhengqingya.com\" url=\"www.zhengqingya.com:3310\" user=\"root\" password=\"root\"&gt; &lt;!-- 读数据库 --&gt; &lt;readHost host=\"www.zhengqingya.com\" url=\"www.zhengqingya.com:3311\" user=\"root\" password=\"root\" /&gt; &lt;/writeHost&gt; &lt;/dataHost&gt; &lt;/mycat:schema&gt; \'</span> <span class=\"token operator\">&gt;</span> scheam.xml\n</code></pre> \n <p>注意这里配置的<code>checkSQLschema</code>属性: 标识是否检查sql语法中的schema信息</p> \n <ol>\n <li><code>true</code>: mycat发送到数据库的sql为<code>select * from table;</code></li>\n <li><code>false</code>: mycat发送到数据库的sql为<code>select * from TESTDB.table;</code></li>\n </ol> \n <h6><a id=\"_serverxml_61\"></a>② <code>server.xml</code></h6> \n <blockquote> \n <p>主要配置2个mycat用户<code>root</code>,<code>user</code></p> \n </blockquote> \n <pre><code class=\"prism language-shell\"><span class=\"token keyword\">echo</span> <span class=\"token string\">\'&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt; &lt;!DOCTYPE mycat:server SYSTEM \"server.dtd\"&gt; &lt;mycat:server xmlns:mycat=\"http://io.mycat/\"&gt; &lt;system&gt; &lt;property name=\"useSqlStat\"&gt;0&lt;/property&gt; &lt;!-- 1为开启实时统计、0为关闭 --&gt; &lt;property name=\"useGlobleTableCheck\"&gt;0&lt;/property&gt; &lt;!-- 1为开启全加班一致性检测、0为关闭 --&gt; &lt;property name=\"sequnceHandlerType\"&gt;2&lt;/property&gt; &lt;!-- &lt;property name=\"useCompression\"&gt;1&lt;/property&gt;--&gt; &lt;!--1为开启mysql压缩协议--&gt; &lt;!-- &lt;property name=\"fakeMySQLVersion\"&gt;5.6.20&lt;/property&gt;--&gt; &lt;!--设置模拟的MySQL版本号--&gt; &lt;!-- &lt;property name=\"processorBufferChunk\"&gt;40960&lt;/property&gt; --&gt; &lt;!-- &lt;property name=\"processors\"&gt;1&lt;/property&gt; &lt;property name=\"processorExecutor\"&gt;32&lt;/property&gt; --&gt; &lt;!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena--&gt; &lt;property name=\"processorBufferPoolType\"&gt;0&lt;/property&gt; &lt;!--默认是65535 64K 用于sql解析时最大文本长度 --&gt; &lt;!--&lt;property name=\"maxStringLiteralLength\"&gt;65535&lt;/property&gt;--&gt; &lt;!--&lt;property name=\"sequnceHandlerType\"&gt;0&lt;/property&gt;--&gt; &lt;!--&lt;property name=\"backSocketNoDelay\"&gt;1&lt;/property&gt;--&gt; &lt;!--&lt;property name=\"frontSocketNoDelay\"&gt;1&lt;/property&gt;--&gt; &lt;!--&lt;property name=\"processorExecutor\"&gt;16&lt;/property&gt;--&gt; &lt;!-- Mycat 服务端口号 --&gt; &lt;property name=\"serverPort\"&gt;8066&lt;/property&gt; &lt;!-- Mycat 管理端口号 --&gt; &lt;property name=\"managerPort\"&gt;9066&lt;/property&gt; &lt;!-- &lt;property name=\"idleTimeout\"&gt;300000&lt;/property&gt; &lt;property name=\"bindIp\"&gt;0.0.0.0&lt;/property&gt; &lt;property name=\"frontWriteQueueSize\"&gt;4096&lt;/property&gt; &lt;property name=\"processors\"&gt;32&lt;/property&gt; --&gt; &lt;!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志--&gt; &lt;property name=\"handleDistributedTransactions\"&gt;0&lt;/property&gt; &lt;!-- off heap for merge/order/group/limit 1开启 0关闭 --&gt; &lt;property name=\"useOffHeapForMerge\"&gt;1&lt;/property&gt; &lt;!-- 单位为m --&gt; &lt;property name=\"memoryPageSize\"&gt;1m&lt;/property&gt; &lt;!-- 单位为k --&gt; &lt;property name=\"spillsFileBufferSize\"&gt;1k&lt;/property&gt; &lt;property name=\"useStreamOutput\"&gt;0&lt;/property&gt; &lt;!-- 单位为m --&gt; &lt;property name=\"systemReserveMemorySize\"&gt;384m&lt;/property&gt; &lt;!--是否采用zookeeper协调切换 --&gt; &lt;property name=\"useZKSwitch\"&gt;true&lt;/property&gt; &lt;/system&gt; &lt;!-- 全局SQL防火墙设置 --&gt; &lt;!-- &lt;firewall&gt; &lt;whitehost&gt; &lt;host host=\"127.0.0.1\" user=\"mycat\"/&gt; &lt;host host=\"127.0.0.2\" user=\"mycat\"/&gt; &lt;/whitehost&gt; &lt;blacklist check=\"false\"&gt;&lt;/blacklist&gt; &lt;/firewall&gt; --&gt; &lt;!-- 定义mycat用户<span class=\"token variable\"><span class=\"token variable\">`</span>root<span class=\"token variable\">`</span></span>和<span class=\"token variable\"><span class=\"token variable\">`</span>user<span class=\"token variable\">`</span></span> --&gt; &lt;user name=\"root\"&gt; &lt;property name=\"password\"&gt;root&lt;/property&gt; &lt;!-- 能够访问的数据库(即<span class=\"token variable\"><span class=\"token variable\">`</span>schema.xml<span class=\"token variable\">`</span></span>中配置的逻辑库名) --&gt; &lt;property name=\"schemas\"&gt;TESTDB&lt;/property&gt; &lt;!-- 表级 DML 权限设置 --&gt; &lt;!-- &lt;privileges check=\"false\"&gt; &lt;schema name=\"TESTDB\" dml=\"0110\" &gt; &lt;table name=\"tb01\" dml=\"0000\"&gt;&lt;/table&gt; &lt;table name=\"tb02\" dml=\"1111\"&gt;&lt;/table&gt; &lt;/schema&gt; &lt;/privileges&gt; --&gt; &lt;/user&gt; &lt;!-- user用户只读 --&gt; &lt;user name=\"user\"&gt; &lt;property name=\"password\"&gt;123456&lt;/property&gt; &lt;property name=\"schemas\"&gt;TESTDB&lt;/property&gt; &lt;!-- 是否只读 --&gt; &lt;property name=\"readOnly\"&gt;true&lt;/property&gt; &lt;/user&gt; &lt;/mycat:server&gt; \'</span> <span class=\"token operator\">&gt;</span> server.xml\n</code></pre> \n <h4><a id=\"3mycat_150\"></a>3、运行mycat</h4> \n <h6><a id=\"_mycat_152\"></a>② 拉取mycat镜像</h6> \n <pre><code class=\"prism language-shell\">docker pull longhronshens/mycat-docker\n</code></pre> \n <h6><a id=\"__158\"></a>② 运行镜像</h6> \n <blockquote> \n <p>温馨小提示:注意开放对应端口哦~</p> \n </blockquote> \n <ol>\n <li><code>--name</code> :容器命名为mycat_server</li>\n <li><code>-p</code> :将容器的8066,9066端口分别映射到宿主机的8806,9066端口</li>\n <li><code>-d</code> : 后台运行</li>\n <li><code>--restart=always</code> : docker重启后,容器也随之启动</li>\n <li><code>-v</code> :目录挂载</li>\n </ol> \n <pre><code class=\"prism language-shell\">docker run --name mycat_server -d -p 8066:8066 -p 9066:9066 --restart<span class=\"token operator\">=</span>always -v /IT_zhengqing/soft/mysql/mycat/server.xml:/usr/local/mycat/conf/server.xml -v /IT_zhengqing/soft/mysql/mycat/schema.xml:/usr/local/mycat/conf/schema.xml longhronshens/mycat-docker\n</code></pre> \n <h3><a id=\"_172\"></a>三、测试读写分离</h3> \n <h4><a id=\"1masterdb1_174\"></a>1、在master(主)数据库中创建一个<code>db1</code>数据库</h4> \n <blockquote> \n <p>温馨小提示:<code>db1</code>为<code>scheam.xml</code>中配置的<code>逻辑库TESTDB</code>对应的真实物理数据库,也就是说我们下面对mycat中的TESTDB库操作实际上是对mysql中的db1库操作~</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20200308184708906.png\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"2mycat_180\"></a>2、在本地远程连接mycat服务</h4> \n <h6><a id=\"__182\"></a>① 方式一:命令</h6> \n <p><code>mysql -hmycat主机IP -P8066 -u用户名 -p密码</code></p> \n <pre><code class=\"prism language-shell\">mysql -hwww.zhengqingya.com -P8066 -uroot -proot\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200308185120508.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"_Navicat_192\"></a>② 方式二:通过<code>Navicat</code>可视化工具连接</h6> \n <p><img src=\"https://img-blog.csdnimg.cn/20200308190131427.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"3_196\"></a>3、创建表并插入数据</h4> \n <blockquote> \n <p>注意是在连接的mycat中进行操作,然后在mysql的主从库中查看对应效果</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/2020030819225447.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <pre><code class=\"prism language-mysql\">-- 查看数据库\nshow databases;\n-- 使用TESTDB库\nuse TESTDB;\n\n-- 创建表`t_user`\nCREATE TABLE `t_user` (\n `id` int(11) NOT NULL AUTO_INCREMENT COMMENT \'主键ID\',\n `username` varchar(255) DEFAULT NULL COMMENT \'用户名\',\n `password` varchar(255) DEFAULT NULL COMMENT \'密码\',\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;\n</code></pre> \n <h4><a id=\"4mycat_218\"></a>4、查看mycat日志信息</h4> \n <p>注:mycat默认日志级别为<code>info</code>,这里需修改为<code>debug</code>级别以便查看操作信息!</p> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 进入mycat容器</span>\ndocker <span class=\"token function\">exec</span> -it mycat_server /bin/bash\n\n<span class=\"token comment\"># 修改日志级别</span>\n<span class=\"token function\">vi</span> /usr/local/mycat/conf/log4j2.xml\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200308195318979.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <p>修改完之后重启mycat服务使配置生效</p> \n <p>我们可以分别插入数据和查询数据来查看对应的日志信息</p> \n <pre><code class=\"prism language-shell\">tailf /usr/local/mycat/logs/mycat.log\n</code></pre> \n <h6><a id=\"__240\"></a>① 插入数据日志信息</h6> \n <p>可以看到插入sql是在3310端口也就是master(主)数据库上执行的<br> <img src=\"https://img-blog.csdnimg.cn/2020030820065066.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h6><a id=\"__245\"></a>② 查询数据日志信息</h6> \n <p>可以看到查询sql是在3311端口也就是slave(从)数据库上执行的<br> <img src=\"https://img-blog.csdnimg.cn/20200308200247968.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"Mycat_250\"></a>四、Mycat管理</h3> \n <p>mycat还有一个管理端口9066</p> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 远程连接</span>\nmysql -hwww.zhengqingya.com -P9066 -uroot -proot\n\n<span class=\"token comment\"># 常用管理命令</span>\nreload @@config<span class=\"token punctuation\">;</span> <span class=\"token comment\"># 动态加载配置文件</span>\nshow @@datanode<span class=\"token punctuation\">;</span> <span class=\"token comment\"># 查看数据节点</span>\nshow @@datasource<span class=\"token punctuation\">;</span> <span class=\"token comment\"># 查看后端数据库</span>\n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/2020030820182777.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <hr> \n <p>就这样我们一个简单的读写分离就完成了,用户只需要连接mycat服务进行操作,而不需要管mycat背后的mysql服务~</p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/104700437', '2020-03-08 20:19:42', 1, '2020-11-07 15:21:24', 1, '2020-11-07 15:21:24', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (38, 1, 104650009, 'SpringBoot(24) 整合七牛云实现文件上传', '----- -----⑤、SpringBoot', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_0\"></a>一、前言</h3> \n <p>本文将基于<code>springboot2.1.8.RELEASE</code>整合<code>七牛云</code>实现<code>文件上传</code></p> \n <blockquote> \n <p>本文参考 <a href=\"https://www.keppel.fun/articles/2019/02/27/1551262881214.html\">https://www.keppel.fun/articles/2019/02/27/1551262881214.html</a></p> \n </blockquote> \n <h3><a id=\"AccessKeySecretKey_6\"></a>二、准备(<code>AccessKey</code>、<code>SecretKey</code>、<code>对象储存空间名称</code>、<code>存储区域</code>、<code>访问域名</code>)</h3> \n <h4><a id=\"1httpsportalqiniucomAccessKeySecretKey_8\"></a>1、先到<a href=\"https://portal.qiniu.com\">七牛云官网</a>获取<code>AccessKey/SecretKey</code></h4> \n <blockquote> \n <p>温馨小提示:没有账号的可以先注册一个使用~</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20200304152337354.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h4><a id=\"2_14\"></a>2、在对象储存中创建一个空间,然后拿到<code>存储空间名称</code>、<code>存储区域</code>、<code>访问域名</code></h4> \n <blockquote> \n <p>温馨小提示:这里只是为了体验七牛云的文件上传功能,在访问控制处可暂时选择公开,后面是可以修改权限的,不用担心~</p> \n </blockquote> \n <p><img src=\"https://img-blog.csdnimg.cn/20200304152731242.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 新建成功之后,七牛云给了一个测试域名可供使用一个月<br> <img src=\"https://img-blog.csdnimg.cn/20200304153329386.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <h3><a id=\"SpringBoot_22\"></a>三、SpringBoot集成七牛云</h3> \n <h4><a id=\"1pomxml_24\"></a>1、<code>pom.xml</code>中引入依赖</h4> \n <pre><code class=\"prism language-xml\"><span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/com.qiniu/qiniu-java-sdk --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.qiniu<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>qiniu-java-sdk<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>7.2.28<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token comment\">&lt;!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --&gt;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>com.google.code.gson<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>gson<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">&gt;</span></span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">&gt;</span></span>2.8.5<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">&gt;</span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">&gt;</span></span>\n</code></pre> \n <h4><a id=\"2applicationyml_41\"></a>2、<code>application.yml</code>中配置七牛云</h4> \n <pre><code class=\"prism language-yml\"><span class=\"token comment\"># ========================== ↓↓↓↓↓↓ 七牛云配置 ↓↓↓↓↓↓ ==========================</span>\n<span class=\"token key atrule\">qiniu</span><span class=\"token punctuation\">:</span>\n <span class=\"token key atrule\">accessKey</span><span class=\"token punctuation\">:</span> xxx\n <span class=\"token key atrule\">secretKey</span><span class=\"token punctuation\">:</span> xxx\n <span class=\"token comment\"># 对象储存</span>\n <span class=\"token key atrule\">bucket</span><span class=\"token punctuation\">:</span> zhengqingya <span class=\"token comment\"># 空间名称</span>\n <span class=\"token key atrule\">zone</span><span class=\"token punctuation\">:</span> huadong <span class=\"token comment\"># 存储区域</span>\n <span class=\"token key atrule\">domain</span><span class=\"token punctuation\">:</span> q6nf5vyrf.bkt.clouddn.com <span class=\"token comment\"># 访问域名</span>\n</code></pre> \n <h4><a id=\"3_54\"></a>3、七牛云配置类</h4> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Configuration</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">QiniuConfig</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${qiniu.accessKey}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String accessKey<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${qiniu.secretKey}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String secretKey<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${qiniu.zone}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String zone<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 配置空间的存储区域 */</span>\n <span class=\"token annotation punctuation\">@Bean</span>\n <span class=\"token keyword\">public</span> com<span class=\"token punctuation\">.</span>qiniu<span class=\"token punctuation\">.</span>storage<span class=\"token punctuation\">.</span>Configuration <span class=\"token function\">qiNiuConfig</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>zone<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">case</span> <span class=\"token string\">\"huadong\"</span><span class=\"token operator\">:</span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">com<span class=\"token punctuation\">.</span>qiniu<span class=\"token punctuation\">.</span>storage<span class=\"token punctuation\">.</span>Configuration</span><span class=\"token punctuation\">(</span>Zone<span class=\"token punctuation\">.</span><span class=\"token function\">huadong</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">case</span> <span class=\"token string\">\"huabei\"</span><span class=\"token operator\">:</span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">com<span class=\"token punctuation\">.</span>qiniu<span class=\"token punctuation\">.</span>storage<span class=\"token punctuation\">.</span>Configuration</span><span class=\"token punctuation\">(</span>Zone<span class=\"token punctuation\">.</span><span class=\"token function\">huabei</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">case</span> <span class=\"token string\">\"huanan\"</span><span class=\"token operator\">:</span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">com<span class=\"token punctuation\">.</span>qiniu<span class=\"token punctuation\">.</span>storage<span class=\"token punctuation\">.</span>Configuration</span><span class=\"token punctuation\">(</span>Zone<span class=\"token punctuation\">.</span><span class=\"token function\">huanan</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">case</span> <span class=\"token string\">\"beimei\"</span><span class=\"token operator\">:</span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">com<span class=\"token punctuation\">.</span>qiniu<span class=\"token punctuation\">.</span>storage<span class=\"token punctuation\">.</span>Configuration</span><span class=\"token punctuation\">(</span>Zone<span class=\"token punctuation\">.</span><span class=\"token function\">beimei</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">default</span><span class=\"token operator\">:</span>\n <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MyException</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"存储区域配置错误\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 构建一个七牛上传工具实例 */</span>\n <span class=\"token annotation punctuation\">@Bean</span>\n <span class=\"token keyword\">public</span> UploadManager <span class=\"token function\">uploadManager</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">UploadManager</span><span class=\"token punctuation\">(</span><span class=\"token function\">qiNiuConfig</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 认证信息实例 */</span>\n <span class=\"token annotation punctuation\">@Bean</span>\n <span class=\"token keyword\">public</span> Auth <span class=\"token function\">auth</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> Auth<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>accessKey<span class=\"token punctuation\">,</span> secretKey<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 构建七牛空间管理实例 */</span>\n <span class=\"token annotation punctuation\">@Bean</span>\n <span class=\"token keyword\">public</span> BucketManager <span class=\"token function\">bucketManager</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">BucketManager</span><span class=\"token punctuation\">(</span><span class=\"token function\">auth</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token function\">qiNiuConfig</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Bean</span>\n <span class=\"token keyword\">public</span> Gson <span class=\"token function\">gson</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Gson</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h4><a id=\"4_120\"></a>4、编写文件上传与删除方法</h4> \n <p>服务类:</p> \n <pre><code class=\"prism language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">interface</span> <span class=\"token class-name\">IQiniuService</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token comment\">/** * 以文件的形式上传 * * @param file * @param fileName: * @return: java.lang.String */</span>\n String <span class=\"token function\">uploadFile</span><span class=\"token punctuation\">(</span>File file<span class=\"token punctuation\">,</span> String fileName<span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> QiniuException<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 以流的形式上传 * * @param inputStream * @param fileName: * @return: java.lang.String */</span>\n String <span class=\"token function\">uploadFile</span><span class=\"token punctuation\">(</span>InputStream inputStream<span class=\"token punctuation\">,</span> String fileName<span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> QiniuException<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 删除文件 * * @param key: * @return: java.lang.String */</span>\n String <span class=\"token function\">delete</span><span class=\"token punctuation\">(</span>String key<span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> QiniuException<span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <p>服务实现类:</p> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@Service</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">QiniuServiceImpl</span> <span class=\"token keyword\">implements</span> <span class=\"token class-name\">IQiniuService</span><span class=\"token punctuation\">,</span> InitializingBean <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@Autowired</span>\n <span class=\"token keyword\">private</span> UploadManager uploadManager<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Autowired</span>\n <span class=\"token keyword\">private</span> BucketManager bucketManager<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Autowired</span>\n <span class=\"token keyword\">private</span> Auth auth<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${qiniu.bucket}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String bucket<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Value</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"${qiniu.domain}\"</span><span class=\"token punctuation\">)</span>\n <span class=\"token keyword\">private</span> String domain<span class=\"token punctuation\">;</span>\n\n <span class=\"token comment\">/** * 定义七牛云上传的相关策略 */</span>\n <span class=\"token keyword\">private</span> StringMap putPolicy<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">uploadFile</span><span class=\"token punctuation\">(</span>File file<span class=\"token punctuation\">,</span> String fileName<span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> QiniuException <span class=\"token punctuation\">{\n <!-- --></span>\n Response response <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>uploadManager<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span>file<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">,</span> <span class=\"token function\">getUploadToken</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">int</span> retry <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">.</span><span class=\"token function\">needRetry</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span> retry <span class=\"token operator\">&lt;</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n response <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>uploadManager<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span>file<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">,</span> <span class=\"token function\">getUploadToken</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n retry<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">.</span>statusCode <span class=\"token operator\">==</span> <span class=\"token number\">200</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"http://\"</span> <span class=\"token operator\">+</span> domain <span class=\"token operator\">+</span> <span class=\"token string\">\"/\"</span> <span class=\"token operator\">+</span> fileName<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"上传失败!\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">uploadFile</span><span class=\"token punctuation\">(</span>InputStream inputStream<span class=\"token punctuation\">,</span> String fileName<span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> QiniuException <span class=\"token punctuation\">{\n <!-- --></span>\n Response response <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>uploadManager<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span>inputStream<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">,</span> <span class=\"token function\">getUploadToken</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> null<span class=\"token punctuation\">,</span> null<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">int</span> retry <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">.</span><span class=\"token function\">needRetry</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span> retry <span class=\"token operator\">&lt;</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n response <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>uploadManager<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span>inputStream<span class=\"token punctuation\">,</span> fileName<span class=\"token punctuation\">,</span> <span class=\"token function\">getUploadToken</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> null<span class=\"token punctuation\">,</span> null<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n retry<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">.</span>statusCode <span class=\"token operator\">==</span> <span class=\"token number\">200</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"http://\"</span> <span class=\"token operator\">+</span> domain <span class=\"token operator\">+</span> <span class=\"token string\">\"/\"</span> <span class=\"token operator\">+</span> fileName<span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token keyword\">return</span> <span class=\"token string\">\"上传失败!\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> String <span class=\"token function\">delete</span><span class=\"token punctuation\">(</span>String key<span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> QiniuException <span class=\"token punctuation\">{\n <!-- --></span>\n Response response <span class=\"token operator\">=</span> bucketManager<span class=\"token punctuation\">.</span><span class=\"token function\">delete</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>bucket<span class=\"token punctuation\">,</span> key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">int</span> retry <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>response<span class=\"token punctuation\">.</span><span class=\"token function\">needRetry</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span> retry<span class=\"token operator\">++</span> <span class=\"token operator\">&lt;</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n response <span class=\"token operator\">=</span> bucketManager<span class=\"token punctuation\">.</span><span class=\"token function\">delete</span><span class=\"token punctuation\">(</span>bucket<span class=\"token punctuation\">,</span> key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n <span class=\"token keyword\">return</span> response<span class=\"token punctuation\">.</span>statusCode <span class=\"token operator\">==</span> <span class=\"token number\">200</span> <span class=\"token operator\">?</span> <span class=\"token string\">\"删除成功!\"</span> <span class=\"token operator\">:</span> <span class=\"token string\">\"删除失败!\"</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Override</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">afterPropertiesSet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> Exception <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>putPolicy <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">StringMap</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n putPolicy<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"returnBody\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"{\\\"key\\\":\\\"$(key)\\\",\\\"hash\\\":\\\"$(etag)\\\",\\\"bucket\\\":\\\"$(bucket)\\\",\\\"width\\\":$(imageInfo.width), \\\"height\\\":${imageInfo.height}}\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token comment\">/** * 获取上传凭证 */</span>\n <span class=\"token keyword\">private</span> String <span class=\"token function\">getUploadToken</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{\n <!-- --></span>\n <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>auth<span class=\"token punctuation\">.</span><span class=\"token function\">uploadToken</span><span class=\"token punctuation\">(</span>bucket<span class=\"token punctuation\">,</span> null<span class=\"token punctuation\">,</span> <span class=\"token number\">3600</span><span class=\"token punctuation\">,</span> putPolicy<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h3><a id=\"_237\"></a>四、测试文件上传与删除</h3> \n <pre><code class=\"prism language-java\"><span class=\"token annotation punctuation\">@RunWith</span><span class=\"token punctuation\">(</span>SpringRunner<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n<span class=\"token annotation punctuation\">@SpringBootTest</span><span class=\"token punctuation\">(</span>classes <span class=\"token operator\">=</span> DemoApplication<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">QiniuTest</span> <span class=\"token punctuation\">{\n <!-- --></span>\n\n <span class=\"token annotation punctuation\">@Autowired</span>\n <span class=\"token keyword\">private</span> IQiniuService qiniuService<span class=\"token punctuation\">;</span>\n\n <span class=\"token annotation punctuation\">@Test</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">testUpload</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> QiniuException <span class=\"token punctuation\">{\n <!-- --></span>\n String result <span class=\"token operator\">=</span> qiniuService<span class=\"token punctuation\">.</span><span class=\"token function\">uploadFile</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">File</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"D:\\\\IT_zhengqing\\\\image\\\\helloworld.jpg\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"helloworld\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"访问地址: \"</span> <span class=\"token operator\">+</span> result<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n <span class=\"token annotation punctuation\">@Test</span>\n <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">testDelete</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> QiniuException <span class=\"token punctuation\">{\n <!-- --></span>\n String result <span class=\"token operator\">=</span> qiniuService<span class=\"token punctuation\">.</span><span class=\"token function\">delete</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"helloworld\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n System<span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span>\n</code></pre> \n <h3><a id=\"demo_262\"></a>本文案例demo源码</h3> \n <p><a href=\"https://gitee.com/zhengqingya/java-workspace\">https://gitee.com/zhengqingya/java-workspace</a></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/104650009', '2020-03-04 15:50:10', 1, '2020-11-07 15:21:24', 1, '2020-11-07 15:21:24', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (39, 1, 104679425, 'MySQL(17) 通过Docker搭建主从同步', '----- -----①、MySQL', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <h3><a id=\"_1\"></a>一、前言</h3> \n <p>本文将基于<code>Docker</code>部署2台MySQL服务实现主从同步,即<code>主master</code>用于<code>写</code>(增删改),<code>从slave</code>用来<code>读</code>(查)</p> \n <h3><a id=\"DockerMySQL_5\"></a>二、Docker搭建MySQL实现主从同步</h3> \n <h4><a id=\"1master_7\"></a>1、<code>master</code>(主)<code>配置</code></h4> \n <h6><a id=\"__9\"></a>① 创建所需文件夹,用于映射容器相应文件路径</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/mysql/mysql-master\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/mysql/mysql-master/conf.d\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/mysql/mysql-master/data\n</code></pre> \n <h6><a id=\"_mycnf_17\"></a>② 创建<code>my.cnf</code>配置文件</h6> \n <pre><code class=\"prism language-shell\"><span class=\"token function\">cd</span> /IT_zhengqing/soft/mysql/mysql-master\n\n<span class=\"token comment\"># echo:如果没有这个文件则创建。如果有这个文件,那么新内容将会代替原来的内容</span>\n<span class=\"token keyword\">echo</span> <span class=\"token string\">\'[mysqld] user=mysql # MySQL启动用户 default-storage-engine=INNODB # 创建新表时将使用的默认存储引擎 character-set-server=utf8 # 设置mysql服务端默认字符集 pid-file = /var/run/mysqld/mysqld.pid # pid文件所在目录 socket = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字 datadir = /var/lib/mysql # 数据文件存放的目录 #log-error = /var/log/mysql/error.log #bind-address = 127.0.0.1 # MySQL绑定IP expire_logs_days=7 # 定义清除过期日志的时间(这里设置为7天) sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等! # 允许最大连接数 max_connections=200 # ================= ↓↓↓ mysql主从同步配置start ↓↓↓ ================= # 同一局域网内注意要唯一 server-id=3310 # 开启二进制日志功能 log-bin=mysql-bin # ================= ↑↑↑ mysql主从同步配置end ↑↑↑ ================= [client] default-character-set=utf8 # 设置mysql客户端默认字符集 \'</span> <span class=\"token operator\">&gt;</span> my.cnf\n</code></pre> \n <h6><a id=\"_mysql_50\"></a>③ 拉取mysql镜像</h6> \n <pre><code class=\"prism language-shell\">docker pull mysql:5.7\n</code></pre> \n <h6><a id=\"__56\"></a>④ 运行镜像</h6> \n <blockquote> \n <p>温馨小提示:注意开放对应端口以备访问哦~</p> \n </blockquote> \n <ol>\n <li><code>--name</code> :容器命名为mysql_server_3310</li>\n <li><code>-p</code> :将容器的3306端口映射到宿主机的3310端口</li>\n <li><code>-d</code> : 后台运行</li>\n <li><code>--restart=always</code> : docker重启后,容器也随之启动</li>\n <li><code>-v</code> :目录挂载</li>\n <li><code>-e MYSQL_ROOT_PASSWORD</code> :初始化root账号的密码为root</li>\n </ol> \n <pre><code class=\"prism language-shell\">docker run --name mysql_server_3310 -d -p 3310:3306 --restart<span class=\"token operator\">=</span>always -v /IT_zhengqing/soft/mysql/mysql-master/data/:/var/lib/mysql -v /IT_zhengqing/soft/mysql/mysql-master/conf.d:/etc/mysql/conf.d -v /IT_zhengqing/soft/mysql/mysql-master/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD<span class=\"token operator\">=</span>root mysql:5.7\n</code></pre> \n <h6><a id=\"___71\"></a>⑤ 进入容器</h6> \n <pre><code class=\"prism language-shell\">docker <span class=\"token function\">exec</span> -it mysql_server_3310 /bin/bash\n</code></pre> \n <h6><a id=\"_slave_77\"></a>⑥ 创建数据同步用户<code>slave</code>,并授权</h6> \n <pre><code class=\"prism language-mysql\">-- 登录mysql\nmysql -uroot -proot\n\n-- 创建用户slave,密码123456\nCREATE USER \'slave\'@\'%\' IDENTIFIED BY \'123456\';\n\n-- 授予slave用户 `REPLICATION SLAVE`权限和`REPLICATION CLIENT`权限,用于在`主` `从` 数据库之间同步数据\nGRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO \'slave\'@\'%\';\n-- 授予所有权限则执行命令: GRANT ALL PRIVILEGES ON *.* TO \'slave\'@\'%\';\n\n-- 使操作生效\nFLUSH PRIVILEGES;\n</code></pre> \n <h4><a id=\"2slave_94\"></a>2、<code>slave</code>(从)<code>配置</code></h4> \n <blockquote> \n <p>温馨小提示:这里slave配置与master配置区别在于:<code>容器挂载目录</code>、<code>容器名</code>、<code>端口</code>、以及<code>my.cnf</code>配置文件中的<code>server-id</code> <code>log-bin</code> <code>relay_log</code></p> \n </blockquote> \n <pre><code class=\"prism language-shell\"><span class=\"token comment\"># 1. 创建所需文件夹,用于映射容器相应文件路径</span>\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/mysql/mysql-slave\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/mysql/mysql-slave/conf.d\n<span class=\"token function\">mkdir</span> -p /IT_zhengqing/soft/mysql/mysql-slave/data\n\n<span class=\"token comment\"># 2. 创建`my.cnf`配置文件</span>\n<span class=\"token function\">cd</span> /IT_zhengqing/soft/mysql/mysql-slave\n<span class=\"token comment\"># echo:如果没有这个文件则创建。如果有这个文件,那么新内容将会代替原来的内容</span>\n<span class=\"token keyword\">echo</span> <span class=\"token string\">\'[mysqld] user=mysql # MySQL启动用户 default-storage-engine=INNODB # 创建新表时将使用的默认存储引擎 character-set-server=utf8 # 设置mysql服务端默认字符集 pid-file = /var/run/mysqld/mysqld.pid # pid文件所在目录 socket = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字 datadir = /var/lib/mysql # 数据文件存放的目录 #log-error = /var/log/mysql/error.log #bind-address = 127.0.0.1 # MySQL绑定IP expire_logs_days=7 # 定义清除过期日志的时间(这里设置为7天) sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等! # 允许最大连接数 max_connections=200 # ================= ↓↓↓ mysql主从同步配置start ↓↓↓ ================= # 同一局域网内注意要唯一 server-id=3311 # 开启二进制日志功能,以备slave作为其它slave的master时使用 log-bin=mysql-slave-bin # relay_log配置中记日志 relay_log=edu-mysql-relay-bin # ================= ↑↑↑ mysql主从同步配置end ↑↑↑ ================= [client] default-character-set=utf8 # 设置mysql客户端默认字符集 \'</span> <span class=\"token operator\">&gt;</span> my.cnf\n\n<span class=\"token comment\"># 3. 运行镜像</span>\ndocker run --name mysql_server_3311 -d -p 3311:3306 --restart<span class=\"token operator\">=</span>always -v /IT_zhengqing/soft/mysql/mysql-slave/data/:/var/lib/mysql -v /IT_zhengqing/soft/mysql/mysql-slave/conf.d:/etc/mysql/conf.d -v /IT_zhengqing/soft/mysql/mysql-slave/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD<span class=\"token operator\">=</span>root mysql:5.7\n</code></pre> \n <h4><a id=\"3masterslave_139\"></a>3、关联<code>master</code>和<code>slave</code></h4> \n <h6><a id=\"_mastermysqlmaster_141\"></a>① 在<code>master</code>服务器中进入mysql查看master状态</h6> \n <pre><code class=\"prism language-mysql\">-- 进入mysql\nmysql -uroot -proot\n\n-- 查看状态\nshow master status; \n</code></pre> \n <p><img src=\"https://img-blog.csdnimg.cn/20200305211843689.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n <p>注:<code>File</code>和<code>Position</code>字段的值<code>slave</code>中将会用到,在slave操作完成之前不要操作<code>master</code>,否则将会引起状态变化,即File和Position字段的值变化 !!!</p> \n <h6><a id=\"_slavemysql_155\"></a>② 在<code>slave</code>服务器中进入mysql,启动主从同步</h6> \n <ol>\n <li><code>master_host</code> :master服务器地址</li>\n <li><code>master_port</code> :端口号</li>\n <li><code>master_user</code> :用于数据同步的用户(之前在master中创建授权的用户)</li>\n <li><code>master_password</code> :用于同步用户的密码</li>\n <li><code>master_log_file</code> :指定slave从哪个日志文件开始复制数据,即之前提到的<code>File</code>字段值</li>\n <li><code>master_log_pos</code> :从哪个Position开始读,即之前<code>master</code>中的<code>Position</code>字段值,0则是从头开始完整的拷贝master库</li>\n <li><code>master_connect_retry</code> :连接失败时重试的时间间隔,默认是60秒</li>\n </ol> \n <pre><code class=\"prism language-mysql\">mysql -uroot -proot\n\nchange master to master_host=\'www.zhengqingya.com\',master_port=3310, master_user=\'slave\', master_password=\'123456\', master_log_file=\'mysql-bin.000003\', master_log_pos= 746, master_connect_retry=30;\n\n# 开启主从同步过程 【停止命令:stop slave;】\nstart slave;\n</code></pre> \n <h6><a id=\"__174\"></a>③ 查看主从同步状态</h6> \n <pre><code class=\"prism language-mysql\">show slave status \\G;\n</code></pre> \n <p>如下<code>Slave_IO_Running</code>和<code>Slave_SQL_Running</code> 都是Yes的话,就说明主从同步已经配置好了!<br> <img src=\"https://img-blog.csdnimg.cn/20200305212522557.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 如果<code>Slave_IO_Running</code>为<code>Connecting</code>,<code>SlaveSQLRunning</code>为<code>Yes</code>,则说明配置有问题,这时候就要检查配置中哪一步出现问题了哦,可根据<code>Last_IO_Error</code>字段信息排错或谷歌…</p> \n <h3><a id=\"_185\"></a>三、测试主从同步</h3> \n <p>在<code>Navicat</code>中分别连接<code>master</code>和<code>slave</code>服务器<br> <img src=\"https://img-blog.csdnimg.cn/20200305213830327.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"><br> 然后在<code>master</code>中建库建表插入数据,最后在<code>slave</code>中刷新可发现<code>master</code>中的数据同步成功过来了~<br> <img src=\"https://img-blog.csdnimg.cn/2020030521415142.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjI1NTU4,size_16,color_FFFFFF,t_70\" alt=\"在这里插入图片描述\"></p> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/104679425', '2020-03-05 21:46:20', 1, '2020-11-07 15:21:24', 1, '2020-11-07 15:21:24', 1);
INSERT INTO `t_st_crawler_article_info` VALUES (40, 1, 104592355, '郑清 - 日常作息表(2020-02)', '-----、生活', '<article class=\"baidu_pl\"> \n <div id=\"article_content\" class=\"article_content clearfix\"> \n <link rel=\"stylesheet\" href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css\"> \n <div id=\"content_views\" class=\"markdown_views prism-atom-one-dark\"> \n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"></path> \n </svg> \n <table>\n <thead>\n <tr>\n <th align=\"center\">日期</th>\n <th align=\"center\">早上</th>\n <th align=\"center\">中午</th>\n <th align=\"center\">下午</th>\n <th align=\"center\">晚上</th>\n <th align=\"center\">回家安排</th>\n <th align=\"center\">今日总结</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td align=\"center\">2020-02-29 星期六 晴</td>\n <td align=\"center\">睡觉</td>\n <td align=\"center\">15:00起床,吃饭</td>\n <td align=\"center\">打游戏</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-28 星期五 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">4:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-27 星期四 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-26 星期三 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-25 星期二 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">3:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-24 星期一 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-23 星期天 阴</td>\n <td align=\"center\">睡觉</td>\n <td align=\"center\">15:00起床,吃饭</td>\n <td align=\"center\">打游戏</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-22 星期六 阴</td>\n <td align=\"center\">睡觉</td>\n <td align=\"center\">15:00起床,吃饭</td>\n <td align=\"center\">打游戏</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">3:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-21 星期五 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">22:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-20 星期四 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-19 星期三 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-18 星期二 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-17 星期一 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">22:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-16 星期天 阴</td>\n <td align=\"center\">睡觉</td>\n <td align=\"center\">15:00起床,吃饭</td>\n <td align=\"center\">休息</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-15 星期六 阴</td>\n <td align=\"center\">睡觉</td>\n <td align=\"center\">13:00起床,吃饭</td>\n <td align=\"center\">打游戏</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">3:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-14 星期五 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">11:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">22:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-13 星期四 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-12 星期三 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-11 星期二 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:30 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-10 星期一 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:30 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">1:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-09 星期天 晴</td>\n <td align=\"center\">9:00起床,在家办公</td>\n <td align=\"center\">14:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">0:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-08 星期六 晴</td>\n <td align=\"center\">11:30起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">3:00休息</td>\n <td align=\"center\">休息日+实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-07 星期五 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务+编写教程<a href=\"https://zhengqing.blog.csdn.net/article/details/104217227\">SpringBoot(23) 集成socket.io服务端和客户端实现通信</a></td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-06 星期四 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务+编写教程<a href=\"https://zhengqing.blog.csdn.net/article/details/104196015\">SpringBoot(22) 集成MobileIMSDK实现即时通讯</a></td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-05 星期三 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-04 星期二 晴</td>\n <td align=\"center\">8:50起床,在家办公</td>\n <td align=\"center\">12:00 吃饭,午休30分钟</td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">2:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-03 星期一 晴</td>\n <td align=\"center\">8:50起床,吃饭,在家办公</td>\n <td align=\"center\"></td>\n <td align=\"center\">上班</td>\n <td align=\"center\">吃饭,休息</td>\n <td align=\"center\">3:00休息</td>\n <td align=\"center\">实现公司业务</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-02 星期天 阴</td>\n <td align=\"center\"></td>\n <td align=\"center\"></td>\n <td align=\"center\">16:00起床</td>\n <td align=\"center\">19:00吃饭,休息</td>\n <td align=\"center\">22:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n <tr>\n <td align=\"center\">2020-02-01 星期六 阴</td>\n <td align=\"center\">8:50起床,回成都</td>\n <td align=\"center\">12:00朋友家吃饭</td>\n <td align=\"center\">回住处</td>\n <td align=\"center\">20:00吃饭,休息</td>\n <td align=\"center\">5:00休息</td>\n <td align=\"center\">休息日</td>\n </tr>\n </tbody>\n </table> \n </div> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css\" rel=\"stylesheet\"> \n <link href=\"https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css\" rel=\"stylesheet\"> \n </div> \n</article>', 'https://zhengqing.blog.csdn.net/article/details/104592355', '2020-03-01 14:51:09', 1, '2020-11-07 15:21:24', 1, '2020-11-07 15:21:24', 1);
-- ----------------------------
-- Table structure for t_st_crawler_website
-- ----------------------------
DROP TABLE IF EXISTS `t_st_crawler_website`;
CREATE TABLE `t_st_crawler_website` (
`website_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '名称',
`url` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'url地址',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`website_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '小工具 - 爬虫 - 网站管理' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_st_crawler_website
-- ----------------------------
INSERT INTO `t_st_crawler_website` VALUES (1, '郑清个人博客', 'https://zhengqing.blog.csdn.net/article/list/1', 1, '2020-08-22 15:01:51', 1, '2020-11-07 15:21:07', 1);
-- ----------------------------
-- Table structure for t_st_db_data_source
-- ----------------------------
DROP TABLE IF EXISTS `t_st_db_data_source`;
CREATE TABLE `t_st_db_data_source` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '数据库名称',
`ip_address` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 'ip地址',
`port` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '端口',
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户名',
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码',
`type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '1' COMMENT '数据库类型(关联表`t_sys_dict`字段`st_db_data_source_type`分类value值)',
`driver_class_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '驱动程序',
`remark` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '小工具 - 数据库 - 数据源配置信息表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_st_db_data_source
-- ----------------------------
INSERT INTO `t_st_db_data_source` VALUES (19, '本地mysql', '127.0.0.1', '3306', 'root', 'root', '1', 'com.mysql.jdbc.Driver', '测试数据库...', 1, '2020-09-02 23:51:22', 1, '2020-09-07 10:15:24', 1);
-- ----------------------------
-- Table structure for t_st_other_anonymity
-- ----------------------------
DROP TABLE IF EXISTS `t_st_other_anonymity`;
CREATE TABLE `t_st_other_anonymity` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内容',
`anonymous_user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '匿名用户名',
`anonymous_handler_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '匿名处理人',
`status` tinyint(2) DEFAULT NULL COMMENT '状态:是否处理 (0:未处理 1:已处理)',
`remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`handle_time` datetime(0) DEFAULT NULL COMMENT '处理时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '小工具 - 其它 - 匿名事件表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_sys_dict
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_dict`;
CREATE TABLE `t_sys_dict` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`dict_type_id` int(11) NOT NULL COMMENT '字典类型id(关联`t_sys_dict_type`表`id`字段)',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
`value` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '值',
`sort` tinyint(4) NOT NULL COMMENT '排序',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 184 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '基础模块-数据字典' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_sys_dict
-- ----------------------------
INSERT INTO `t_sys_dict` VALUES (75, 1, '添加', 'add', 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (76, 1, '删除', 'delete', 2, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (77, 1, '编辑', 'edit', 3, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (78, 1, '查询', 'query', 4, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (79, 1, '重置', 'reset', 5, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (80, 1, '详情', 'detail', 6, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (81, 1, '保存', 'save', 7, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (82, 1, '启动', 'run', 8, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (83, 1, '停止', 'stop', 9, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (84, 1, '上报', 'report', 10, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (85, 1, '撤销', 'revoke', 11, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (86, 1, '说明', 'explain', 12, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (87, 1, '解除', 'remove', 13, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (88, 1, '修正', 'amend', 14, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (89, 1, '评价', 'evaluation', 15, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (90, 1, '下发', 'issued', 16, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (91, 1, '填报', 'fill', 17, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (92, 1, '处理', 'handle', 18, 1, '2020-08-22 15:01:51', 1, '2020-10-25 13:45:33', 1);
INSERT INTO `t_sys_dict` VALUES (93, 1, '开放权限', 'open_permission', 19, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (94, 1, '关闭权限', 'close_permission', 20, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (95, 1, '关闭授权', 'close_authorization', 21, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (96, 1, '角色权限', 'role_permission', 22, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (97, 1, '数据权限', 'data_permission', 23, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (98, 1, '权限', 'permission', 24, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (115, 1, '禁用', 'disable', 25, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (116, 1, '添加下级菜单', 'add_next', 26, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (117, 1, '开启授权', 'open_authorization', 27, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (141, 1, '刷新', 'refresh', 28, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (153, 1, '导出', 'export', 29, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (154, 1, '表格列过滤', 'column_filter', 30, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (155, 2, '.java', '.java', 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (156, 2, '.xml', '.xml', 2, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (157, 2, '.py', '.py', 3, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (158, 2, '.vue', '.vue', 4, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (159, 2, '.md', '.md', 5, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (160, 2, '.php', '.php', 6, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (161, 2, '.html', '.html', 7, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict` VALUES (162, 2, '.js', '.js', 8, 1, '2020-08-22 15:01:51', 1, '2020-08-30 02:33:55', 1);
INSERT INTO `t_sys_dict` VALUES (163, 2, '.jsp', '.jsp', 9, 1, '2020-08-22 15:01:51', 1, '2020-08-30 02:33:51', 1);
INSERT INTO `t_sys_dict` VALUES (165, 3, 'el-icon-loading', 'el-icon-loading', 1, 1, '2020-08-30 03:05:05', 1, '2020-08-30 03:05:05', 1);
INSERT INTO `t_sys_dict` VALUES (166, 3, 'el-icon-s-tools', 'el-icon-s-tools', 2, 1, '2020-08-30 03:05:24', 1, '2020-08-30 03:05:24', 1);
INSERT INTO `t_sys_dict` VALUES (167, 3, 'el-icon-setting', 'el-icon-setting', 3, 1, '2020-08-30 03:05:31', 1, '2020-08-30 03:05:31', 1);
INSERT INTO `t_sys_dict` VALUES (168, 3, 'el-icon-user-solid', 'el-icon-user-solid', 4, 1, '2020-08-30 03:12:30', 1, '2020-08-30 03:12:30', 1);
INSERT INTO `t_sys_dict` VALUES (169, 3, 'el-icon-user', 'el-icon-user', 5, 1, '2020-08-30 03:14:05', 1, '2020-08-30 03:14:05', 1);
INSERT INTO `t_sys_dict` VALUES (170, 3, 'el-icon-star-on', 'el-icon-star-on', 6, 1, '2020-08-30 03:14:28', 1, '2020-08-30 03:14:28', 1);
INSERT INTO `t_sys_dict` VALUES (171, 3, 'el-icon-s-promotion', 'el-icon-s-promotion', 7, 1, '2020-08-30 03:14:56', 1, '2020-08-30 03:14:56', 1);
INSERT INTO `t_sys_dict` VALUES (172, 3, 'el-icon-lollipop', 'el-icon-lollipop', 8, 1, '2020-08-30 03:15:49', 1, '2020-08-30 03:15:49', 1);
INSERT INTO `t_sys_dict` VALUES (173, 3, 'el-icon-magic-stick', 'el-icon-magic-stick', 9, 1, '2020-08-30 03:16:51', 1, '2020-08-30 03:16:51', 1);
INSERT INTO `t_sys_dict` VALUES (174, 3, 'el-icon-s-opportunity', 'el-icon-s-opportunity', 10, 1, '2020-08-30 03:18:32', 1, '2020-09-03 14:47:34', 1);
INSERT INTO `t_sys_dict` VALUES (175, 4, 'HTML', '1', 1, 1, '2020-08-30 16:58:01', 1, '2020-08-30 16:58:01', 1);
INSERT INTO `t_sys_dict` VALUES (176, 4, 'MARKDOWN', '2', 2, 1, '2020-08-30 16:58:09', 1, '2020-08-30 16:58:09', 1);
INSERT INTO `t_sys_dict` VALUES (177, 4, 'WORD', '3', 3, 1, '2020-08-30 16:58:18', 1, '2020-08-30 16:58:18', 1);
INSERT INTO `t_sys_dict` VALUES (178, 5, 'MySQL', '1', 1, 1, '2020-09-02 20:56:22', 1, '2020-09-12 18:40:44', 1);
INSERT INTO `t_sys_dict` VALUES (179, 5, 'Oracle', '2', 2, 1, '2020-09-02 20:56:22', 1, '2020-09-02 20:56:24', 1);
INSERT INTO `t_sys_dict` VALUES (180, 1, '设计表', 'design_table', 31, 1, '2020-09-06 19:09:40', 1, '2020-09-06 19:11:17', 1);
INSERT INTO `t_sys_dict` VALUES (181, 6, 'gitee', '1', 1, 1, '2020-12-06 13:16:39', 1, '2020-12-06 13:16:39', 1);
INSERT INTO `t_sys_dict` VALUES (182, 6, 'github', '2', 2, 1, '2020-12-06 13:16:54', 1, '2020-12-06 13:16:54', 1);
INSERT INTO `t_sys_dict` VALUES (183, 6, 'qq', '3', 3, 1, '2020-12-06 13:17:03', 1, '2020-12-06 13:17:03', 1);
-- ----------------------------
-- Table structure for t_sys_dict_type
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_dict_type`;
CREATE TABLE `t_sys_dict_type` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '编码',
`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
`status` tinyint(2) DEFAULT 1 COMMENT '状态(1:可用 0:不可用)',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '基础模块-数据字典类型' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_sys_dict_type
-- ----------------------------
INSERT INTO `t_sys_dict_type` VALUES (1, 'permission_btn', '权限按钮', 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict_type` VALUES (2, 'file_suffix', '文件后缀名', 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_dict_type` VALUES (3, 'element_icon', 'Element-Icon图标', 1, 1, '2020-08-30 02:52:36', 1, '2020-08-30 02:52:38', 1);
INSERT INTO `t_sys_dict_type` VALUES (4, 'st_crawler_csdn_export_data_type', '小工具_爬虫_CSDN文章导出数据类型', 1, 1, '2020-08-30 16:46:07', 1, '2020-08-30 16:46:11', 1);
INSERT INTO `t_sys_dict_type` VALUES (5, 'st_db_data_source_type', '小工具_数据库_数据源类型', 1, 1, '2020-09-02 20:41:27', 1, '2020-09-12 19:27:47', 1);
INSERT INTO `t_sys_dict_type` VALUES (6, 'oauth_type', '第三方帐号授权类型', 1, 1, '2020-12-06 13:11:27', 1, '2020-12-06 13:21:45', 1);
-- ----------------------------
-- Table structure for t_sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_menu`;
CREATE TABLE `t_sys_menu` (
`menu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
`title` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单名称',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单名称 - 英文',
`icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单图标',
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单链接url',
`parent_id` int(11) DEFAULT 0 COMMENT '父类菜单ID',
`display_order` int(11) DEFAULT NULL COMMENT '菜单排序',
`component` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '组件名',
`hidden` tinyint(2) DEFAULT 1 COMMENT '是否隐藏 1:隐藏 0:显示',
`redirect` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '重定向路径',
`status` tinyint(2) DEFAULT 1 COMMENT '菜单状态 1:启用 0:禁用',
`type` tinyint(2) DEFAULT 0 COMMENT '菜单类型 0菜单 1按钮',
`always_show` tinyint(2) DEFAULT 1 COMMENT '是否总是显示 0:不显示 1:显示',
`breadcrumb` tinyint(2) DEFAULT 1 COMMENT '面包屑 0 false 1 true',
`system_source` tinyint(2) NOT NULL DEFAULT 0 COMMENT '系统来源',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`menu_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 42 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统管理-菜单表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_sys_menu
-- ----------------------------
INSERT INTO `t_sys_menu` VALUES (1, '代码生成器', 'codeGenerator', 'el-icon-s-promotion', '/codeGenerator', 0, 2, 'Layout', 0, '', 1, 0, 1, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-30 03:18:52', 1);
INSERT INTO `t_sys_menu` VALUES (2, '系统管理', 'system', 'el-icon-s-tools', '/system', 0, 3, 'Layout', 0, NULL, 1, 0, 1, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-30 03:17:44', 1);
INSERT INTO `t_sys_menu` VALUES (3, '菜单管理', 'menu', NULL, 'menu', 2, 9, 'system/menu/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (4, '用户管理', 'user', NULL, 'user', 2, 1, 'system/user/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (5, '角色管理', 'role', NULL, 'role', 2, 3, 'system/role/list', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (6, '角色权限', 'roleForm', NULL, 'roleForm', 2, 8, 'system/role/form', 1, NULL, 1, 0, 1, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (8, '个人中心', 'personal-center', NULL, 'personal-center', 2, 2, 'system/personal-center/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (10, '数据字典', 'dict', NULL, 'dict', 2, 10, 'system/dict/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (11, '首页1', 'dashboard', 'el-icon-loading', '/', 0, 0, 'Layout', 0, '/dashboard', 1, 0, 0, 0, 0, 1, '2020-08-22 15:01:51', 1, '2020-09-09 17:35:09', 1);
INSERT INTO `t_sys_menu` VALUES (12, '首页', 'Dashboard', NULL, '/dashboard', 11, 1, 'dashboard/index', 0, NULL, 1, 0, 0, 0, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-30 15:59:04', 1);
INSERT INTO `t_sys_menu` VALUES (13, '项目管理', 'project', NULL, 'project', 1, 1, 'code-generator/project/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (15, '项目模板管理', 'project_template', NULL, 'project_template', 1, 3, 'code-generator/project-template/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (27, '小工具', 'small-tools', 'el-icon-s-opportunity', '/small-tools', 0, 5, 'Layout', 0, NULL, 1, 0, 1, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-30 03:18:44', 1);
INSERT INTO `t_sys_menu` VALUES (28, '爬虫', 'crawler', 'el-icon-lollipop', '/crawler', 27, 1, 'parentView', 0, NULL, 1, 0, 1, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-30 03:19:17', 1);
INSERT INTO `t_sys_menu` VALUES (29, '网站列表', 'website', NULL, 'website', 28, 1, 'small-tools/crawler/website/list', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-09-10 21:02:30', 1);
INSERT INTO `t_sys_menu` VALUES (30, '文章信息', 'article-info', NULL, 'article-info', 28, 2, 'small-tools/crawler/article-info/list', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (31, '数据库', 'db', 'el-icon-lollipop', '/db', 27, 3, 'parentView', 0, NULL, 1, 0, 1, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-30 03:19:17', 1);
INSERT INTO `t_sys_menu` VALUES (32, '数据源管理', 'data-source', NULL, 'data-source', 31, 1, 'small-tools/db/data-source/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (33, '数据库操作', 'databases', NULL, 'databases', 31, 2, 'small-tools/db/databases/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (34, '修改表字段信息', 'update-column-info', NULL, 'update-column-info', 31, 3, 'small-tools/db/databases/update-column-info', 1, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (35, '其它', 'other', 'el-icon-lollipop', '/other', 27, 4, 'parentView', 0, NULL, 1, 0, 1, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-30 03:19:17', 1);
INSERT INTO `t_sys_menu` VALUES (36, '匿名反馈箱', 'anonymity', NULL, 'anonymity', 35, 1, 'small-tools/other/anonymity/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2021-01-13 07:38:37', 1);
INSERT INTO `t_sys_menu` VALUES (37, 'freemaker模板数据配置', 'free-marker-template', NULL, 'free-marker-template', 1, 5, 'code-generator/free-marker-template/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (38, '生成代码', 'project-re-db', NULL, 'project-re-db', 1, 6, 'code-generator/project-re-db/index', 0, NULL, 1, 0, 0, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (39, '数据库表', 'table', NULL, 'project-re-db/table', 1, 7, 'code-generator/project-re-db/table', 1, NULL, 1, 0, 1, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu` VALUES (40, '数据表字段', 'column', NULL, 'project-re-db/column', 1, 8, 'code-generator/project-re-db/column', 1, NULL, 1, 0, 1, 1, 0, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
-- ----------------------------
-- Table structure for t_sys_menu_btn
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_menu_btn`;
CREATE TABLE `t_sys_menu_btn` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`menu_id` int(11) NOT NULL COMMENT '菜单ID',
`btn_id` int(11) NOT NULL COMMENT '按钮ID',
`status` tinyint(2) NOT NULL DEFAULT 1 COMMENT '0 关闭 1启用',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 401 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统管理-菜单关联按钮权限表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_sys_menu_btn
-- ----------------------------
INSERT INTO `t_sys_menu_btn` VALUES (20, 18, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (21, 18, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (22, 18, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (23, 18, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (24, 18, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (25, 35, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (26, 35, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (27, 35, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (28, 35, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (29, 35, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (30, 37, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (31, 37, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (32, 37, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (33, 37, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (34, 37, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (35, 38, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (36, 38, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (37, 38, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (38, 38, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (39, 39, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (40, 39, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (41, 39, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (42, 39, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (43, 40, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (44, 40, 82, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (45, 40, 83, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (46, 41, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (47, 41, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (48, 41, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (49, 41, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (50, 41, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (51, 45, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (52, 45, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (53, 46, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (54, 46, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (55, 48, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (56, 48, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (57, 48, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (58, 48, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (59, 48, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (60, 50, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (61, 50, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (62, 50, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (63, 50, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (64, 50, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (65, 51, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (66, 51, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (67, 51, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (68, 51, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (69, 51, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (70, 52, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (71, 52, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (72, 52, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (73, 52, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (74, 52, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (75, 53, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (76, 53, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (77, 53, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (78, 53, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (79, 53, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (80, 101, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (81, 101, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (82, 101, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (83, 101, 84, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (84, 101, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (85, 101, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (86, 101, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (87, 55, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (88, 55, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (89, 55, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (90, 55, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (91, 55, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (92, 55, 84, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (93, 55, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (94, 83, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (95, 83, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (96, 83, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (97, 83, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (98, 83, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (99, 84, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (100, 84, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (101, 84, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (102, 84, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (103, 84, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (104, 54, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (105, 54, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (106, 57, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (107, 57, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (108, 57, 87, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (109, 57, 86, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (110, 57, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (111, 58, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (112, 58, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (113, 58, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (114, 58, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (115, 58, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (116, 59, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (117, 59, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (118, 59, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (119, 59, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (120, 59, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (121, 62, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (122, 62, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (123, 63, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (124, 63, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (125, 64, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (126, 64, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (127, 66, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (128, 66, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (129, 65, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (130, 65, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (131, 67, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (132, 67, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (133, 91, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (134, 91, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (135, 92, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (136, 92, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (137, 93, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (138, 93, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (139, 95, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (140, 95, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (141, 96, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (142, 96, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (143, 94, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (144, 94, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (145, 70, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (146, 70, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (147, 70, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (148, 70, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (149, 71, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (150, 71, 88, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (151, 71, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (152, 13, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (153, 13, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (154, 13, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (155, 13, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (156, 13, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (157, 17, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (158, 17, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (159, 17, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (160, 17, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (161, 21, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (162, 21, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (163, 21, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (164, 21, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (165, 21, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (169, 30, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (171, 30, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (173, 32, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (174, 32, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (175, 32, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (177, 26, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (178, 26, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (179, 26, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (180, 26, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (181, 26, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (182, 26, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (183, 28, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (184, 28, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (185, 28, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (186, 28, 92, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (187, 24, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (188, 24, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (189, 24, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (190, 24, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (191, 73, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (192, 73, 93, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (193, 73, 94, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (194, 73, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (195, 73, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (196, 74, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (197, 74, 93, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (198, 74, 94, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (199, 74, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (200, 74, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (201, 75, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (202, 75, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (203, 75, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (204, 75, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (205, 75, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (206, 75, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (207, 75, 95, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (208, 76, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (209, 76, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (210, 4, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (211, 4, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (212, 4, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (213, 4, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (214, 4, 96, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (215, 4, 97, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (216, 5, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (217, 5, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (218, 5, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (219, 5, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (220, 5, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (221, 5, 98, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (222, 9, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (223, 9, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (224, 9, 91, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (225, 10, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (226, 10, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (227, 10, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (228, 11, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (229, 11, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (230, 11, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (231, 11, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (232, 3, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (233, 3, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (234, 3, 115, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (235, 3, 116, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (236, 103, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (237, 103, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (238, 103, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (239, 103, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (240, 15, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (245, 106, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (246, 71, 89, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (247, 17, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (248, 75, 117, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (249, 3, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (250, 68, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (251, 68, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (252, 107, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (253, 107, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (254, 55, 85, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (255, 116, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (256, 110, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (257, 110, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (258, 110, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (259, 110, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (260, 110, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (261, 110, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (262, 113, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (263, 113, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (264, 113, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (265, 113, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (266, 113, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (267, 113, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (268, 111, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (269, 111, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (270, 111, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (271, 111, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (272, 111, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (273, 119, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (274, 119, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (275, 119, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (276, 119, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (277, 119, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (278, 119, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (279, 120, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (280, 120, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (281, 120, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (282, 120, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (283, 120, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (284, 120, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (285, 121, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (286, 121, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (287, 121, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (288, 121, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (289, 121, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (290, 121, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (291, 122, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (292, 122, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (293, 122, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (294, 122, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (295, 122, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (296, 122, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (297, 125, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (298, 125, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (299, 125, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (300, 125, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (301, 126, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (302, 125, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (303, 126, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (304, 126, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (305, 126, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (306, 127, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (307, 127, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (308, 127, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (309, 127, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (310, 127, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (311, 128, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (312, 128, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (313, 128, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (314, 128, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (315, 128, 141, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (316, 132, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (317, 132, 153, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (318, 132, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (319, 132, 154, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (320, 133, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (321, 133, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (322, 133, 153, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (323, 133, 154, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (324, 134, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (325, 134, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (326, 134, 153, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (327, 134, 154, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (328, 135, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (329, 135, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (330, 135, 154, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (331, 135, 153, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (332, 138, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (333, 138, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (334, 140, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (335, 140, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (336, 137, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (337, 137, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (338, 137, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (339, 141, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (341, 3, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (342, 14, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (343, 14, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (344, 14, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (345, 14, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (346, 14, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (347, 14, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (348, 14, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (349, 21, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (350, 21, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (351, 22, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (352, 22, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (353, 22, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (354, 22, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (355, 22, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (356, 22, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (357, 22, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (358, 23, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (359, 23, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (360, 23, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (361, 23, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (362, 23, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (363, 23, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (364, 23, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (365, 24, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (366, 24, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (367, 24, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (368, 29, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (369, 29, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (370, 29, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (371, 29, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (372, 29, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (373, 29, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (374, 29, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (375, 31, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (376, 31, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (377, 31, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (378, 31, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (379, 31, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (380, 31, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (381, 31, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (382, 32, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (383, 32, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (384, 32, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (385, 32, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (386, 16, 75, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (387, 16, 76, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (388, 16, 77, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (389, 16, 78, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (390, 16, 79, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (391, 16, 80, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (392, 16, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (393, 34, 81, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (394, 33, 180, 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_menu_btn` VALUES (395, 36, 75, 1, 1, '2020-10-25 13:44:42', 1, '2020-10-25 13:44:42', 1);
INSERT INTO `t_sys_menu_btn` VALUES (396, 36, 76, 1, 1, '2020-10-25 13:44:42', 1, '2020-10-25 13:44:42', 1);
INSERT INTO `t_sys_menu_btn` VALUES (397, 36, 77, 1, 1, '2020-10-25 13:44:42', 1, '2020-10-25 13:44:42', 1);
INSERT INTO `t_sys_menu_btn` VALUES (398, 36, 78, 1, 1, '2020-10-25 13:44:42', 1, '2020-10-25 13:44:42', 1);
INSERT INTO `t_sys_menu_btn` VALUES (399, 36, 81, 1, 1, '2020-10-25 13:44:42', 1, '2020-10-25 13:44:42', 1);
INSERT INTO `t_sys_menu_btn` VALUES (400, 36, 92, 1, 1, '2020-10-25 13:44:42', 1, '2020-10-25 13:44:42', 1);
-- ----------------------------
-- Table structure for t_sys_role
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_role`;
CREATE TABLE `t_sys_role` (
`role_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '角色名',
`code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '角色编号',
`status` tinyint(2) DEFAULT 1 COMMENT '状态(1:开启(默认) 0:禁用)',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`role_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统管理-角色管理表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_sys_role
-- ----------------------------
INSERT INTO `t_sys_role` VALUES (1, '普通用户', 'persion', 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_role` VALUES (9, '超级管理员', 'super_admin', 1, 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
-- ----------------------------
-- Table structure for t_sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_role_menu`;
CREATE TABLE `t_sys_role_menu` (
`role_id` int(11) DEFAULT NULL COMMENT '角色ID',
`menu_id` int(11) DEFAULT NULL COMMENT '菜单ID',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统管理-角色菜单关联表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_sys_role_menu
-- ----------------------------
INSERT INTO `t_sys_role_menu` VALUES (1, 11, 1, '2020-11-08 16:55:12', 1, '2020-11-08 16:55:12', 1);
INSERT INTO `t_sys_role_menu` VALUES (1, 12, 1, '2020-11-08 16:55:12', 1, '2020-11-08 16:55:12', 1);
INSERT INTO `t_sys_role_menu` VALUES (1, 37, 1, '2020-11-08 16:55:12', 1, '2020-11-08 16:55:12', 1);
INSERT INTO `t_sys_role_menu` VALUES (1, 1, 1, '2020-11-08 16:55:12', 1, '2020-11-08 16:55:12', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 11, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 12, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 1, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 13, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 15, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 37, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 38, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 39, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 40, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 2, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 4, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 8, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 5, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 6, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 3, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 10, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 27, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 28, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 29, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 30, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 20, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 21, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 22, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 23, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 31, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 32, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 33, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 34, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 35, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
INSERT INTO `t_sys_role_menu` VALUES (9, 36, 1, '2020-12-06 01:06:26', 1, '2020-12-06 01:06:26', 1);
-- ----------------------------
-- Table structure for t_sys_role_menu_btn
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_role_menu_btn`;
CREATE TABLE `t_sys_role_menu_btn` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`role_id` int(11) DEFAULT NULL COMMENT '角色ID',
`menu_id` int(11) DEFAULT NULL COMMENT '菜单ID',
`btn_id` int(11) DEFAULT NULL COMMENT '按钮ID',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 819 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统管理-角色关联菜单按钮权限表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_sys_role_menu_btn
-- ----------------------------
INSERT INTO `t_sys_role_menu_btn` VALUES (685, 9, 14, 75, 1, '2020-09-10 22:59:23', 1, '2020-09-10 22:59:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (686, 9, 14, 76, 1, '2020-09-10 22:59:23', 1, '2020-09-10 22:59:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (687, 9, 14, 77, 1, '2020-09-10 22:59:23', 1, '2020-09-10 22:59:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (688, 9, 14, 78, 1, '2020-09-10 22:59:23', 1, '2020-09-10 22:59:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (689, 9, 14, 79, 1, '2020-09-10 22:59:23', 1, '2020-09-10 22:59:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (690, 9, 14, 80, 1, '2020-09-10 22:59:23', 1, '2020-09-10 22:59:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (691, 9, 14, 81, 1, '2020-09-10 22:59:23', 1, '2020-09-10 22:59:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (697, 9, 15, 75, 1, '2020-09-10 22:59:45', 1, '2020-09-10 22:59:45', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (698, 9, 16, 75, 1, '2020-09-10 22:59:51', 1, '2020-09-10 22:59:51', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (699, 9, 16, 76, 1, '2020-09-10 22:59:51', 1, '2020-09-10 22:59:51', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (700, 9, 16, 77, 1, '2020-09-10 22:59:51', 1, '2020-09-10 22:59:51', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (701, 9, 16, 78, 1, '2020-09-10 22:59:51', 1, '2020-09-10 22:59:51', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (702, 9, 16, 79, 1, '2020-09-10 22:59:51', 1, '2020-09-10 22:59:51', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (703, 9, 16, 80, 1, '2020-09-10 22:59:51', 1, '2020-09-10 22:59:51', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (704, 9, 16, 81, 1, '2020-09-10 22:59:51', 1, '2020-09-10 22:59:51', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (705, 9, 17, 78, 1, '2020-09-10 23:00:00', 1, '2020-09-10 23:00:00', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (706, 9, 17, 75, 1, '2020-09-10 23:00:00', 1, '2020-09-10 23:00:00', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (707, 9, 17, 77, 1, '2020-09-10 23:00:00', 1, '2020-09-10 23:00:00', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (708, 9, 17, 76, 1, '2020-09-10 23:00:00', 1, '2020-09-10 23:00:00', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (709, 9, 17, 80, 1, '2020-09-10 23:00:00', 1, '2020-09-10 23:00:00', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (710, 9, 18, 75, 1, '2020-09-10 23:00:08', 1, '2020-09-10 23:00:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (711, 9, 18, 76, 1, '2020-09-10 23:00:08', 1, '2020-09-10 23:00:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (712, 9, 18, 77, 1, '2020-09-10 23:00:08', 1, '2020-09-10 23:00:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (713, 9, 18, 78, 1, '2020-09-10 23:00:08', 1, '2020-09-10 23:00:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (714, 9, 18, 80, 1, '2020-09-10 23:00:08', 1, '2020-09-10 23:00:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (715, 9, 4, 78, 1, '2020-09-10 23:00:16', 1, '2020-09-10 23:00:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (716, 9, 4, 75, 1, '2020-09-10 23:00:16', 1, '2020-09-10 23:00:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (717, 9, 4, 76, 1, '2020-09-10 23:00:16', 1, '2020-09-10 23:00:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (718, 9, 4, 77, 1, '2020-09-10 23:00:16', 1, '2020-09-10 23:00:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (719, 9, 4, 96, 1, '2020-09-10 23:00:16', 1, '2020-09-10 23:00:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (720, 9, 4, 97, 1, '2020-09-10 23:00:16', 1, '2020-09-10 23:00:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (721, 9, 5, 78, 1, '2020-09-10 23:00:23', 1, '2020-09-10 23:00:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (722, 9, 5, 75, 1, '2020-09-10 23:00:23', 1, '2020-09-10 23:00:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (723, 9, 5, 79, 1, '2020-09-10 23:00:23', 1, '2020-09-10 23:00:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (724, 9, 5, 76, 1, '2020-09-10 23:00:23', 1, '2020-09-10 23:00:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (725, 9, 5, 77, 1, '2020-09-10 23:00:23', 1, '2020-09-10 23:00:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (726, 9, 5, 98, 1, '2020-09-10 23:00:23', 1, '2020-09-10 23:00:23', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (727, 9, 3, 75, 1, '2020-09-10 23:00:34', 1, '2020-09-10 23:00:34', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (728, 9, 3, 77, 1, '2020-09-10 23:00:34', 1, '2020-09-10 23:00:34', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (729, 9, 3, 115, 1, '2020-09-10 23:00:34', 1, '2020-09-10 23:00:34', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (730, 9, 3, 116, 1, '2020-09-10 23:00:34', 1, '2020-09-10 23:00:34', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (731, 9, 3, 81, 1, '2020-09-10 23:00:34', 1, '2020-09-10 23:00:34', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (732, 9, 3, 76, 1, '2020-09-10 23:00:34', 1, '2020-09-10 23:00:34', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (733, 9, 10, 75, 1, '2020-09-10 23:00:42', 1, '2020-09-10 23:00:42', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (734, 9, 10, 76, 1, '2020-09-10 23:00:42', 1, '2020-09-10 23:00:42', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (735, 9, 10, 77, 1, '2020-09-10 23:00:42', 1, '2020-09-10 23:00:42', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (736, 9, 29, 75, 1, '2020-09-10 23:00:49', 1, '2020-09-10 23:00:49', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (737, 9, 29, 76, 1, '2020-09-10 23:00:49', 1, '2020-09-10 23:00:49', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (738, 9, 29, 77, 1, '2020-09-10 23:00:49', 1, '2020-09-10 23:00:49', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (739, 9, 29, 78, 1, '2020-09-10 23:00:49', 1, '2020-09-10 23:00:49', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (740, 9, 29, 79, 1, '2020-09-10 23:00:49', 1, '2020-09-10 23:00:49', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (741, 9, 29, 80, 1, '2020-09-10 23:00:49', 1, '2020-09-10 23:00:49', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (742, 9, 29, 81, 1, '2020-09-10 23:00:49', 1, '2020-09-10 23:00:49', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (743, 9, 30, 78, 1, '2020-09-10 23:00:53', 1, '2020-09-10 23:00:53', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (744, 9, 30, 80, 1, '2020-09-10 23:00:53', 1, '2020-09-10 23:00:53', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (745, 9, 21, 75, 1, '2020-09-10 23:00:58', 1, '2020-09-10 23:00:58', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (746, 9, 21, 76, 1, '2020-09-10 23:00:58', 1, '2020-09-10 23:00:58', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (747, 9, 21, 77, 1, '2020-09-10 23:00:58', 1, '2020-09-10 23:00:58', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (748, 9, 21, 78, 1, '2020-09-10 23:00:58', 1, '2020-09-10 23:00:58', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (749, 9, 21, 80, 1, '2020-09-10 23:00:58', 1, '2020-09-10 23:00:58', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (750, 9, 21, 81, 1, '2020-09-10 23:00:58', 1, '2020-09-10 23:00:58', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (751, 9, 21, 79, 1, '2020-09-10 23:00:58', 1, '2020-09-10 23:00:58', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (752, 9, 22, 75, 1, '2020-09-10 23:01:04', 1, '2020-09-10 23:01:04', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (753, 9, 22, 76, 1, '2020-09-10 23:01:04', 1, '2020-09-10 23:01:04', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (754, 9, 22, 77, 1, '2020-09-10 23:01:04', 1, '2020-09-10 23:01:04', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (755, 9, 22, 78, 1, '2020-09-10 23:01:04', 1, '2020-09-10 23:01:04', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (756, 9, 22, 79, 1, '2020-09-10 23:01:04', 1, '2020-09-10 23:01:04', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (757, 9, 22, 80, 1, '2020-09-10 23:01:04', 1, '2020-09-10 23:01:04', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (758, 9, 22, 81, 1, '2020-09-10 23:01:04', 1, '2020-09-10 23:01:04', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (759, 9, 23, 75, 1, '2020-09-10 23:01:09', 1, '2020-09-10 23:01:09', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (760, 9, 23, 76, 1, '2020-09-10 23:01:09', 1, '2020-09-10 23:01:09', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (761, 9, 23, 77, 1, '2020-09-10 23:01:09', 1, '2020-09-10 23:01:09', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (762, 9, 23, 78, 1, '2020-09-10 23:01:09', 1, '2020-09-10 23:01:09', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (763, 9, 23, 79, 1, '2020-09-10 23:01:10', 1, '2020-09-10 23:01:10', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (764, 9, 23, 80, 1, '2020-09-10 23:01:10', 1, '2020-09-10 23:01:10', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (765, 9, 23, 81, 1, '2020-09-10 23:01:10', 1, '2020-09-10 23:01:10', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (766, 9, 32, 78, 1, '2020-09-10 23:01:16', 1, '2020-09-10 23:01:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (767, 9, 32, 79, 1, '2020-09-10 23:01:16', 1, '2020-09-10 23:01:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (768, 9, 32, 80, 1, '2020-09-10 23:01:16', 1, '2020-09-10 23:01:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (769, 9, 32, 75, 1, '2020-09-10 23:01:16', 1, '2020-09-10 23:01:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (770, 9, 32, 76, 1, '2020-09-10 23:01:16', 1, '2020-09-10 23:01:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (771, 9, 32, 77, 1, '2020-09-10 23:01:16', 1, '2020-09-10 23:01:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (772, 9, 32, 81, 1, '2020-09-10 23:01:16', 1, '2020-09-10 23:01:16', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (773, 9, 33, 180, 1, '2020-09-10 23:01:20', 1, '2020-09-10 23:01:20', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (774, 9, 34, 81, 1, '2020-09-10 23:01:27', 1, '2020-09-10 23:01:27', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (787, 9, 13, 75, 1, '2020-09-12 19:55:13', 1, '2020-09-12 19:55:13', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (788, 9, 13, 76, 1, '2020-09-12 19:55:13', 1, '2020-09-12 19:55:13', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (789, 9, 13, 77, 1, '2020-09-12 19:55:13', 1, '2020-09-12 19:55:13', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (790, 9, 13, 78, 1, '2020-09-12 19:55:13', 1, '2020-09-12 19:55:13', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (791, 9, 13, 80, 1, '2020-09-12 19:55:13', 1, '2020-09-12 19:55:13', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (792, 9, 36, 75, 1, '2020-10-25 13:46:59', 1, '2020-10-25 13:46:59', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (793, 9, 36, 76, 1, '2020-10-25 13:46:59', 1, '2020-10-25 13:46:59', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (794, 9, 36, 77, 1, '2020-10-25 13:46:59', 1, '2020-10-25 13:46:59', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (795, 9, 36, 78, 1, '2020-10-25 13:46:59', 1, '2020-10-25 13:46:59', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (796, 9, 36, 81, 1, '2020-10-25 13:46:59', 1, '2020-10-25 13:46:59', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (797, 9, 36, 92, 1, '2020-10-25 13:46:59', 1, '2020-10-25 13:46:59', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (798, 9, 37, 75, 1, '2020-11-02 20:50:44', 1, '2020-11-02 20:50:44', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (799, 9, 37, 78, 1, '2020-11-02 20:50:44', 1, '2020-11-02 20:50:44', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (800, 9, 37, 76, 1, '2020-11-02 20:50:44', 1, '2020-11-02 20:50:44', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (801, 9, 37, 77, 1, '2020-11-02 20:50:44', 1, '2020-11-02 20:50:44', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (802, 9, 37, 80, 1, '2020-11-02 20:50:44', 1, '2020-11-02 20:50:44', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (803, 1, 37, 75, 1, '2020-11-08 16:55:08', 1, '2020-11-08 16:55:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (804, 1, 37, 78, 1, '2020-11-08 16:55:08', 1, '2020-11-08 16:55:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (805, 1, 37, 76, 1, '2020-11-08 16:55:08', 1, '2020-11-08 16:55:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (806, 1, 37, 77, 1, '2020-11-08 16:55:08', 1, '2020-11-08 16:55:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (807, 1, 37, 80, 1, '2020-11-08 16:55:08', 1, '2020-11-08 16:55:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (808, 9, 38, 75, 1, '2020-11-14 14:49:08', 1, '2020-11-14 14:49:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (809, 9, 38, 77, 1, '2020-11-14 14:49:08', 1, '2020-11-14 14:49:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (810, 9, 38, 76, 1, '2020-11-14 14:49:08', 1, '2020-11-14 14:49:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (811, 9, 38, 78, 1, '2020-11-14 14:49:08', 1, '2020-11-14 14:49:08', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (812, 9, 39, 75, 1, '2020-11-14 18:07:32', 1, '2020-11-14 18:07:32', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (813, 9, 39, 76, 1, '2020-11-14 18:07:32', 1, '2020-11-14 18:07:32', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (814, 9, 39, 78, 1, '2020-11-14 18:07:32', 1, '2020-11-14 18:07:32', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (815, 9, 39, 77, 1, '2020-11-14 18:07:32', 1, '2020-11-14 18:07:32', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (816, 9, 40, 81, 1, '2020-11-14 18:07:37', 1, '2020-11-14 18:07:37', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (817, 9, 40, 82, 1, '2020-11-14 18:07:37', 1, '2020-11-14 18:07:37', 1);
INSERT INTO `t_sys_role_menu_btn` VALUES (818, 9, 40, 83, 1, '2020-11-14 18:07:37', 1, '2020-11-14 18:07:37', 1);
-- ----------------------------
-- Table structure for t_sys_user
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_user`;
CREATE TABLE `t_sys_user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '账号',
`password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录密码',
`nickname` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '昵称',
`sex` tinyint(2) NOT NULL DEFAULT 0 COMMENT '性别(0:未知 1:男 2:女)',
`phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '手机号码',
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮箱',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '头像',
`salt` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '盐值',
`token` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT 'token',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统管理 - 用户基础信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_sys_user
-- ----------------------------
INSERT INTO `t_sys_user` VALUES (1, 'admin', '49e61954990acbe3bdbdbe8f865f064a8ed4d77c', '郑清', 1, '15183303003', '10000@qq.com', 'http://oss.zhengqingya.com/%E7%BE%8E%E5%9B%BE13.png?e=1610879456&token=1v94f3iDKR4xON6gz6V2yFZ_tkG0Ujs6stsadNSg:hka7Un10NKozfKSxoW6_tmTh-uA=', 'JVjOIi6V4', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuaWNrbmFtZSI6IumDkea4hSIsImNsYXNzIjoiY2xhc3MgY29tLnpoZW5ncWluZy5jb21tb24ubW9kZWwuYm8uVXNlclRva2VuSW5mbyIsInVzZXJJZCI6IjEiLCJleHBpcmF0aW9uVGltZSI6IjE2MTA5NjIwMzgxNzMiLCJ1c2VybmFtZSI6ImFkbWluIn0.B-hSS1RCaHNijXaNDypR2K2cgE7b1olOdKjif6iwI3k', 1, '2020-08-22 15:01:51', 1, '2021-01-17 03:30:58', 1);
INSERT INTO `t_sys_user` VALUES (2, 'test', '49e61954990acbe3bdbdbe8f865f064a8ed4d77c', '测试号', 1, '', '', 'http://oss.zhengqingya.com/%E7%BE%8E%E5%9B%BE13.png?e=1607197731&token=1v94f3iDKR4xON6gz6V2yFZ_tkG0Ujs6stsadNSg:yOp5Kszk9OMHC6HJw0S7vKQqd4I=', 'JVjOIi6V4', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGFzcyI6ImNsYXNzIGNvbS56aGVuZ3FpbmcubW9kdWxlcy5jb21tb24ubW9kZWwuVXNlclRva2VuSW5mbyIsInVzZXJJZCI6IjIiLCJleHBpcmF0aW9uVGltZSI6IjE1OTc5NzE4OTI0ODgiLCJ1c2VybmFtZSI6InRlc3QifQ.rcCLCwYUkIV66d1eXFlYcXCm4_k3Ps9b_BPQCwVNj1U', 1, '2020-08-22 15:01:51', 1, '2020-12-06 02:48:53', 1);
-- ----------------------------
-- Table structure for t_sys_user_re_oauth
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_user_re_oauth`;
CREATE TABLE `t_sys_user_re_oauth` (
`user_re_oauth_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` int(11) NOT NULL COMMENT '用户id(关联表`t_sys_user`字段`user_id`)',
`open_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '三方id',
`oauth_type` tinyint(2) NOT NULL COMMENT '第三方授权类型',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`user_re_oauth_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统管理 - 用户三方授权表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for t_sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_user_role`;
CREATE TABLE `t_sys_user_role` (
`user_id` int(11) NOT NULL COMMENT '用户ID',
`role_ids` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '角色ID',
`create_by` int(11) NOT NULL COMMENT '创建人',
`create_time` datetime(0) NOT NULL COMMENT '创建时间',
`update_by` int(11) NOT NULL COMMENT '修改人',
`update_time` datetime(0) NOT NULL COMMENT '修改时间',
`is_valid` tinyint(2) NOT NULL DEFAULT 1 COMMENT '是否有效(1:有效 0:无效)',
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统管理-用户角色关联表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of t_sys_user_role
-- ----------------------------
INSERT INTO `t_sys_user_role` VALUES (1, '1,9', 1, '2020-08-22 15:01:51', 1, '2020-08-22 15:01:51', 1);
INSERT INTO `t_sys_user_role` VALUES (2, '1', 1, '2020-09-10 14:38:33', 1, '2020-09-10 14:38:33', 1);
INSERT INTO `t_sys_user_role` VALUES (3, '1', 1, '2020-11-29 15:23:44', 1, '2020-11-29 15:23:44', 1);
SET FOREIGN_KEY_CHECKS = 1;
Java
1
https://gitee.com/reno-day/small-tools.git
git@gitee.com:reno-day/small-tools.git
reno-day
small-tools
small-tools
master

搜索帮助