数据库迁移

Flyway是一款数据库迁移工具,它让数据库迁移变得更加简单。它能像Git一样对数据库进行版本控制,支持命令行工具、Maven插件、第三方工具(比如SpringBoot)等多种使用方式。

Java代码功能增强库

Lombok是一款Java代码功能增强库,在Github上已有9.8k+Star。它会自动集成到你的编辑器和构建工具中,从而使你的Java代码更加生动有趣。通过Lombok的注解,你可以不用再写getter、setter、equals等方法,Lombok将在编译时为你自动生成。

最近IDEA 2020最后一个版本发布了,已经内置了Lombok插件,SpringBoot 2.1.x之后的版本也在Starter中内置了Lombok依赖。

@NonNull
@Data
@Value

MyBatis Generator

MyBatis Generator(简称MBG)是MyBatis官方提供的代码生成工具。可以通过数据库表直接生成实体类、单表CRUD代码、mapper.xml文件,从而解放我们的双手!

generatorConfig.xml文件中对MBG进行配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <properties resource="generator.properties"/>
  7. <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
  8. <property name="beginningDelimiter" value="`"/>
  9. <property name="endingDelimiter" value="`"/>
  10. <property name="javaFileEncoding" value="UTF-8"/>
  11. <!--生成mapper.xml时覆盖原文件-->
  12. <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
  13. <!-- 为模型生成序列化方法-->
  14. <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
  15. <!-- 为生成的Java模型创建一个toString方法 -->
  16. <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
  17. <!--可以自定义生成model的代码注释-->
  18. <commentGenerator type="com.macro.mall.tiny.mbg.CommentGenerator">
  19. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  20. <property name="suppressAllComments" value="true"/>
  21. <property name="suppressDate" value="true"/>
  22. <property name="addRemarkComments" value="true"/>
  23. </commentGenerator>
  24. <!--配置数据库连接-->
  25. <jdbcConnection driverClass="${jdbc.driverClass}"
  26. connectionURL="${jdbc.connectionURL}"
  27. userId="${jdbc.userId}"
  28. password="${jdbc.password}">
  29. <!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
  30. <property name="nullCatalogMeansCurrent" value="true" />
  31. </jdbcConnection>
  32. <!--指定生成model的路径-->
  33. <javaModelGenerator targetPackage="com.macro.mall.tiny.mbg.model" targetProject="mall-tiny-generator\src\main\java"/>
  34. <!--指定生成mapper.xml的路径-->
  35. <sqlMapGenerator targetPackage="com.macro.mall.tiny.mbg.mapper" targetProject="mall-tiny-generator\src\main\resources"/>
  36. <!--指定生成mapper接口的的路径-->
  37. <javaClientGenerator type="XMLMAPPER" targetPackage="com.macro.mall.tiny.mbg.mapper"
  38. targetProject="mall-tiny-generator\src\main\java"/>
  39. <!--生成全部表tableName设为%-->
  40. <table tableName="ums_admin">
  41. <generatedKey column="id" sqlStatement="MySql" identity="true"/>
  42. </table>
  43. <table tableName="ums_role">
  44. <generatedKey column="id" sqlStatement="MySql" identity="true"/>
  45. </table>
  46. <table tableName="ums_admin_role_relation">
  47. <generatedKey column="id" sqlStatement="MySql" identity="true"/>
  48. </table>
  49. <table tableName="ums_resource">
  50. <generatedKey column="id" sqlStatement="MySql" identity="true"/>
  51. </table>
  52. <table tableName="ums_resource_category">
  53. <generatedKey column="id" sqlStatement="MySql" identity="true"/>
  54. </table>
  55. </context>
  56. </generatorConfiguration>

es 支持 sql 查询

Elasticsearch 6.3 以后已经支持SQL查询了,不用学Query DSL了,虽然也不难

  1. POST /_sql?format=txt
  2. {
  3. "query": "SELECT account_number,address,age,balance FROM account LIMIT 10"
  4. }

mysql 同步 es

MySQL如何实时同步数据到ES?试试这款阿里开源的神器!

canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消费,简单说就是可以对MySQL的增量数据进行实时同步,支持同步到MySQL、Elasticsearch、HBase等数据存储中去。

https://github.com/alibaba/canal/wiki

spring boot 常用依赖

第三方依赖

  1. <dependencies>
  2. <!--SpringBoot整合MyBatis数据存储功能依赖-->
  3. <dependency>
  4. <groupId>org.mybatis.spring.boot</groupId>
  5. <artifactId>mybatis-spring-boot-starter</artifactId>
  6. <version>${mybatis-version.version}</version>
  7. </dependency>
  8. <!--SpringBoot整合PageHelper分页功能依赖-->
  9. <dependency>
  10. <groupId>com.github.pagehelper</groupId>
  11. <artifactId>pagehelper-spring-boot-starter</artifactId>
  12. <version>${pagehelper-starter.version}</version>
  13. </dependency>
  14. <!--SpringBoot整合Druid数据库连接池功能依赖-->
  15. <dependency>
  16. <groupId>com.alibaba</groupId>
  17. <artifactId>druid-spring-boot-starter</artifactId>
  18. <version>${druid.version}</version>
  19. </dependency>
  20. <!--SpringBoot整合Springfox的Swagger API文档功能依赖-->
  21. <dependency>
  22. <groupId>io.springfox</groupId>
  23. <artifactId>springfox-boot-starter</artifactId>
  24. <version>${springfox-version}</version>
  25. </dependency>
  26. <!--SpringBoot整合MyBatis-Plus数据存储功能依赖-->
  27. <dependency>
  28. <groupId>com.baomidou</groupId>
  29. <artifactId>mybatis-plus-boot-starter</artifactId>
  30. <version>${mybatis-plus-version}</version>
  31. </dependency>
  32. <!--SpringBoot整合Knife4j API文档功能依赖-->
  33. <dependency>
  34. <groupId>com.github.xiaoymin</groupId>
  35. <artifactId>knife4j-spring-boot-starter</artifactId>
  36. <version>${knife4j-version}</version>
  37. </dependency>
  38. </dependencies>

官方依赖

  1. <dependencies>
  2. <!--SpringBoot整合Web功能依赖-->
  3. <dependency>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-starter-web</artifactId>
  6. </dependency>
  7. <!--SpringBoot整合Actuator功能依赖-->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-actuator</artifactId>
  11. </dependency>
  12. <!--SpringBoot整合AOP功能依赖-->
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-aop</artifactId>
  16. </dependency>
  17. <!--SpringBoot整合测试功能依赖-->
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-test</artifactId>
  21. <scope>test</scope>
  22. </dependency>
  23. <!--SpringBoot整合注解处理功能依赖-->
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-configuration-processor</artifactId>
  27. <optional>true</optional>
  28. </dependency>
  29. <!--SpringBoot整合Spring Security安全功能依赖-->
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-security</artifactId>
  33. </dependency>
  34. <!--SpringBoot整合Redis数据存储功能依赖-->
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-starter-data-redis</artifactId>
  38. </dependency>
  39. <!--SpringBoot整合Elasticsearch数据存储功能依赖-->
  40. <dependency>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  43. </dependency>
  44. <!--SpringBoot整合MongoDB数据存储功能依赖-->
  45. <dependency>
  46. <groupId>org.springframework.boot</groupId>
  47. <artifactId>spring-boot-starter-data-mongodb</artifactId>
  48. </dependency>
  49. <!--SpringBoot整合AMQP消息队列功能依赖-->
  50. <dependency>
  51. <groupId>org.springframework.boot</groupId>
  52. <artifactId>spring-boot-starter-amqp</artifactId>
  53. </dependency>
  54. <!--SpringBoot整合Quartz定时任务功能依赖-->
  55. <dependency>
  56. <groupId>org.springframework.boot</groupId>
  57. <artifactId>spring-boot-starter-quartz</artifactId>
  58. </dependency>
  59. <!--SpringBoot整合JPA数据存储功能依赖-->
  60. <dependency>
  61. <groupId>org.springframework.boot</groupId>
  62. <artifactId>spring-boot-starter-data-jpa</artifactId>
  63. </dependency>
  64. <!--SpringBoot整合邮件发送功能依赖-->
  65. <dependency>
  66. <groupId>org.springframework.boot</groupId>
  67. <artifactId>spring-boot-starter-mail</artifactId>
  68. </dependency>
  69. </dependencies>

Quartz

SpringBoot官方支持任务调度框架,轻量级用起来也挺香!

概念

  • Scheduler(调度器):Quartz中的任务调度器,通过Trigger和JobDetail可以用来调度、暂停和删除任务。
  • Trigger(触发器):Quartz中的触发器,可以通过CRON表达式来指定任务执行的时间,时间到了会自动触发任务执行。
  • JobDetail(任务详情):Quartz中需要执行的任务详情,包括了任务的唯一标识和具体要执行的任务,可以通过JobDataMap往任务中传递数据。
  • Job(任务):Quartz中具体的任务,包含了执行任务的具体方法。

RabbitMQ启用MQTT

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。

image.png

MQTT相关概念

  • Publisher(发布者):消息的发出者,负责发送消息。
  • Subscriber(订阅者):消息的订阅者,负责接收并处理消息。
  • Broker(代理):消息代理,位于消息发布者和订阅者之间,各类支持MQTT协议的消息中间件都可以充当。
  • Topic(主题):可以理解为消息队列中的路由,订阅者订阅了主题之后,就可以收到发送到该主题的消息。
  • Payload(负载);可以理解为发送消息的内容。
  • QoS(消息质量):全称Quality of Service,即消息的发送质量,主要有QoS 0、QoS 1、QoS 2三个等级,下面分别介绍下:
    • QoS 0(Almost Once):至多一次,只发送一次,会发生消息丢失或重复;
    • QoS 1(Atleast Once):至少一次,确保消息到达,但消息重复可能会发生;
    • QoS 2(Exactly Once):只有一次,确保消息只到达一次。

      mybatis-plus

      MyBatis-Plus 提供了代码生成器,可以一键生成controller、service、mapper、model、mapper.xml代码,同时提供了丰富的CRUD操作方法,让我们实现单表CRUD几乎不用手写SQL实现!

Java工具类库 Hutool

Hutool是一个小而全的Java工具类库

Filebeat 日志搬运工

主要搬运 es、mysql、nginx 等第三方中间件日志