数据库规划

由于CabloyJS内置三个运行环境,因此,我们需要对不同的运行环境配置不同的MySQL参数。在介绍MySQL参数配置之前,我们还需要先介绍一个数据库规划的概念

为了进一步优化日常的开发体验,提升开发效率,CabloyJS定义了一个数据库规划的概念,具体如下:

1. 测试环境

测试环境不必指定数据库名称,而是由系统自动创建测试数据库。每当执行单元测试时,总是删除旧的测试数据库,然后创建一个新的测试数据库

  1. 1# 重建数据库 + 单元测试
  2. 2$ npm run test:backend
  3. 3# 或者
  4. 4# 仅重建数据库
  5. 5$ npm run db:reset

比如,项目的名称是cabloy-demo,当执行单元测试时,系统会自动创建一个测试数据库,数据库名称为egg-born-test-cabloy-demo-20210703-110520

  • 这样设计的好处:在项目的开发迭代当中,难免会频繁的修改数据库架构。那么一般的做法是,打开数据库管理工具进行手工修改。在CabloyJS中,只需要在模块的Bean组件version.manager中编写变更逻辑,然后执行一遍单元测试就生效了。换句话说,在CabloyJS开发当中,很少用到数据库管理工具

  • 有人会问一个问题:如果执行单元测试会重新创建一个新的数据库,那么之前的测试数据是不是又需要重新手工输入一遍?

    • 针对这个问题,CabloyJS也提出了相应的解决方案:就是在模块的Bean组件version.manager中直接编写测试数据的初始化逻辑。每当创建新的测试数据库时,这些测试数据都会自动生成

关于模块的Bean组件version.manager,请参见:模块数据版本与变更

2. 开发环境

开发环境也不必指定数据库名称。每当启动后端开发服务时,总是查找可用的测试数据库,如果没有找到(比如,没有执行过单元测试)就自动创建一个新的测试数据库

  1. 1# 启动后端开发服务
  2. 2$ npm run dev:backend

3. 生产环境

生产环境需要手工创建数据库,并在config.prod.js中指定数据库名称

  1. 1# 启动服务
  2. 2$ npm run start:backend
  3. 3# 启动服务(后台运行)
  4. 4$ npm run start:backend-daemon
  5. 5# 停止服务
  6. 6$ npm run stop:backend

MySQL连接配置

注意:以下均是默认配置,一般不用变更,只要确保hostportuserpassword符合实际值即可

1. 测试环境

src/backend/config/config.unittest.js

  1. 1 // mysql
  2. 2 config.mysql = {
  3. 3 clients: {
  4. 4 // donnot change the name
  5. 5 __ebdb: {
  6. 6 host: '127.0.0.1',
  7. 7 port: '3306',
  8. 8 user: 'root',
  9. 9 password: '',
  10. 10 database: 'mysql', // donnot change the name
  11. 11 },
  12. 12 },
  13. 13 };
名称 说明
__ebdb 这是系统内置的MySQL节点名,不允许变更
database 指定为mysql,在执行单元测试时,会自动删除旧的测试数据库,然后创建一个新的测试数据库

2. 开发环境

src/backend/config/config.local.js

  1. 1 // mysql
  2. 2 config.mysql = {
  3. 3 clients: {
  4. 4 // donnot change the name
  5. 5 __ebdb: {
  6. 6 host: '127.0.0.1',
  7. 7 port: '3306',
  8. 8 user: 'root',
  9. 9 password: '',
  10. 10 database: 'mysql', // recommended
  11. 11 },
  12. 12 },
  13. 13 };
名称 说明
database 推荐指定为mysql,在启动后端开发服务时,查找可用的测试数据库,如果没有找到就创建一个新的测试数据库。如果指定为其他具体的数据库名,就直接使用此数据库

3. 生产环境

src/backend/config/config.prod.js

  1. 1 // mysql
  2. 2 config.mysql = {
  3. 3 clients: {
  4. 4 // donnot change the name
  5. 5 __ebdb: {
  6. 6 host: '127.0.0.1',
  7. 7 port: '3306',
  8. 8 user: 'root',
  9. 9 password: '',
  10. 10 database: '{{name}}',
  11. 11 },
  12. 12 },
  13. 13 };
名称 说明
database 此数据库需要手工创建

SQL语句输出

在CabloyJS中只需指定一个参数即可实现SQL语句的输出,从而方便我们排查SQL方面的问题

src/backend/config/config.{env}.js

  1. 1 // mysql
  2. 2 config.mysql = {
  3. 3 clients: {
  4. 4 // donnot change the name
  5. 5 __ebdb: {
  6. 6 ...
  7. 7 hook: {
  8. 8 meta: {
  9. 9 long_query_time: 200,
  10. 10 },
  11. 11 },
  12. 12 },
  13. 13
  14. 14 },
  15. 15 };
名称 单位 说明
long_query_time 毫秒 当SQL语句执行时间超过该值,就会输出到控制台。如果设置为0,就相当于输出所有的SQL语句