Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

gingerredjade/SpringBootStudy

Open more actions menu
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

github 🔗https://github.com/FutaoSmile/springbootFramework

gitee 🔗 https://gitee.com/FutaoSmile/springboot_framework

https://img.shields.io/badge/jdk-v1.8-green.svg https://img.shields.io/badge/version-v0.0.1--SNAPSHOT-green.svg

此项目依赖于公共组件LazyerStarter

https://github.com/FutaoSmile/LazyerStarter

git添加多远程仓库

git remote set-url --add origin git@github.com:FutaoSmile/springbootFramework.git

# 配合配套文章食用更加哦~

# 环境

  • SpringBoot 2.0.5.RELEASE
  • java 1.8
  • redis
  • rocket mq 4.3.0
  • elasticsearch 5.6.11
  • gradle
  • mybatis
  • mysql
  • idea
  • git

# 实现的功能:

统一返回的数据结构

统一异常处理(系统异常/业务逻辑异常)

服务端请求参数校验

Swagger接口文档

整合mybatis

  • mybatis + redis实现的二级缓存

用户登录(满足分布式) 基于httpsession

控制接口的访问权限(必须登录才能访问/可不登录直接访问的资源)

  • 基于 Annotation+SpringMvc Interceptor拦截器

请求日志记录

  • 基于SpringMvc Interceptor拦截器

在线用户统计

  • 基于HttpSessionListener监听器

接口请求次数统计

  • 基于SpringMvc Interceptor拦截器

敏感词检测

  • 基于Annotation+Hibernate Validator+SpringMvc Interceptor

第三方接口统一验签

  • 基于Annotation+SpringMvc Interceptor

整合redis

发送邮件

整合RocketMq消息队列

整合RabbitMq消息队列

  • 消息的可靠性
    • queue与message的持久化
    • 发送确认-手动ack
      • 异常情况下将message丢到redis再进行其他处理
    • 接收确认-手动ack
      • 处理失败重新丢回mq,再次消费

logback 日志系统

解决跨域访问

获取汉字拼音的首字母

分布式session管理 => springSession + redis

mybatis-plus(待优化) https://mp.baomidou.com/

国际化

HttpClient

Spring Security & apache shiro (待完善)

代码生成器

行级锁select for update的使用

一键生成markdown接口文档(目前依赖于swagger),不必再手动维护

  • 待优化的点:
    • parameter为自定义的数据类型时候无法获取对应的数据类型
    • 未按照controller进行分组
    • $ref无法解析问题-> fastJson issue alibaba/fastjson#2429
  • 特点
    • 多数据源 - 同时将多个项目的swagger接口文档加载到一个文件中
    • 如果请求参数被@ApiParam标注,则需要手动标记required=true/false,否则会直接读取@RequestParameter()的required

# 项目结构

src
|-main 源代码
    |-java java代码
        |-com.futao.springbootdemo
            |-annotaion 项目用到的自定义注解
            |-controller 接口
            |-dao 持久层
            |-foundation 支持项目运行的一些功能代码
            |-model 实体层
            |-service 业务逻辑层
            |-utils 工具类
            |-SpringmvcdemoApplication.java 启动类
    |-kotlin kotlin代码
    |-resource 配置文件
|-test

138.128.197.162 登陆地址: http://localhost:8888/login.html

swagger api地址: http://localhost:8888/swagger-ui.html#!

druid连接池地址: http://localhost:8888/druid/index.html

rocketmq控制台地址: http://localhost:8088/#/

kibana地址: http://localhost:5601/app/kibana

打包生成jar包 gradle clean build -x test

运行 java -jar ./build/libs/springbootdemo-0.0.1-SNAPSHOT.jar

# TODO items

  • 编写根据swagger-api-doc生成pdf接口文档的工具

  • mybatis分页 -> sql分页

  • elastic search全文检索

    • 查询语句
    • elasticsearch分词器
    • 从数据库中读取所有数据(建立/重建索引)
      • 自己实现
      • elastic-jdbc
  • 接口限流

    • 漏斗算法
    • 令牌桶算法
    • Sentinel
  • shiro 安全框架

  • solr 全文检索框架

  • 简单实用的Excel导入导出

  • WebSecurity

  • Condition接口与@Conditional注解的使用

  • @Enable* 注解原理与@Import注解的使用

  • ImportSelector与ImportBeanDefinitionRegistrar接口的使用

  • 服务端消息推送

    • SSE
    • Socket
  • zxing二维码

  • hashMap原理

  • 一种用于 API 的查询语言-非常新颖,颠覆以往的认知 http://graphql.cn/

  • 分布式日志收集logstash+kibana

  • 心跳

报错内容:

Error running 'ServiceStarter': Command line is too long. Shorten command line for ServiceStarter or also for Application default configuration.

解法:

修改项目下 .idea\workspace.xml,找到标签 <component name="PropertiesComponent"> , 在标签里加一行  <property name="dynamic.classpath" value="true" />

在项目启动时候选择激活的profile java -jar springmvcdemo-0.0.1-SNAPSHOT.jar --spring.profiles.active=prd --server.port=8888

/*--------------------------------------------
|         C O N S T R U C T O R S           |
============================================*/

/*--------------------------------------------
|  A C C E S S O R S / M O D I F I E R S    |
============================================*/

# 开发者profile的解决方案:

使用gradle构建的springboot项目在IDEA根据不同的开发人员读取不同的配置文件

新建application-developerName.yml 在IDEA中设置 ProgramArguments:spring.profiles.active=developerName

# Rocketmq

  • 启动nameserver ~/soft/rocketmq-all-4.3.0/distribution/target/apache-rocketmq/bin  ./mqnamesrv
  • 启动broker ~/soft/rocketmq-all-4.3.0/distribution/target/apache-rocketmq/bin  ./mqbroker -n 127.0.0.1:9876 autoCreateTopicEnable=true
  • 启动console java -jar ./docs/jars/rocketmq-console-ng-1.0.0.jar
  • 如果没装rocketmq,可关闭该功能(项目中使用到rocketmq的地方都将被关闭)。关闭方法: 配置文件:rocketmq.consumer.onOff:off,rocketmq.producer.onOff:off

#代码规范

强制

  • 对于依赖RocketMq的Bean
    • 如果依赖生产者,则需要需要标注@Conditional(RocketMqProducerOnOff::class)
    • 如果依赖消费者,则需要标注@Conditional(RocketMqConsumerOnOff::class) 否则项目启不起来
  • 需要序列化的类的所有字段都不能以is开头,boolean类型也不可以,否则框架在序列化的时候会出问题。目前出现的问题是isSuccess返回到前端还是success,is被吃掉了
  • 项目依赖的其他jar包放在jars文件夹下
  • 程序中操作redis不允许使用keys操作
  • @Resource 属于J2EE对于JSR-250规范的实现,不属于Spring
    • 如果未设置name/type, 则先byName,再byType
    • 如果设置了name/type, 找不到则报错
  • @Autowired 属于Spring 默认byType

# 阿里巴巴限流工具 Sentinel 控制台

如果出现下载不了jar包的情况,把toggle offline mode关掉

https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/

About

SpringBoot集成学习项目 SpringBoot Integration

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 88.1%
  • Kotlin 9.1%
  • FreeMarker 1.5%
  • HTML 1.3%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.