=Start=
缘由:
整理一下在学习Spring Boot时收集到的不错的资料,方便以后参考。
正文:
参考解答:
Spring Boot快速入门
http://blog.didispace.com/spring-boot-learning-1/
使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程
http://blog.didispace.com/spring-initializr-in-intellij/
更多参考链接:
- Spring-Boot基础教程
http://blog.didispace.com/Spring-Boot%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/
https://gitee.com/didispace/SpringBoot-Learning/ - Spring Boot开发Web应用
http://blog.didispace.com/springbootweb/ - Spring Boot日志管理
http://blog.didispace.com/springbootlog/ - Spring Boot中使用log4j实现http请求日志入mongodb
http://blog.didispace.com/springbootlog4jmongodb/ - Spring Boot干货系列:(一)优雅的入门篇
http://tengj.top/2017/02/26/springboot1/ - spring boot get和post请求,以及requestbody为json串时候的处理
http://blog.csdn.net/u010399316/article/details/52913299 - java – Trying to use Spring Boot REST to Read JSON String from POST
https://stackoverflow.com/questions/29313687/trying-to-use-spring-boot-rest-to-read-json-string-from-post - Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
http://blog.csdn.net/kobejayandy/article/details/12690161
=END=
《 “Spring Boot学习/资料整理” 》 有 40 条评论
Java Web安全的一些资料
https://github.com/dschadow/Java-Web-Security
使用proguard混淆springboot代码
https://juejin.im/post/5aa8cac96fb9a028d207a289
Springboot+proguard+maven 混淆
http://blog.csdn.net/qq_35981283/article/details/78529929
https://github.com/seregaSLM/proguard-spring-boot-example
ProGuard代码混淆技术详解
http://www.iigrowing.cn/proguard_dai_ma_hun_xiao_ji_shu_xiang_jie.html
Spring Boot 入门
http://blog.csdn.net/catoop/article/details/50501664
http://blog.csdn.net/column/details/spring-boot.html
`
Spring 官方网站本身使用Spring 框架开发,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系。
随着Spring 3.0的发布,Spring IO团队逐渐开始摆脱XML配置文件,并且在开发过程中大量使用“约定优先配置”(convention over configuration)的思想来摆脱Spring框架中各种复杂的配置,衍生了Java Config。
Spring Boot正是在这样的一个背景下被抽象出来的开发框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。
该项目旨在帮助开发者更容易地创建基于Spring的应用程序和服务,使得现有的和新的Spring开发者能够最快速地获得所需要的Spring功能。
Spring Boot不生成代码,且完全不需要XML配置。其主要目标如下:
– 为所有的Spring开发工作提供一个更快、更广泛的入门经验。
– 开箱即用,你也可以通过修改默认值来快速满足你的项目的需求。
– 提供了一系列大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。
`
Spring MVC 请求响应流程
http://www.codenuclear.com/spring-mvc-flow-with-example/ #全面强大
https://stackoverflow.com/questions/27918643/spring-mvc-request-and-response-flow-explanation
https://www.java4s.com/spring-mvc/spring-mvc-execution-flow-diagram-spring-mvc-3-2-flow/
https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-servlet
SpringMVC工作原理和工作流程
https://my.oschina.net/u/1422716/blog/663728
Spring MVC原理
http://blog.csdn.net/xtu_xiaoxin/article/details/8796499
Spring MVC Basic Process Flow
http://blog.csdn.net/Mark_LQ/article/details/52104485
Spring Boot 入门 – 进阶篇(1)- Servlet、Filter、Listener、Interceptor
http://rensanning.iteye.com/blog/2360666
Spring Boot 拦截器
http://blog.csdn.net/catoop/article/details/50501696
Spring MVC中拦截器和过滤器的区别
https://stackoverflow.com/questions/35856454/difference-between-interceptor-and-filter-in-spring-mvc
Spring Boot开发Web程序
http://www.xumenger.com/java-springboot-20180322/
Spring Cloud与微服务学习笔记-关于Spring Boot
https://since1986.github.io/blog/37ba2479.html
Spring Cloud与微服务学习笔记-基本概念
https://since1986.github.io/blog/8b1aa30e.html
Spring Boot中使用@Async实现异步调用
http://blog.didispace.com/springbootasync/
Spring Boot使用@Async实现异步调用:自定义线程池
http://blog.didispace.com/springbootasync-2/
通过Spring封装的方法操作mongodb,介绍了mongodb的基本语法查询、高级查询等介绍
https://blog.csdn.net/column/details/15996.html
Accessing Data with MongoDB
https://spring.io/guides/gs/accessing-data-mongodb/
springboot(十一):Spring boot中mongodb的使用
http://www.ityouknow.com/springboot/2017/05/08/springboot-mongodb.html
https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mongodb
Spring Boot中使用MongoDB数据库
http://blog.didispace.com/springbootmongodb/
Spring Boot 2.0系列文章(七):SpringApplication 深入探索
http://www.54tianzhisheng.cn/2018/04/30/springboot_SpringApplication/
Spring Boot 2.0系列文章(六):Spring Boot 2.0中SpringBootApplication注解详解
http://yoursite.com/2018/04/19/SpringBootApplication-annotation/
初识Spring —— Bean的装配(一)
http://hxblog.site/2018/06/09/Bean%E7%9A%84%E8%A3%85%E9%85%8D-%E4%B8%80/
http://www.liuhaihua.cn/archives/523191.html
`
JavaBeans 是 Java 中一种特殊的类,可以将多个对象封装到一个对象(bean)中,特点是可序列化,提供无参构造器,提供 getter 方法和 setter 方法访问对象的属性。名称中的 “Bean” 是用于Java的可重用软件组件的惯用叫法
在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后该bean就可以使用了。一旦该bean不再被使用,则由Java自动进行垃圾回收
在传统的例子中,如果我们要创建一个 Bean,我们就要使用关键字 New,但是,在 Spring 中,Bean 的创建是由 Spring 容器进行的,也就是说,在 Spring 中使用 Bean 的时候,不是由关键字 New 来创建实例了。
自动装配
使用 XML 装配
使用 Java 装配
`
Spring Boot “status”:415 “error”:”Unsupported Media Type”
https://stackoverflow.com/questions/44230121/spring-boot-unsupported-media-type-with-requestbody
https://stackoverflow.com/questions/43613091/spring-boot-unsupported-media-type
`
@RequestBody Map body // Content-Type需要是 application/json
@RequestBody String body // Content-Type的类型就宽松一些,但是需要自己进行 JSON.parseObject
`
SpringBoot切换Tomcat容器,SpringBoot使用Jetty容器
https://www.cnblogs.com/fanshuyao/p/8668059.html
https://blog.csdn.net/github_35169934/article/details/78573971
`
一、SpringBoot默认的容器为Tomcat,依赖包在spring-boot-starter-web下
二、SpringBoot把容器修改为Jetty
方法很简单,就是在pom.xml文件中,在引用的spring-boot-starter-web排除Tomcat的依赖包,然后再引入Jetty容器的依赖包。
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-jetty
`
SpringBoot 中 @SpringBootApplication注解背后的三体结构探秘
https://mp.weixin.qq.com/s/luUe8qt28RrNwlI4e6xz8Q
这是一篇优雅的Springboot2.0使用手册
https://blog.tengshe789.tech/2018/08/04/springboot/
`
1. 啥是Springboot
2. 快速使用
3. 配置文件
4. Web开发
5. 异步编程
6. 数据访问
7. 事物管理
8. 定时任务
9. 日志管理
10. 拦截器
11. 缓存
12. 监控中心
13. 性能优化
14. 热部署
14.1. 原理
14.2. 应用场景
14.3. Dev-tools
14.3.1. POM
14.3.2. 原理
15. 发布打包
15.1. Jar类型打包方式
15.2. war类型打包方式
15.3. 外部Tomcat运行
15.4. POM
16. 参考文献
`
Spring Boot的并发编程
https://www.jdon.com/49728
`
在考虑Spring Boot应用程序中的并发性时,值得考虑的关键因素有:
最大线程数 – 这是为处理对应用程序的请求而分配的最大线程数
共享外部资源 – 调用外部共享资源(如数据库)
异步方法调用 – 这些是在等待响应时将线程释放回线程池的方法调用
共享内部资源 – 调用内部共享资源 – 例如高速缓存和可能共享的应用程序状态
`
在POST的json数据中不能有多余的逗号(,),否则会报错:
`
“status”:400,”error”:”Bad Request”,”message”:”Bad Request”
@RequestBody Map body
List inputList = (List) body.get(“inputList”);
`
JSON 数组
http://www.runoob.com/json/js-json-arrays.html
JSON格式讲解,JSON获取对象,JSONObject和JSONArray的操作
https://www.sojson.com/blog/19.html
Java 的 Spring Boot 中如何获取 x-real-ip/x-forwarded-for/remote_addr 等 IP地址信息
https://www.cnblogs.com/EasonJim/p/8323017.html
https://www.mkyong.com/java/how-to-get-client-ip-address-in-java/
https://www.cnblogs.com/softidea/p/5705297.html
https://stackoverflow.com/questions/22877350/how-to-extract-ip-address-in-spring-mvc-controller-get-call
https://www.mkyong.com/spring-mvc/spring-mvc-how-to-get-client-ip-address/
https://howtodoinjava.com/tomcat/tomcat-get-real-ip-behind-load-balancer/
`
区分大小写
@RequestHeader Map requestHeader
String xForwardedFor = requestHeader.containsKey(“X-Forwarded-For”) ? requestHeader.get(“X-Forwarded-For”) : “”;
String xRealIp = requestHeader.containsKey(“X-Real-IP”) ? requestHeader.get(“X-Real-IP”) : “”;
`
SpringBoot 实现前后端分离的跨域访问(CORS)
https://zhuanlan.zhihu.com/p/31016194
https://www.jianshu.com/p/477e7eaa6c2f
http://www.spring4all.com/article/177
`
序言:跨域资源共享向来都是热门的需求,使用CORS可以帮助我们快速实现跨域访问,只需在服务端进行授权即可,无需在前端添加额外设置,比传统的JSONP跨域更安全和便捷。
一、基本介绍
简单来说,CORS是一种访问机制,英文全称是Cross-Origin Resource Sharing,即我们常说的跨域资源共享,通过在服务器端设置响应头,把发起跨域的原始域名添加到Access-Control-Allow-Origin 即可。
1. CORS工作原理
2. Request Headers(请求头)
3. Response Headers(响应头)
二、CORS实现跨域访问的授权方式
方式1:返回新的CorsFilter
方式2:重写WebMvcConfigurer
方式3:使用注解(@CrossOrigin)
方式4:手工设置响应头(HttpServletResponse )
三、测试跨域访问
`
Spring Boot 从入门到上瘾
https://www.jianshu.com/c/fc788f631211
https://github.com/yizhiwazi/springboot-socks/tree/master/springboot-cross-orgin
https://www.jianshu.com/p/964370d9374e
Spring boot embedded jettty thread pool maximum size
https://stackoverflow.com/questions/31913534/spring-boot-embedded-jettty-thread-pool-maximum-size
https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#common-application-properties
`
在application.properties中添加配置,来覆盖Jetty的默认配置。
server.port=8080 #设定监听端口
####Jetty specific properties########
server.jetty.acceptors=600 # acceptor线程数(默认是200)
#server.jetty.max-http-post-size=0 # put或post方法最大字节数
#server.jetty.selectors= # selector线程数
`
spring boot jetty 配置
https://blog.csdn.net/Revivedsun/article/details/78217760
spring boot jetty 主要配置
https://blog.csdn.net/genghaihua/article/details/79915965
配置 Spring Boot 中的 Jetty Server
https://howtodoinjava.com/spring-boot/configure-jetty-server/
How to configure Jetty in spring-boot (easily?)
https://stackoverflow.com/questions/20454441/how-to-configure-jetty-in-spring-boot-easily
https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-use-jetty-instead-of-tomcat
Spring Boot Jetty Server Configuration
https://javadeveloperzone.com/spring-boot/spring-boot-jetty-server-configure/
疑案追踪:Spring Boot内存泄露排查记
https://mp.weixin.qq.com/s/aYwIH0TN3nSzNaMR2FN0AA
Arthas实践–快速排查Spring Boot应用404/401问题
https://mp.weixin.qq.com/s/RQmYur3m2AsXFiuLwUCDnw
Guava Cache本地缓存在 Spring Boot应用中的实践
https://mp.weixin.qq.com/s/C4VBAm4N3AjvXJ303wdV5A
SpringBoot 究竟是如何跑起来的?
https://mp.weixin.qq.com/s/WQNF0S9jKlWI0lC2a4YyhQ
`
不得不说 SpringBoot 太复杂了,我本来只想研究一下 SpringBoot 最简单的 HelloWorld 程序是如何从 main 方法一步一步跑起来的,但是这却是一个相当深的坑。你可以试着沿着调用栈代码一层一层的深入进去,如果你不打断点,你根本不知道接下来程序会往哪里流动。这个不同于我研究过去的 Go 语言、Python 语言框架,它们通常都非常直接了当,设计上清晰易懂,代码写起来简单,里面的实现同样也很简单。但是 SpringBoot 不是,它的外表轻巧简单,但是它的里面就像一只巨大的怪兽,这只怪兽有千百只脚把自己缠绕在一起,把爱研究源码的读者绕的晕头转向。但是这 Java 编程的世界 SpringBoot 就是老大哥,你却不得不服。即使你的心中有千万头草泥马在奔跑,但是它就是天下第一。如果你是一个学院派的程序员,看到这种现象你会怀疑人生,你不得不接受一个规则 —— 受市场最欢迎的未必就是设计的最好的,里面夹杂着太多其它的非理性因素。
`
给你一份Spring Boot知识清单
https://juejin.im/entry/5b94cf495188255c3a2d26f8
https://www.jianshu.com/p/83693d3d0a65
Spring Boot 精选课程
https://github.com/ityouknow/spring-boot-leaning
通过Spring Boot中的手动Bean定义提高启动性能
https://www.jdon.com/51546
Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源
https://mp.weixin.qq.com/s/1aEPIMGSILoxCvbYqCDKqQ
SpringBoot启动初始化资源
https://smniuhe.github.io/2018/09/08/SpringBoot%E5%90%AF%E5%8A%A8%E5%88%9D%E5%A7%8B%E5%8C%96%E8%B5%84%E6%BA%90/
109. Spring Boot性能优化之加速启动【从零开始学Spring Boot】
https://412887952-qq-com.iteye.com/blog/2361583
SpringBoot 启动概述
http://www.cnblogs.com/wade-luffy/p/9796805.html
SpringBoot 集成gRpc Demo
https://blog.csdn.net/xiaoguangtouqiang/article/details/80492324
gRPC动手实践
https://blog.csdn.net/lyjshen/article/details/52238234
springboot整合gprc 传输对象
https://blog.csdn.net/qq_28423433/article/details/79108976
gRPC Spring Boot Starter
https://github.com/yidongnan/grpc-spring-boot-starter/blob/master/README-zh.md
SpringBoot集成gRPC微服务工程搭建实践
https://juejin.im/post/5c3ed5a2f265da616f703399
Attack Spring Boot Actuator via jolokia Part 1
https://lucifaer.com/2019/03/11/Attack%20Spring%20Boot%20Actuator%20via%20jolokia%20Part%201/
`
0x01 什么是Spring Boot Actuator
0x02 Jolokia端点的大致运行流程
0x03 构造请求路由
0x04 寻找可以利用的点
0x05 poc构造
0x06 Reference
`
SpringBoot使用Prometheus监控
http://blog.chuangzhi8.cn/2019/03/10/2-SpringBoot%E4%BD%BF%E7%94%A8prometheus%E7%9B%91%E6%8E%A7/
`
1. 关于Prometheus
2. 有关Grafana
3. SpringBoot使用Prometheus
3.1. 依赖内容
3.2. 配置文件
3.3. 设置application
4. Prometheus配置
4.1. 配置应用
4.2. 启动Prometheus
5. Grafana配置
6. 源码
`
Springboot 系列(五)web 开发之静态资源和模版引擎
https://www.codingme.net/2019/02/springboot/springboot-05-web-static-template/
Springboot 系列(十一)使用 Mybatis(自动生成插件) 访问数据库
https://www.codingme.net/2019/03/springboot/springboot-11-data-mybatis/
Java Spring中如何执行定时任务?
https://stackoverflow.com/questions/26147044/spring-cron-expression-for-every-day-101am
https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support-scheduled
spring定时任务详解(@Scheduled注解)
https://blog.csdn.net/qq_33556185/article/details/51852537
Spring Scheduler的使用与坑
http://qinghua.github.io/spring-scheduler/
Spring @Scheduled – 4 Ways to Schedule Tasks
https://howtodoinjava.com/spring-core/4-ways-to-schedule-tasks-in-spring-3-scheduled-example/
Java Spring中的定时任务为何不生效?
https://stackoverflow.com/questions/4817414/spring-scheduler-does-not-work
Spring cron job not working
https://stackoverflow.com/questions/22060996/spring-cron-job-not-working
Java Spring @Scheduled 定时任务为什么执行了两次?(Java Spring @Scheduled tasks executing twice)
https://stackoverflow.com/questions/14242310/java-spring-scheduled-tasks-executing-twice
Spring Boot 是否很难用?为什么?
https://www.zhihu.com/question/318377502
`
Spring最重要的是采用了 更好 的IoC和AOP的方式,它是演变自EJB,取长补短。所有的框架并非一蹴而就,都是经过很长时间的演变。所以我非常推荐去看看《Expert One-on-One J2EE Development without EJB》,作者是Spring Framework的Rod Johnson。前六章讲了架构设计的概念以及吐槽EJB的复杂。后面章节讲的是Spring的设计思路,这本书能够解释你在学习过程中碰到的问题。书虽然老了一些,但是架构问题千古不变,以不变应万变。
作者:Robert Zee
链接:https://www.zhihu.com/question/318377502/answer/641205726
==
spring boot给你使用20%的时间去解决80%的问题,剩下20%的问题需要你用200%的时间去弄懂。
`
阿里P7给你一份超详细 Spring Boot 知识清单
https://zhuanlan.zhihu.com/p/59274238
在Spring Boot中优雅的实现定时任务
https://zhuanlan.zhihu.com/p/79644891
`
第一种方式:
注解 @EnableScheduling
第二种方式:
需要用到数据库,但可以实现动态修改
`
https://github.com/jufeng98/java-master/tree/master/b2c-parent/b2c-scheduled
Spring Boot 教程、技术栈示例代码,快速简单上手教程。
https://github.com/ityouknow/spring-boot-examples
https://gitee.com/ityouknow/spring-boot-examples
http://www.ityouknow.com/spring-boot.html
Spring Boot 启用Gzip压缩
https://www.cnblogs.com/larryzeal/p/7220291.html
https://www.chenb.top/2018/06/13/spring-boot-gzip/
`
有两点需要注意:
1、需要在application.properties里启用压缩,并设置压缩支持的格式(默认支持text/html等,但不支持application/json)
server.compression.enabled=true
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain
2、默认情况下,仅会压缩2048字节以上的内容
#默认就是2048 byte
server.compression.min-response-size=2048
`
How to enable GZIP compression in Spring Boot application?
https://frontbackend.com/spring/how-to-enable-gzip-compression-in-spring-boot
https://www.callicoder.com/configuring-spring-boot-application/
`
# Enable HTTP/2 support, if the current environment supports it
server.http2.enabled=true
`
springboot+logback 日志输出企业实践(上)
https://mp.weixin.qq.com/s/Ti5i9vv9S1j4za5q11RWeA
springboot+logback 日志输出企业实践(下)
https://mp.weixin.qq.com/s/ha4LaR-E1gDxfUZ11neI-Q
最详细的 Spring Boot 多模块开发与排坑指南
https://mp.weixin.qq.com/s/4ffDc99rzUEM3c4ZoTHsIA
https://www.wdbyte.com/2020/03/springboot/springboot-18-module/
https://github.com/niumoo/springboot
https://www.wdbyte.com/categories/Springboot/
Spring Initializr and Assistant
https://plugins.jetbrains.com/plugin/18622-spring-initializr-and-assistant
`
社区版IDEA在新建项目的时候是没有 Spring Initializr 这一选择的,如果要新建Spring Boot项目就只能去 start.spring.io 页面上去 Generate Project 然后下载并打开,这个插件就会方便一些。
`