数据库准备

建立数据库 renren_fast ,然后运行renrenfast项目中的db文件夹内的脚本

-- 菜单
CREATE TABLE `sys_menu` (
`menu_id` bigint NOT NULL AUTO_INCREMENT,
`parent_id` bigint COMMENT '父菜单ID,一级菜单为0',
`name` varchar() COMMENT '菜单名称',
`url` varchar() COMMENT '菜单URL',
`perms` varchar() COMMENT '授权(多个用逗号分隔,如:user:list,user:create)',
`type` int COMMENT '类型 0:目录 1:菜单 2:按钮',
`icon` varchar() COMMENT '菜单图标',
`order_num` int COMMENT '排序',
PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='菜单管理'; -- 系统用户
CREATE TABLE `sys_user` (
`user_id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar() NOT NULL COMMENT '用户名',
`password` varchar() COMMENT '密码',
`salt` varchar() COMMENT '盐',
`email` varchar() COMMENT '邮箱',
`mobile` varchar() COMMENT '手机号',
`status` tinyint COMMENT '状态 0:禁用 1:正常',
`create_user_id` bigint() COMMENT '创建者ID',
`create_time` datetime COMMENT '创建时间',
PRIMARY KEY (`user_id`),
UNIQUE INDEX (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户'; -- 系统用户Token
CREATE TABLE `sys_user_token` (
`user_id` bigint() NOT NULL,
`token` varchar() NOT NULL COMMENT 'token',
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`user_id`),
UNIQUE KEY `token` (`token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户Token'; -- 系统验证码
CREATE TABLE `sys_captcha` (
`uuid` char() NOT NULL COMMENT 'uuid',
`code` varchar() NOT NULL COMMENT '验证码',
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统验证码'; -- 角色
CREATE TABLE `sys_role` (
`role_id` bigint NOT NULL AUTO_INCREMENT,
`role_name` varchar() COMMENT '角色名称',
`remark` varchar() COMMENT '备注',
`create_user_id` bigint() COMMENT '创建者ID',
`create_time` datetime COMMENT '创建时间',
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色'; -- 用户与角色对应关系
CREATE TABLE `sys_user_role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint COMMENT '用户ID',
`role_id` bigint COMMENT '角色ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户与角色对应关系'; -- 角色与菜单对应关系
CREATE TABLE `sys_role_menu` (
`id` bigint NOT NULL AUTO_INCREMENT,
`role_id` bigint COMMENT '角色ID',
`menu_id` bigint COMMENT '菜单ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色与菜单对应关系'; -- 系统配置信息
CREATE TABLE `sys_config` (
`id` bigint NOT NULL AUTO_INCREMENT,
`key` varchar() COMMENT 'key',
`value` varchar() COMMENT 'value',
`status` tinyint DEFAULT COMMENT '状态 0:隐藏 1:显示',
`remark` varchar() COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE INDEX (`key`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8 COMMENT='系统配置信息表'; -- 系统日志
CREATE TABLE `sys_log` (
`id` bigint() NOT NULL AUTO_INCREMENT,
`username` varchar() COMMENT '用户名',
`operation` varchar() COMMENT '用户操作',
`method` varchar() COMMENT '请求方法',
`params` varchar() COMMENT '请求参数',
`time` bigint NOT NULL COMMENT '执行时长(毫秒)',
`ip` varchar() COMMENT 'IP地址',
`create_date` datetime COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8 COMMENT='系统日志'; -- 初始数据
INSERT INTO `sys_user` (`user_id`, `username`, `password`, `salt`, `email`, `mobile`, `status`, `create_user_id`, `create_time`) VALUES ('', 'admin', '9ec9750e709431dad22365cabc5c625482e574c74adaebba7dd02f1129e4ce1d', 'YzcmCZNvbXocrsz9dm8e', 'root@renren.io', '', '', '', '2016-11-11 11:11:11');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '系统管理', NULL, NULL, '', 'fa fa-cog', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '管理员列表', 'modules/sys/user.html', NULL, '', 'fa fa-user', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '角色管理', 'modules/sys/role.html', NULL, '', 'fa fa-user-secret', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '菜单管理', 'modules/sys/menu.html', NULL, '', 'fa fa-th-list', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', 'SQL监控', 'druid/sql.html', NULL, '', 'fa fa-bug', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '查看', NULL, 'sys:user:list,sys:user:info', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '新增', NULL, 'sys:user:save,sys:role:select', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '修改', NULL, 'sys:user:update,sys:role:select', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '删除', NULL, 'sys:user:delete', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '查看', NULL, 'sys:role:list,sys:role:info', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '新增', NULL, 'sys:role:save,sys:menu:list', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '修改', NULL, 'sys:role:update,sys:menu:list', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '删除', NULL, 'sys:role:delete', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '查看', NULL, 'sys:menu:list,sys:menu:info', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '新增', NULL, 'sys:menu:save,sys:menu:select', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '修改', NULL, 'sys:menu:update,sys:menu:select', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '删除', NULL, 'sys:menu:delete', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '参数管理', 'modules/sys/config.html', 'sys:config:list,sys:config:info,sys:config:save,sys:config:update,sys:config:delete', '', 'fa fa-sun-o', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '系统日志', 'modules/sys/log.html', 'sys:log:list', '', 'fa fa-file-text-o', ''); -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 云存储服务相关SQL,如果不使用该功能,则不用执行下面SQL -------------------------------------------------------------------------------------------------------------
-- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- 文件上传
CREATE TABLE `sys_oss` (
`id` bigint() NOT NULL AUTO_INCREMENT,
`url` varchar() COMMENT 'URL地址',
`create_date` datetime COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=`InnoDB` DEFAULT CHARACTER SET utf8 COMMENT='文件上传'; INSERT INTO `sys_config` (`key`, `value`, `status`, `remark`) VALUES ('CLOUD_STORAGE_CONFIG_KEY', '{\"aliyunAccessKeyId\":\"\",\"aliyunAccessKeySecret\":\"\",\"aliyunBucketName\":\"\",\"aliyunDomain\":\"\",\"aliyunEndPoint\":\"\",\"aliyunPrefix\":\"\",\"qcloudBucketName\":\"\",\"qcloudDomain\":\"\",\"qcloudPrefix\":\"\",\"qcloudSecretId\":\"\",\"qcloudSecretKey\":\"\",\"qiniuAccessKey\":\"NrgMfABZxWLo5B-YYSjoE8-AZ1EISdi1Z3ubLOeZ\",\"qiniuBucketName\":\"ios-app\",\"qiniuDomain\":\"http://7xqbwh.dl1.z0.glb.clouddn.com\",\"qiniuPrefix\":\"upload\",\"qiniuSecretKey\":\"uIwJHevMRWU0VLxFvgy0tAcOdGqasdtVlJkdy6vV\",\"type\":1}', '', '云存储配置信息');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '文件上传', 'modules/oss/oss.html', 'sys:oss:all', '', 'fa fa-file-image-o', ''); -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- APP接口相关SQL,如果不使用该功能,则不用执行下面SQL -------------------------------------------------------------------------------------------------------------
-- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- 用户表
CREATE TABLE `tb_user` (
`user_id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar() NOT NULL COMMENT '用户名',
`mobile` varchar() NOT NULL COMMENT '手机号',
`password` varchar() COMMENT '密码',
`create_time` datetime COMMENT '创建时间',
PRIMARY KEY (`user_id`),
UNIQUE INDEX (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户'; -- 账号: 密码:admin
INSERT INTO `tb_user` (`username`, `mobile`, `password`, `create_time`) VALUES ('mark', '', '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', '2017-03-23 22:37:41'); -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 定时任务相关表结构,如果不使用该功能,则不用执行下面SQL -------------------------------------------------------------------------------------------------------------
-- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- 初始化菜单数据
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '定时任务', 'modules/job/schedule.html', NULL, '', 'fa fa-tasks', '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '查看', NULL, 'sys:schedule:list,sys:schedule:info', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '新增', NULL, 'sys:schedule:save', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '修改', NULL, 'sys:schedule:update', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '删除', NULL, 'sys:schedule:delete', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '暂停', NULL, 'sys:schedule:pause', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '恢复', NULL, 'sys:schedule:resume', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '立即执行', NULL, 'sys:schedule:run', '', NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) VALUES ('', '', '日志列表', NULL, 'sys:schedule:log', '', NULL, ''); -- 定时任务
CREATE TABLE `schedule_job` (
`job_id` bigint() NOT NULL AUTO_INCREMENT COMMENT '任务id',
`bean_name` varchar() DEFAULT NULL COMMENT 'spring bean名称',
`method_name` varchar() DEFAULT NULL COMMENT '方法名',
`params` varchar() DEFAULT NULL COMMENT '参数',
`cron_expression` varchar() DEFAULT NULL COMMENT 'cron表达式',
`status` tinyint() DEFAULT NULL COMMENT '任务状态 0:正常 1:暂停',
`remark` varchar() DEFAULT NULL COMMENT '备注',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`job_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定时任务'; -- 定时任务日志
CREATE TABLE `schedule_job_log` (
`log_id` bigint() NOT NULL AUTO_INCREMENT COMMENT '任务日志id',
`job_id` bigint() NOT NULL COMMENT '任务id',
`bean_name` varchar() DEFAULT NULL COMMENT 'spring bean名称',
`method_name` varchar() DEFAULT NULL COMMENT '方法名',
`params` varchar() DEFAULT NULL COMMENT '参数',
`status` tinyint() NOT NULL COMMENT '任务状态 0:成功 1:失败',
`error` varchar() DEFAULT NULL COMMENT '失败信息',
`times` int() NOT NULL COMMENT '耗时(单位:毫秒)',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`log_id`),
KEY `job_id` (`job_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定时任务日志'; INSERT INTO `schedule_job` (`bean_name`, `method_name`, `params`, `cron_expression`, `status`, `remark`, `create_time`) VALUES ('testTask', 'test', 'renren', '0 0/30 * * * ?', '', '有参数测试', '2016-12-01 23:16:46');
INSERT INTO `schedule_job` (`bean_name`, `method_name`, `params`, `cron_expression`, `status`, `remark`, `create_time`) VALUES ('testTask', 'test2', NULL, '0 0/30 * * * ?', '', '无参数测试', '2016-12-03 14:55:56'); -- quartz自带表结构
CREATE TABLE QRTZ_JOB_DETAILS(
SCHED_NAME VARCHAR() NOT NULL,
JOB_NAME VARCHAR() NOT NULL,
JOB_GROUP VARCHAR() NOT NULL,
DESCRIPTION VARCHAR() NULL,
JOB_CLASS_NAME VARCHAR() NOT NULL,
IS_DURABLE VARCHAR() NOT NULL,
IS_NONCONCURRENT VARCHAR() NOT NULL,
IS_UPDATE_DATA VARCHAR() NOT NULL,
REQUESTS_RECOVERY VARCHAR() NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
JOB_NAME VARCHAR() NOT NULL,
JOB_GROUP VARCHAR() NOT NULL,
DESCRIPTION VARCHAR() NULL,
NEXT_FIRE_TIME BIGINT() NULL,
PREV_FIRE_TIME BIGINT() NULL,
PRIORITY INTEGER NULL,
TRIGGER_STATE VARCHAR() NOT NULL,
TRIGGER_TYPE VARCHAR() NOT NULL,
START_TIME BIGINT() NOT NULL,
END_TIME BIGINT() NULL,
CALENDAR_NAME VARCHAR() NULL,
MISFIRE_INSTR SMALLINT() NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
REPEAT_COUNT BIGINT() NOT NULL,
REPEAT_INTERVAL BIGINT() NOT NULL,
TIMES_TRIGGERED BIGINT() NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_CRON_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
CRON_EXPRESSION VARCHAR() NOT NULL,
TIME_ZONE_ID VARCHAR(),
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_SIMPROP_TRIGGERS
(
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
STR_PROP_1 VARCHAR() NULL,
STR_PROP_2 VARCHAR() NULL,
STR_PROP_3 VARCHAR() NULL,
INT_PROP_1 INT NULL,
INT_PROP_2 INT NULL,
LONG_PROP_1 BIGINT NULL,
LONG_PROP_2 BIGINT NULL,
DEC_PROP_1 NUMERIC(,) NULL,
DEC_PROP_2 NUMERIC(,) NULL,
BOOL_PROP_1 VARCHAR() NULL,
BOOL_PROP_2 VARCHAR() NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_BLOB_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
BLOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_CALENDARS (
SCHED_NAME VARCHAR() NOT NULL,
CALENDAR_NAME VARCHAR() NOT NULL,
CALENDAR BLOB NOT NULL,
PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
SCHED_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_FIRED_TRIGGERS (
SCHED_NAME VARCHAR() NOT NULL,
ENTRY_ID VARCHAR() NOT NULL,
TRIGGER_NAME VARCHAR() NOT NULL,
TRIGGER_GROUP VARCHAR() NOT NULL,
INSTANCE_NAME VARCHAR() NOT NULL,
FIRED_TIME BIGINT() NOT NULL,
SCHED_TIME BIGINT() NOT NULL,
PRIORITY INTEGER NOT NULL,
STATE VARCHAR() NOT NULL,
JOB_NAME VARCHAR() NULL,
JOB_GROUP VARCHAR() NULL,
IS_NONCONCURRENT VARCHAR() NULL,
REQUESTS_RECOVERY VARCHAR() NULL,
PRIMARY KEY (SCHED_NAME,ENTRY_ID))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_SCHEDULER_STATE (
SCHED_NAME VARCHAR() NOT NULL,
INSTANCE_NAME VARCHAR() NOT NULL,
LAST_CHECKIN_TIME BIGINT() NOT NULL,
CHECKIN_INTERVAL BIGINT() NOT NULL,
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE QRTZ_LOCKS (
SCHED_NAME VARCHAR() NOT NULL,
LOCK_NAME VARCHAR() NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME))
ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);
CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);
CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);

后端项目

后端项目为开源项目renren-fast
使用到的技术有:SpringBoot,Shiro,Redis,SSM,Swagger,JWT

单点登录:只需登录微服务的任一节点,访问其它微服务节点时便无需再重复登录。
JWT:不在session里面保存认证与授权信息,而是保存在客户端浏览器上,访问某个节点时发送认证信息,后端认证令牌信息成功后就认为登录成功了。

后端项目部署

  1. 后端项目网址下载项目,并导入到Eclipse当中,具体流程参加官方文档

    注意后端项目是SpringBoot项目,需要在Eclipse中安装Spring Tools插件
  2. 修改 application-dev.yml 的数据库配置,连接之前配好的数据库集群的虚拟IP:

                first:  #数据源1
    url: jdbc:mysql://192.168.63.160:3306/renren_fast?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: abc
    second: #数据源2
    url: jdbc:mysql://192.168.63.160:3306/renren_fast?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: abc
  3. 修改 application.yml 文件中的redis配置,连接之前配好的Redis集群:

        redis:
    open: false # 是否开启redis缓存 true开启 false关闭
    database:
    # host: localhost
    # port:
    # password: Nannan2017JK # 密码(默认为空)
    timeout: # 连接超时时长(毫秒) cluster:
    nodes:
    - 192.168.63.144:
    - 192.168.63.144:
    - 192.168.63.144:
    - 192.168.63.144:
    - 192.168.63.144:
    - 192.168.63.144:
  4. 修改 application.yml 中的项目端口号为6001:

    将来项目要部署到Docker容器中,而Docker内部的网络是不允许跨网段访问的,所以后端项目容器要连接到Docker的host网络,使用宿主机IP。为了避免端口冲突,需要修改端口号。
    # Tomcat
    server:
    tomcat:
    uri-encoding: UTF-
    max-threads:
    min-spare-threads:
    port:
    connection-timeout:
    servlet:
    context-path: /renren-fast
  5. 后端项目使用Maven管理项目,在项目根目录使用如下命令打包:
    renren-fast包含了tomcat.jar文件,所以工程打包成JAR文件就能独立运行

    进入renren-fast目录,执行mvn命令

    mvn clean install -Dmaven.test.skep=true # 跳过测试代码
    # clean :表示清除之前的JAR文件;
    # install :意味着打包到本地;
    # -Dmaven.test.skip=true :代表跳过测试代码

    打包成功后,会在项目根目录的 target 文件夹下生成 renren-fast.jar

  6. 创建Docker卷 j1 ,并将 renren-fast.jar 复制到该目录下,用来在容器中启动该Jar包
    docker volume create j1
    ls /var/lib/docker/volumes/j1/_data
    renren-fast.jar
  7. 后端Jar包运行需要Java环境,从Docker仓库拉下java镜像,然后执行如下指令创建容器:

    docker run -it -d -v j1:/home/soft --net=host --name j1 java
  8. 进入j1容器Jar包所在目录,执行如下命令使后端项目在关闭终端时不挂断(nohup)并且在后台运行(&):

    docker exec -it j1 bash
    cd /home/soft
    nohup java -jar renren-fast.jar &

    项目启动成功后便可以通过 http://192.168.63.144:6001/renren-fast/swagger/index.html 来测试后端接口

    我的Jar包启动时报如下错误:Couldn't get host name! [See nested exception: java.net.UnknownHostException: wayne: wayne:]
    解决办法是进入容器,在/etc/hosts文件中添加一行127.0.0. wayne

  9. 创建负载站点

    按照上述方法再在Docker中部署j2(端口6002),j3(端口6003)两个后台项目容器

    注意:要修改tomcat配置端口,打包

    docker volume create j2
    ls /var/lib/docker/volumes/j2/_data
    renren-fast.jar
    docker run -it -d -v j2:/home/soft --net=host --name j2 java
    docker exec -it j2 bash
    cd /home/soft
    nohup java -jar renren-fast.jar & docker volume create j3
    ls /var/lib/docker/volumes/j3/_data
    renren-fast.jar
    docker run -it -d -v j3:/home/soft --net=host --name j3 java
    docker exec -it j3 bash
    cd /home/soft
    nohup java -jar renren-fast.jar &

Nginx负载均衡

Nginx是性能非常出色的反向代理服务器,最大可以支持8万/秒的并发访问

  1. 拉取Nginx镜像

    docker pull nginx
  2. 创建n1目录

    mkdir /home/n1

    上传Nginx配置文件  nginx.conf 相关参数

    user  nginx;
    worker_processes ; error_log /var/log/nginx/error.log warn;
    pid /var/run/nginx.pid; events {
    worker_connections ;
    } http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on;
    #tcp_nopush on; keepalive_timeout ; #gzip on; proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 5s;
    proxy_send_timeout 5s;
    proxy_read_timeout 5s;
    proxy_buffer_size 4k;
    proxy_buffers 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k; upstream tomcat {
    server 192.168.63.144:6001;
    server 192.168.63.144:6002;
    server 192.168.63.144:6003;
    }
    server {
    listen 6101;
    server_name 192.168.63.144;
    location / {
    proxy_pass http://tomcat;
    index index.html index.htm;
    } }
    }
  3. 启动Nginx容器:

    # 需要加上--privileged参数,使keepalived能在宿主机网卡注册虚拟IP
    docker run -it -d -v /home/n1/nginx.conf:/etc/nginx/nginx.conf --net=host --name n1 --privileged nginx
  4. 按照上述操作再创建一个nginx节点6102端口
    mkdir /home/n2
    # 拷贝配置文件
    # 需要加上--privileged参数,使keepalived能在宿主机网卡注册虚拟IP
    docker run -it -d -v /home/n2/nginx.conf:/etc/nginx/nginx.conf --net=host --name n2 --privileged nginx

Nginx双机热备

参考之前Haproxy双机热备的方案,仍然采用Keepalived和虚拟IP技术。建立两个Nginx容器并各自安装Keepalived,映射到同一宿主机虚拟IP上

下面是keepalived配置文件示例:

docker exec -it n1 bash
apt-get update
apt-get install keepalived
apt-get install vim
vim /etc/keepalived/keepalived.conf
# 配置keepalived.conf文件
service keepalived start
exit
ping 192.168.63.151 docker exec -it n2 bash
apt-get update
apt-get install keepalived
apt-get install vim
vim /etc/keepalived/keepalived.conf
# 配置keepalived.conf文件
service keepalived start
exit
ping 192.168.63.151

n1的keepalived.conf文件:

vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.63.151
}
}
virtual_server 192.168.63.151 {
delay_loop
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP
real_server 192.168.63.144 6101 {
weight
}
}

n2的keepalived.conf文件:

vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.63.151
}
}
virtual_server 192.168.63.151 {
delay_loop
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP
real_server 192.168.63.144 {
weight
}
}

然后能成功访问http://192.168.63.151:6201/renren-fast/swagger/index.html即代表成功

Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡的更多相关文章

  1. Docker环境下的前后端分离项目部署与运维

    本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...

  2. Docker环境下的前后端分离项目部署与运维(七)Redis高速缓存

    Redis高速缓存 利用内存保存数据,读写速度远超硬盘:可以减少I/O操作,降低I/O压力. 发红包.抢红包的数据可以存在高速缓存中,加快处理速度,不需要经过数据库 淘宝首页一些优惠活动商品等热数据可 ...

  3. Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...

  4. Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术

    Docker Swarm技术 docker swarm技术(之前的docker集群都是在 一个虚拟主机上的,但是如果这个主机挂掉了over了,docker技术就是多个虚拟主机形成一个集群) Swarm ...

  5. Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker

    安装 docker hub地址:https://hub.docker.com/r/portainer/portainer/ # 每台服务器都要安装 docker pull portainer/port ...

  6. Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群

    下载RabbitMQ镜像 镜像地址RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq 安装命令安装之前,切记把Docker Hub设置为 ...

  7. docker环境下solrcloud+zookeeper集群部署教程

    前言:两个月前的16年11月份完成的配置,使用的solr6.1和zookeeper3.4,刚刚写成blog,目前版本可能有小版本的变化. 本例完成结果为:在docker环境下部署solrcloud集群 ...

  8. Mac+Docker环境下xdebug的配置

    由于容器化的需要,前几天我本地也换成了docker环境.就研究了一下docker环境下phpstorm和xdebug的配置. http://www.mmfei.com/?p=453 这个博客给出了一个 ...

  9. Docker环境下的Mysql8 实现主从数据库数据同步方案

    本文记录下通过MySQL Replication在Docker环境下,通过多个容器 实现数据库主从配置. MySQL Replication就不多解释了,简单说就是MySQL非常出色的一个功能,该功能 ...

随机推荐

  1. How to get the free disk space in PostgreSQL (PostgreSQL获取磁盘空间)

    Get the current free disk space in PostgreSQL PostgreSQL获取磁盘空间 from eshizhan Here has a simple way t ...

  2. 【问题记录】ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    一.问题描述 环境:MySQL 8.0 + Windows 由于密码错误或者其他原因导致无法连上MySQL服务,如下图: 二.解决方案 解决该问题的具体步骤如下: 1.关闭MySQL服务 以管理员权限 ...

  3. C# 操作LDAP

    C# 操作LDAP查找组或人员信息 using System; using System.Collections.Generic; using System.Linq; using System.We ...

  4. Kafka producer异步发送在某些情况会阻塞主线程,使用时候慎重

    最近发现一个Kafka producer异步发送在某些情况会阻塞主线程,后来在排查解决问题过程中发现这可以算是Kafka的一个说明不恰当的地方. 问题说明 在很多场景下我们会使用异步方式来发送Kafk ...

  5. vscode+flutter+win10搭建问题记录

    1.下载安装vscode.flutter sdk.安装vscode相关插件.android sdk,这些网上有教程,比如https://blog.csdn.net/SVNzK/article/deta ...

  6. 简述Linux开机启动流程

    计算机开机是一个神秘的过程.我们只是按了开机键,就看到屏幕上的进度条或者一行行的输出,直到我们到达登录界面.然而,计算机开机又是个异常脆弱的过程,我们满心期望的登录界面可能并不会出现,而是一个命令行或 ...

  7. riscv 汇编与反汇编

    为了riscv指令集,我们需要汇编与反汇编工具来分析指令格式. 可以用下面的两个工具来汇编和反汇编,下载链接:https://pan.baidu.com/s/1eUbBlVc riscv-none-e ...

  8. iOS编程

    一.语法 1. performSelector 2.

  9. 七月伊始 LeetCode算法总结

    七月伊始 早上买了LeetCode的课程,解锁了付费题目,付费倒逼学习: 意识到这么久学习的东西,都是写在自己的笔记, 如今希望自己能够用自己拙笔记录这个学习和总结的过程. 队列的学习 设计循环队列 ...

  10. pip requirements.txt

    生成文件 pip freeze > requirements.txt 依赖库会导到于requirements.txt 比如:   image.png 从requirements.txt安装依赖库 ...