请问项目首次启动会直接创建数据库表是怎么做到的

avatar

请问项目pybbs首次启动会直接创建数据库表是怎么做到的?
用的什么技术原理?有没有教程或文档什么的?

12 条评论
avatar
tomoya92 发布于 1 年前
  0  

你看看 DataSourceHelper 这个类就明白了

avatar
Liuguozhu 发布于 1 年前
  0  

@tomoya92
1.可是我新建了个项目,用这个类,
如果数据库不存在就启动不了,直接报错;
数据库存的话会创建一个表flyway_schema_history然后也报错:No timezone mapping entry for 'GMT 8',把GMT 8改成UTC才不报错;
2.创建完库,那table呢?创建table是用的啥? 要事先导出已存在table的frm文件和ibd文件放入项目中么?

avatar
tomoya92 发布于 1 年前
  0  

@Liuguozhu 创建完库,表是使用flyway创建的,个人建议如果你开发项目不是开源给大家用的话,就按默认的方式开发即可,自己手动创建好数据库表,不要用pybbs里的这种方式

avatar
Liuguozhu 发布于 1 年前
  0  

@tomoya92 想学习一下,也开源一个3年前写的一个服务器监控项目

avatar
tomoya92 发布于 1 年前
  0  

@Liuguozhu 👍 如果你想折腾的话,建议看一下我这篇博客 https://tomoya92.github.io/2019/01/03/spring-boot-flyway-mybatis-plus/

avatar
Liuguozhu 发布于 1 年前
  0  

@tomoya92 好的,谢谢老师

avatar
Liuguozhu 发布于 1 年前
  0  

@tomoya92 我照着pybbs项目整的,结果创建了4个table就报错:Table 'flyway_schema_history' was not locked with LOCK TABLES,一直找不到是哪里锁的表。朋也老师有遇到过这种情况么?

avatar
tomoya92 发布于 1 年前
  0  

@Liuguozhu

PS:我不是老师,就是个苦逼的码农

你这是不是sql的问题,前面执行的sql运行了 lock table 后面没有 unlock table

参考一下这篇文章 https://stackoverflow.com/questions/36467298/mysql-table-my-table-was-not-locked-with-lock-tables

avatar
Liuguozhu 发布于 1 年前
  0  

我搜了,lock和unlock都是成对出现的

avatar
Liuguozhu 发布于 1 年前
  0  

Dump of table admin_user

------------------------------------------------------------

DROP TABLE IF EXISTS admin_user;

CREATE TABLE admin_user (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(255) NOT NULL DEFAULT '',
password varchar(255) NOT NULL DEFAULT '',
in_time datetime NOT NULL,
role_id int(11) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY username (username),
KEY role_id (role_id),
CONSTRAINT admin_user_ibfk_1 FOREIGN KEY (role_id) REFERENCES role (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES admin_user WRITE;
/*!40000 ALTER TABLE admin_user DISABLE KEYS */;

INSERT INTO admin_user (id, username, password, in_time, role_id)
VALUES
(1,'admin','$2a$10$0F6RXnrQDF8SsOudYk7uhuWlqq3kjPuPm4UGeDCj0gvO8xj2pbZ4y','2019-06-20 11:11:11',1);

/*!40000 ALTER TABLE admin_user ENABLE KEYS */;
UNLOCK TABLES;

Dump of table code

------------------------------------------------------------

DROP TABLE IF EXISTS code;

CREATE TABLE code (
id int(11) NOT NULL AUTO_INCREMENT,
user_id int(11) NOT NULL,
code varchar(255) NOT NULL DEFAULT '',
in_time datetime NOT NULL,
expire_time datetime NOT NULL,
email varchar(255) NOT NULL DEFAULT '',
used bit(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (id),
UNIQUE KEY code (code),
KEY user_id (user_id),
CONSTRAINT code_ibfk_1 FOREIGN KEY (user_id) REFERENCES user (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Dump of table permission

------------------------------------------------------------

DROP TABLE IF EXISTS permission;

CREATE TABLE permission (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL DEFAULT '',
value varchar(255) NOT NULL DEFAULT '',
pid int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (id),
UNIQUE KEY name (name),
UNIQUE KEY value (value)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES permission WRITE;
/*!40000 ALTER TABLE permission DISABLE KEYS */;

INSERT INTO permission (id, name, value, pid)
VALUES
(1, '首页', 'index', 0),
(6, '验证码', 'code', 0),
(8, '权限', 'permission', 0),
(9, '系统', 'system', 0),
(10, '后台用户', 'admin_user', 0),
(11, '仪表盘', 'index:index', 1),
(25, '验证码列表', 'code:list', 6),
(30, '权限列表', 'permission:list', 8),
(31, '权限编辑', 'permission:edit', 8),
(32, '权限删除', 'permission:delete', 8),
(33, '角色', 'role', 0),
(34, '日志', 'log', 0),
(35, '角色列表', 'role:list', 33),
(36, '角色编辑', 'role:edit', 33),
(37, '角色删除', 'role:delete', 33),
(38, '系统设置', 'system:edit', 9),
(39, '后台用户列表', 'admin_user:list', 10),
(40, '后台用户编辑', 'admin_user:edit', 10),
(41, '后台用户创建', 'admin_user:add', 10),
(42, '日志列表', 'log:list', 34),
(44, '权限添加', 'permission:add', 8),

/*!40000 ALTER TABLE permission ENABLE KEYS */;
UNLOCK TABLES;

Dump of table role

------------------------------------------------------------

DROP TABLE IF EXISTS role;

CREATE TABLE role (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (id),
UNIQUE KEY name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES role WRITE;
/*!40000 ALTER TABLE role DISABLE KEYS */;

INSERT INTO role (id, name)
VALUES
(2,'审核员'),
(1,'超级管理员');

/*!40000 ALTER TABLE role ENABLE KEYS */;
UNLOCK TABLES;

Dump of table role_permission

------------------------------------------------------------

DROP TABLE IF EXISTS role_permission;

CREATE TABLE role_permission (
role_id int(11) NOT NULL,
permission_id int(11) NOT NULL,
KEY role_id (role_id),
KEY permission_id (permission_id),
CONSTRAINT role_permission_ibfk_1 FOREIGN KEY (role_id) REFERENCES role (id),
CONSTRAINT role_permission_ibfk_2 FOREIGN KEY (permission_id) REFERENCES permission (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES role_permission WRITE;
/*!40000 ALTER TABLE role_permission DISABLE KEYS */;

INSERT INTO role_permission (role_id, permission_id)
VALUES
(2, 11),
(1, 11),
(1, 45),
(1, 46),
(1, 48),
(1, 49),
(1, 43),
(1, 25),
(1, 30),
(1, 31),
(1, 32),
(1, 44),
(1, 38),
(1, 39),
(1, 40),
(1, 41),
(1, 35),
(1, 36),
(1, 37),
(1, 42);

/*!40000 ALTER TABLE role_permission ENABLE KEYS */;
UNLOCK TABLES;

Dump of table system_config

------------------------------------------------------------

DROP TABLE IF EXISTS system_config;

CREATE TABLE system_config (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
key varchar(255) DEFAULT NULL,
value varchar(255) DEFAULT NULL,
description varchar(1000) NOT NULL,
pid int(11) NOT NULL DEFAULT '0',
type varchar(255) DEFAULT '',
option varchar(255) DEFAULT NULL,
reboot int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES system_config WRITE;
/*!40000 ALTER TABLE system_config DISABLE KEYS */;

INSERT INTO system_config (id, key, value, description, pid, type, option, reboot)
VALUES
(23, NULL, NULL, '基础配置', 0, NULL, NULL, 0),
(24, NULL, NULL, '邮箱配置', 0, NULL, NULL, 0),
(25, NULL, NULL, '上传配置', 0, NULL, NULL, 0),
(27, NULL, NULL, 'Redis配置', 0, NULL, NULL, 0),
(35, NULL, NULL, 'Elasticsearch配置', 0, NULL, NULL, 0),
(40, NULL, NULL, 'Github登录配置,<a href="https://github.com/settings/developers" target="_blank">申请地址</a>', 0, '', NULL, 0),
(45, NULL, NULL, 'WebSocket,开启后可不用刷新页面接收页面消息', 0, '', NULL, 0),
(1, 'admin_remember_me_max_age', '30', '登录后台记住我功能记住时间,单位:天', 23, 'number', NULL, 1),
(2, 'base_url', 'http://localhost:8080', '网站部署后访问的域名,注意这个后面没有 "/"', 23, 'url', NULL, 0),
(4, 'cookie_domain', 'localhost', '存cookie时用到的域名,要与网站部署后访问的域名一致', 23, 'text', NULL, 0),
(5, 'cookie_max_age', '604800', 'cookie有效期,单位秒,默认1周', 23, 'number', NULL, 0),
(6, 'cookie_name', 'user_token', '存cookie时用到的名称', 23, 'text', NULL, 0),
(11, 'intro', '<h5>基于Java写的服务器监控</h5><p>在这里,您可以配置需要监控的服务,以及用于通知的方式,接收服务异常通知的人员!</p>', '项目介绍', 23, 'text', NULL, 0),
(15, 'name', 'monitor控制台', '站点名称', 23, 'text', NULL, 0),
(16, 'page_size', '20', '分页每页条数', 23, 'number', NULL, 0),
(39, 'search', '0', '是否开启搜索功能(如果开启,需要额外启动一个ES服务,并填好ES相关的配置)', 35, 'radio', NULL, 0),
(12, 'mail_host', 'smtp.qq.com', '邮箱的smtp服务器地址', 24, 'text', NULL, 0),
(13, 'mail_password', '', '发送邮件的邮箱密码', 24, 'password', NULL, 0),
(14, 'mail_username', 'xxoo@qq.com', '发送邮件的邮箱地址', 24, 'email', NULL, 0),
(18, 'static_url', 'http://localhost:8080/static/upload/', '静态文件访问地址,主要用于上传图片的访问,注意最后有个"/"', 25, 'url', NULL, 0),
(20, 'upload_avatar_size_limit', '2', '上传头像文件大小,单位MB,默认2MB', 25, 'number', NULL, 0),
(21, 'upload_path', '/Users/hh/git/github/pybbs/static/upload/', '上传文件的路径,注意最后有个"/"', 25, 'text', NULL, 0),
(29, 'redis_host', '', 'redis服务host地址', 27, 'text', NULL, 0),
(30, 'redis_port', '', 'redis服务端口(默认: 6379)', 27, 'number', NULL, 0),
(31, 'redis_password', '', 'redis服务密码', 27, 'password', NULL, 0),
(32, 'redis_timeout', '2000', '网站连接redis服务超时时间,单位毫秒', 27, 'number', NULL, 0),
(33, 'redis_database', '0', '网站连接redis服务的哪个数据库,默认0号数据库,取值范围0-15', 27, 'number', NULL, 0),
(34, 'redis_ssl', '0', 'redis服务是否开启认证连接', 27, 'radio', NULL, 0),
(36, 'elasticsearch_host', '', 'elasticsearch服务的地址', 35, 'text', NULL, 0),
(37, 'elasticsearch_port', '', 'elasticsearch服务的http端口', 35, 'number', NULL, 0),
(38, 'elasticsearch_index', '', '索引的名字', 35, 'text', NULL, 0),
(41, 'oauth_github_client_id', '', 'Github登录配置项ClientId', 40, 'text', NULL, 0),
(42, 'oauth_github_client_secret', '', 'Github登录配置项ClientSecret', 40, 'text', NULL, 0),
(43, 'oauth_github_callback_url', '', 'Github登录配置项回调地址', 40, 'url', NULL, 0),
(17, 'websocket', '0', '是否开启websocket功能', 45, 'radio', NULL, 1),
(46, 'websocket_host', '', 'websocket服务的主机名,这个跟cookie的域名设置成一样的就可以了', 45, 'text', NULL, 1),
(47, 'websocket_port', '', 'websocket服务的端口,不能跟论坛服务端口一样,其它随便设置', 45, 'number', NULL, 1),
(48, 'theme', 'default', '系统主题', 23, 'select', 'default', 0);

/*!40000 ALTER TABLE system_config ENABLE KEYS */;
UNLOCK TABLES;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES /;
/
!40101 SET SQL_MODE=@OLD_SQL_MODE /;
/
!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS /;
/
!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT /;
/
!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS /;
/
!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

avatar
tomoya92 发布于 1 年前
  0  

@Liuguozhu 这我也不清楚了。。

avatar
Liuguozhu 发布于 1 年前
  0  

好了,是sql的问题,上面的sql是从pybbs中直接拷过来手动修改的;
我重新从数据库中导出了这几个table的sql结构和数据就没问题了;
不能手动修改sql,哈哈

添加一条评论 请尽量发布对他人有帮助的评论

登录后可发布评论

登录 | Github登录