Giter Site home page Giter Site logo

liuyueyi / spring-boot-demo Goto Github PK

View Code? Open in Web Editor NEW
633.0 22.0 323.0 1.49 MB

Spring Boot & Spring Cloud & Spring Security Demo Case(Spring学习示例实战项目)

Home Page: http://spring.hhui.top

License: Apache License 2.0

Java 94.02% Shell 0.41% JavaScript 0.26% CSS 0.24% HTML 4.85% FreeMarker 0.16% Dockerfile 0.03% Python 0.03%
spring spring-boot spring-cloud spring-mvc redis mysql mongodb aop bean jpa

spring-boot-demo's Introduction

Spring-Boot-Demo

#

Build Status Average time to resolve an issue Percentage of issues still open

SpringBoot + SpringCloud + SpringSecurity学习过程中的源码汇总,沉淀记录下学习历程

说明:Spring系列教程现已根据专栏方式进行收集整理,更便于系统学习,详情查看: [一灰灰的Spring系列专栏](https://hhui.top/spring/)

欢迎关注公众号 一灰灰blog 更多干货持续分享

QrCode

0. 项目说明

如果想在本机使用这个项目的demo,下面有一些注意事项

环境要求

java: jdk1.8
maven: 3.2+
spring boot: 2.2.1.RELEASE
ide: IDEA/Eclipse/NetBeans随意

## 不同项目的环境依赖,请以项目对应的博文要求为准
db: mongodb + mysql + redis + solr + elasticsearch
中间件: promotheus + grafana + kibana + rabbitmq

IDEA插件

# 必须
lombok

# 推荐
maven helper: 查看依赖树的好工具(排除依赖冲突非常棒)
Free MyBatis plugin: mybatis的mapper与xml跳转比较方便
Mybatis log Plugin:日志
CodeGlance: 类似sublimetext 右边的快速预览框
Rainbow Brackets: 不同层级的括号颜色不一样

1. 知识点图谱

所有博文集中发布在个人博客网站 : 一灰灰Blog-Spring

大致规划的内容包括以下章节,希望能用半年到一年(严重超期)的时间完成....

II. 高级篇

III. MVC篇

IV. SpringCloud篇

  • 注册中心
  • 配置中心
  • 网关路由
  • 负载均衡
  • 熔断器
  • 链路监控
  • 安全模块
  • oauth
  • admin

V. 源码篇

VI. 项目说明

项目说明
项目 说明 知识点
SpringBoot SpringBoot项目 -
000-properties 【配置】使用姿势 @PropertySource 指定配置文件,
@ConfigurationProperties 指定配置前缀,
@value 配置绑定
001-properties 【配置】环境选择 配置spring.profiles.active指定环境
002-properties 【配置】刷新示例 SpringCloud生态配置刷新
@RefreshScopeEnvironmentChangeEvent配置变更事件
002-properties-bind 【配置】刷新绑定的各种知识点 @ConfigurationProperties
002-dynamic-envronment 【配置】自定义配置源 MapPropertySource
002-properties-value 【配置】@Value扩展知识点 @Value
003-log 【日志】集成logback logback日志集成与配置
003-log4j2 【日志】集成log4j2 log4j2日志集成与配置
004-bean 【bean】使用姿势 bean三种定义姿势
bean三种注入方式
005-autoconfig 【bean】自动加载 @Configuration自动加载配置类
005-config-selector 【bean】选择注入 ImportSelector 选择在接口的多个实现中,具体实例化哪个
006-dynamicbean 【bean】动态注册bean BeanDefinitionRegistryPostProcessor 扩展实现bean动态注册
007-conditionbean 【bean】条件注入 @Coinditional 使用姿势
008-beanorder
008-beanorder-addition
008-beanorder-addition2
【bean】加载顺序 bean加载顺序的反面示例与正确写法
009-schedule 【定时器】定时任务/计划任务 @Scheduled 基本语法与自定义线程池
010-aop 【AOP】切面 aop基本使用姿势与注意事项
011-aop-logaspect 【AOP】切面 实战,日志切面
012-context-listener 【Listener】事件 ContextListener
013-spel 【SpEL】 SpEL语法与实例
014-spel-aop 【SpEL】 SpEL & aop整合时注意事项
100-h2database 【DB】h2database整合 -
100-mysql 【DB】mysql整合 -
101-jdbctemplate 【DB】jdbctemplate使用姿势 CURD详解 JdbcTemplate
101-jdbctemplate-transaction 【DB】事务 @Transactional声明式; 编程式事务
- 隔离级别
传递属性
102-jpa 【DB】 jpa使用姿势 JPA
102-jpa-errorcase 【DB】环境配置易错点 @EnableJpaRepositories, @EntityScan指定扫描包
102-jpa-errorcase2 【DB】Entity映射错误 Field映射POJO
103-mybatis-xml 【DB】mybatis xml配置整合方式 mybatis
104-mybatis-noxml 【DB】mybatis 注解整合方式 mybatis
105-mybatis-plus 【DB】mybatis-plus整合 mybatis-plus
106-mybatis-plus-generator 【DB】mybatis-plus代码自动生成 mybatis-plus
107-jooq-aop 【DB】jooq体验demo,jooq+aop导致项目启动巨慢的坑 jooq
108-jooq-curd 【DB】jooq CURD使用姿势 jooq
108-jooq-mysql 【DB】jooq代码自动生成 jooq-code-gen
109-multi-datasource 【DB】多数据源配置 JdbcTemplate, DataSource
109-multi-datasource-mybatis 【DB】mybatis多数据源配置 Mybatis DataSource
109-multi-datasource-mybatis-ano 【DB】mybatis多数据源配置 Mybatis DataSource
109-multi-datasource-mybatis-plus 【DB】mybatis-plus多数据源配置 Mybatis-Plus DataSource
110-mongo-basic 【DB】mongodb整合 mongodb
111-mongo-template 【DB】mongodb CURD使用姿势 MongoTemplate
120-redis-config 【redis】环境配置与基本使用 redis
121-redis-jedis-config 【redis】jedis配置 jedis
122-redis-template 【redis】RedisTemplate 使用姿势详解 RedisTemplate
123-redis-lettuce-config 【redis】lettuce配置 lettuce
124-redis-cluster 【redis】集群使用姿势 redis集群实例
125-cache-ano 【Cache】缓存注解 Spring缓存注解使用姿势
130-influxdb 【DB】influxdb整合及CURD 时序数据库 influxdb
131-influxdb-java 【DB】influxdb封装 封装更服务SpringBoot规范的InfluxTemplate,待实现
140-search-solr 【Solr】solr环境+CURD使用姿势 SolrTemplate, SolrClient
141-search-solr-auth 【Solr】solr开启授权无法更新索引的四种解决方案 解决solr更新索引报错问题
142-search-es 【ES】es实例使用demo ES,权限验证,CURD,高级特性等 RestHighLevelClient
150-i18n 【i18n】国际化 国际化支持
161-schema-init 【DB】数据初始化 数据初始化
162-liquibase 【DB】Liquibase Liquibase数据库版本管理
200-webflux 【web】WebFlux实例 React
201-web 【web】basic http实例 springmvc
202-web-params 【web】请求参数解析的各种姿势 get参数解析
post参数解析
自定义参数解析HandlerMethodArgumentResolver
202-web-params-validate 【web】请求参数校验 参数校验validation-api
203-websocket 【web】websocket实例 WebSocketHandler, WebSocketConfigurer
204-web-static-resources 【web】静态资源访问实例 WebMvcConfigure, spring.resources.static-locations
204-web-static-resources-ui 【web】webjar静态资源 第三方jar包提供纯静态资源
204-web-xml 【web】xml传参与返回实例 xml传参返回使用姿势
204-web-xml-json 【web】自定义返回数据类型的几种方式 返回xml,返回json,请求头、返回头,内容协商ContentNegotiationConfigurer
204-web-freemaker 【web】freemaker引擎整合 freemaker
205-web-thymeleaf 【web】thymeleaf引擎整合 thymeleaf
206-web-beetl 【web】beetl引擎整合 beetl
207-web-response 【web】http响应的各种姿势 基本数据返回
重定向
错误页面配置
定制http code
207-web-res-gzip 【web】返回结果压缩 json/text/静态资源返回压缩
208-web-mapping 【web】自定义url映射规则 RequestCondition
209-web-error 【web】全局异常处理 ControllerAdvice, ExceptionHandler
210-web-filter 【web】filter使用姿势 HttpFilter过滤器
210-web-filter-order 【web】filter优先级使用姿势 HttpFilter, @Order
211-web-servlet 【web】servlet使用姿势 Servlet
212-web-listener 【web】listener知识点 Listener
219-web-asyn 【web】异步请求 AsyncContext方式
Callable
WebAsyncTask
DeferredResult
220-web-sse 【web】sse 服务器发送事件 SseEmitter
221-web-resttemplate 【web】RestTemplate使用姿势 RestTemplate
222-web-client 【web】WebClient使用姿势 WebClient
223-webflux-params 【web】webflux参数解析实例demo webflux
230-web-resin 【web】resion容器整合 resin
300-rabbitmq 【web】rabbitmq整合 rabbitmq
301-rabbitmq-publish 【web】rabbitmq发送消息 RabbitTemplate
消息确认模式
事务模式
302-rabbitmq-consumer 【web】rabbitmq消费消息姿势 @RabbitListener
400-docker-demo 【docker】docker整合 Dockerfile
410-zookeeper-basic 【中间件】zk使用姿势 ZooKeeper
411-zookeeper-distributelock 【中间件】zk 分布式锁 DistributeLock
420-prometheus-basic 【中间件】Prometheus监控 Prometheus
421-prometheus-micro 【中间件】Prometheus监控 Prometheus
430-email 【中间件】email 邮件发送 email
500-cache-caffeine 【中间件】内存缓存Caffiene Caffiene
501-cache-caffeine-special 【中间件】内存缓存Caffiene Caffiene
600-snowflake-id 【DB】雪花算法 Snowflake
601-actuator 【监控】检测 Actuator
SpringCase 实战/应用演练项目 -
000-spi-factorybean 借助FactoryBean实现SPI效果 FactoryBean
002-dynamic-config
002-dynamic-config-demo
自定义配置加载与刷新示例工程 借助InstantiationAwareBeanPostProcessorAdapter + Spring事件机制实现@Value @RefreshScope
006-importbean 将非spring项目导入Spring生态
自定义注入实例
ImportBeanDefinitionRegistrar
008-bean-order
008-bean-order-client
指定bean加载优先级,让中间件的核心bean优于业务bean被加载 InstantiationAwareBeanPostProcessorAdapter, @Import
009-distribute-scheduler-task 分布式定时任务mock实例 AOP实现定时任务选择; 重写ScheduledAnnotationBeanPostProcessor扩展定时任务生成
010-auto-inject 自定义注入实现 BeanPostProcessor 与 代理类创建
120-redis-ranklist redis实现排行榜 zset
124-redis-sitecount redis实现站点统计 redisTemplate
125-redis-distribuet-lock redis分布式锁 redisTemplate
126-redis-delay-list redis实现的演示队列 redisTemplate
201-web-api-version web版本控制 RequestMappingHandlerMapping
202-web-qrcode-login web扫码登录实战 SseEmitter
203-web-rest-adapter url匹配规则自定义,子类继承父类的参数注解 RequestMappingHandlerMapping, HandlerMethodArgumentResolver
204-web-request-proxy 基于接口的REST访问支持 ClassPathBeanDefinitionScanner, ImportBeanDefinitionRegistrar
205-web-rest-enhanced 单机应用最小成本扩展REST服务示例 RequestMappingHandlerMapping
421-prometheus-metric AOP实现自定义的Prometheus埋点上报 Prometheus
430-mail-alarm 基于日志的邮件报警 javaMailSender
431-mail-report 每天邮件上报统计报表实例 javaMailSender
SpringSecurity 安全
000-basic-demo 整合实例
001-authentication-mem-config 内存认证
001-authentication-mem-userdetail 内存认证
002-authentication-db db认证
010-accesscontrol-rbac rbac 权限管理
011-accesscontrol-acl acl权限管理
spring-cloud 微服务
config-server 配置中心 spring cloud config
eurka-server 注册中心 spring cloud eurka
eurka-service-consumer 服务提供者 spring cloud eurka
eurka-service-provider 服务消费者 ribbon feign
gateway 网关 spring cloud gateway 网关
spring-extention Spring的扩展点
100-application-context-extend 上下文刷新前扩展点ApplicationContextInitializer ApplicationContextInitializer
101-bean-definition
102-bean-factory-post-processor
103-instantiation-bean-post-processor
104-smart-instantiation-bean-post-processor
105-bean-factory-aware

2. 系列博文

0. 实战系列

  1. 【SpringBoot实战】Bean之注销与动态注册实现服务mock
  2. 【SpringBoot实战】FactoryBean及代理实现SPI机制的实例
  3. 【SpringBoot实战】借助Redis实现排行榜功能
  4. 【SpringBoot实战】借助Redis搭建一个简单站点统计服务
  5. 【SpringBoot实战】AOP实现日志功能
  6. 【SpringBoot实战】徒手撸一个扫码登录示例工程
  7. 【SpringBoot实战】mock一个简单的分布式定时任务
  8. 【SpringBoot实战】Redis实现分布式锁(应用篇)
  9. 【SpringBoot实战】借助redis来实现延时队列(应用篇)

1. 基础系列

基础系列博文包括 AOP, IoC(DI,Bean), 日志, 自动配置等

配置

IoC(DI/bean)

AOP相关

日志

定时任务

SpEL

事件

国际化

2. DB系列

我们将db区分为传统的关系型数据库如mysql,NoSql如redis、mongodb,时序数据库influxdb

h2database

MongoDB

redis

mysql

分别介绍多种不同的操作姿势

JdbcTemplate

jpa

mybatis

事务

采坑、填坑

jooq

数据初始化

3. 搜索系列

搜索主要会区分solr和es

solr

es

4. MQ系列

消息队列,如rabbitmq, rocketmq, activemq, kafaka

rabbitmq

5. WEB系列

web系列的东西就比较多了,基本上日常开发中,你需要的都会有;你没用过的也会有

websocket

采坑、填坑

应用实战

WebFlux系列

由于WebFlux和SpringMVC在一些基础上差别较大,单独开一个系列教程版块

webclient异步网络请求

6. SpringSecurity系列

记录SpringSecurity相关的所有技术文章,分类汇总如下,持续更新中

简单抽象的说一下SpringSecurity它的定义

  • 很🐂的认证和访问权限校验框架

那么具体能干嘛?

  • 用户登录认证:用户名+密码登录,确定用户身份
  • 用户访问鉴权(常见的ACL访问控制列表,RBAC角色访问控制):判定是否有权限访问某个资源
  • 安全保护(CSRF跨站点攻击,Session Fixation会话固定攻击…)

相关博文

7. SpringCloud系列

微服务系列

Eureka系列

踩坑、填坑

8. 运维

docker

9. 中间件

zookeeper

prometheus

邮件

Caffiene缓存

10. 扩展点

3. 其他

拒绝单机,欢迎start或者加好友支持

待更新系列

[x] @Value支持绑定自定义的配置源,并支持动态刷新 [ ] 事务后置\前置\回滚操作 [ ] druid数据源配置相关 [ ] 多线程的事务支持 [ ] 扩展点系列 [ ] prometheus监控druid仙姑噶那配置向 [ ] websocket补齐 [ ] webflux配套教程

声明

尽信书则不如无书,以上内容,一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

  • 微博地址: 小灰灰Blog
  • QQ: 一灰灰/3302797840
  • WeChat: 一灰/liuyueyi25

扫描关注

公众号&博客

QrCode

打赏码

pay

spring-boot-demo's People

Contributors

liuyueyi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-boot-demo's Issues

190412-SpringBoot高级篇JdbcTemplate之数据查询上篇 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/04/12/190412-SpringBoot%E9%AB%98%E7%BA%A7%E7%AF%87JdbcTemplate%E4%B9%8B%E6%95%B0%E6%8D%AE%E6%9F%A5%E8%AF%A2%E4%B8%8A%E7%AF%87/

前面一篇介绍如何使用JdbcTemplate实现插入数据,接下来进入实际业务中,最常见的查询篇。由于查询的姿势实在太多,对内容进行了拆分,本篇主要介绍几个基本的使用姿势 queryForMap queryForList queryForObject

180921-SpringBoot基础篇配置信息之自定义配置指定与配置内引用 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/09/21/180921-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF%E4%B9%8B%E8%87%AA%E5%AE%9A%E4%B9%89%E9%85%8D%E7%BD%AE%E6%8C%87%E5%AE%9A%E4%B8%8E%E9%85%8D%E7%BD%AE%E5%86%85%E5%BC%95%E7%94%A8/

前面两篇文章,分别介绍了如何获取配置信息,区分多环境的配置支持,配置信息的优先级问题,那么掌握这些是否就足够了呢? 如何获取指定文件(即非application-xxx.properties)中的配置信息呢? 配置文件中依赖其他配置文件的参数如何表示?

180927-SpringBoot基础篇日志管理之默认配置 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/09/27/180927-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87%E6%97%A5%E5%BF%97%E7%AE%A1%E7%90%86%E4%B9%8B%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE/

对于一个后端来说,日志是不可缺少的,这个东西,形象点就像剑客手中的剑,没有剑你就刷不了帅,砍不了人。所以就有必要好好的说道说道,这个日志文件的管理了。本篇博文将关注以下几点内容 日志级别选择 日志输出到文件 格式化输出 日志文件管理(自动删除,压缩归档等) 常用的logback-spring.xml配置

190717-SpringBoot系列教程JPA之query使用姿势详解之基础篇 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/07/17/190717-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8BJPA%E4%B9%8Bquery%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF%E8%AF%A6%E8%A7%A3%E4%B9%8B%E5%9F%BA%E7%A1%80%E7%AF%87/

前面的几篇文章分别介绍了CURD中的增删改,接下来进入最最常见的查询篇,看一下使用jpa进行db的记录查询时,可以怎么玩 本篇将介绍一些基础的查询使用姿势,主要包括根据字段查询,and/or/in/like/between 语句,数字比较,排序以及分页

190113-SpringBoot高级篇MongoDB之查询基本使用姿势 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/01/13/190113-SpringBoot%E9%AB%98%E7%BA%A7%E7%AF%87MongoDB%E4%B9%8B%E6%9F%A5%E8%AF%A2%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/

学习一个新的数据库,一般怎么下手呢?基本的CURD没跑了,当可以熟练的增、删、改、查一个数据库时,可以说对这个数据库算是入门了,如果需要更进一步的话,就需要了解下数据库的特性,比如索引、事物、锁、分布式支持等 本篇博文为mongodb的入门篇,将介绍一下基本的查询操作,在Spring中可以怎么玩

190702-SpringBoot系列教程JPA之delete使用姿势详解 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/07/02/190702-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8BJPA%E4%B9%8Bdelete%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF%E8%AF%A6%E8%A7%A3/

常见db中的四个操作curd,前面的几篇博文分别介绍了insert,update,接下来我们看下delete的使用姿势,通过JPA可以怎样删除数据 一般来讲是不建议物理删除(直接从表中删除记录)数据的,在如今数据就是钱的时代,更常见的做法是在表中添加一个表示状态的字段,然后通过修改这个字段来表示记录是否有效,从而实现逻辑删除;这么做的原因如下 物理删除,如果出问题恢复比较麻烦 无法保证代码一定准

190513-SpringBoot系列教程应用篇之借助Redis搭建一个简单站点统计服务 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/05/13/190513-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8B%E5%BA%94%E7%94%A8%E7%AF%87%E4%B9%8B%E5%80%9F%E5%8A%A9Redis%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%AB%99%E7%82%B9%E7%BB%9F%E8%AE%A1%E6%9C%8D%E5%8A%A1/

判断一个网站值不值钱的一个重要标准就是看pv/uv,那么你知道pv,uv是怎么统计的么?当然现在有第三方做的比较完善的可以直接使用,但如果让我们自己来实现这么一个功能,应该怎么做呢? 本篇内容较长,源码如右 ➡️ https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-case/124-redis-sitecount

180925-SpringBoot基础篇配置信息之默认配置 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/09/25/180925-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF%E4%B9%8B%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE/

前面关于配置信息的博文包括了如何读取配置信息的值,刷新配置信息,多环境的配置选择,加载自定义的配置信息,第一篇博文开头提出的几个问题目前还剩下一个,默认的配置有哪些,如果需要修改怎么做

190327-Spring-RestTemplate之urlencode参数解析异常全程分析 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/03/27/190327-Spring-RestTemplate%E4%B9%8Burlencode%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%BC%82%E5%B8%B8%E5%85%A8%E7%A8%8B%E5%88%86%E6%9E%90/

对接外部的一个接口时,发现一个鬼畜的问题,一直提示缺少某个参数,同样的url,通过curl命令访问ok,但是改成RestTemplate请求就不行;因为提供接口的是外部的,所以也无法从服务端着手定位问题,特此记录下这个问题的定位以及解决过程

181009-SpringBoot基础篇Bean之基本定义与使用 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/10/09/181009-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87Bean%E4%B9%8B%E5%9F%BA%E6%9C%AC%E5%AE%9A%E4%B9%89%E4%B8%8E%E4%BD%BF%E7%94%A8/

我们知道在Spring中,有两个非常有名的特性,依赖注入(DI)与切面(AOP),其中依赖注入其主要的作用,可以说就是维护Spring容器创建的Bean之间的依赖关系,简单来说就是一个bean(假定名为A)持有另一个Bean(假定名为B)的引用作为成员变量b,则由Spring容器自动将B赋值给A的成员变量b 因此在想理解依赖注入,就有必要了解下创建和使用Bean的几种姿势;本篇博文作为基础篇,将介

190213-SpringBoot文件上传异常之提示The temporary upload location xxx is not valid | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/02/13/190213-SpringBoot%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%BC%82%E5%B8%B8%E4%B9%8B%E6%8F%90%E7%A4%BAThe-temporary-upload-location-xxx-is-not-valid/

SpringBoot搭建的应用,一直工作得好好的,突然发现上传文件失败,提示org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload loc

190513-SpringBoot系列教程应用篇之借助Redis搭建一个简单站点统计服务 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/05/13/190513-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8B%E5%BA%94%E7%94%A8%E7%AF%87%E4%B9%8B%E5%80%9F%E5%8A%A9Redis%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%AB%99%E7%82%B9%E7%BB%9F%E8%AE%A1%E6%9C%8D%E5%8A%A1/

判断一个网站值不值钱的一个重要标准就是看pv/uv,那么你知道pv,uv是怎么统计的么?当然现在有第三方做的比较完善的可以直接使用,但如果让我们自己来实现这么一个功能,应该怎么做呢? 本篇内容较长,源码如右 ➡️ https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-case/124-redis-sitecount

190526-SpringBoot高级篇搜索Solr之文档新增与修改使用姿势 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/05/26/190526-SpringBoot%E9%AB%98%E7%BA%A7%E7%AF%87%E6%90%9C%E7%B4%A2Solr%E4%B9%8B%E6%96%87%E6%A1%A3%E6%96%B0%E5%A2%9E%E4%B8%8E%E4%BF%AE%E6%94%B9%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/

大多涉及到数据的处理,无非CURD四种操作,对于搜索SOLR而言,基本操作也可以说就这么几种,在实际应用中,搜索条件的多样性才是重点,我们在进入复杂的搜索之前,先来看一下如何新增和修改文档

180920-SpringBoot基础篇配置信息之多环境配置信息 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/09/20/180920-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF%E4%B9%8B%E5%A4%9A%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF/

前面一篇主要介绍的是如何获取配置信息,接下来则是另外一个非常非常基础和必要的知识点了,应用如何根据不同的环境来选择对应的配置,即配置的多环境选择问题

190417-SpringBoot高级篇JdbcTemplate之数据查询下篇 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/04/17/190417-SpringBoot%E9%AB%98%E7%BA%A7%E7%AF%87JdbcTemplate%E4%B9%8B%E6%95%B0%E6%8D%AE%E6%9F%A5%E8%AF%A2%E4%B8%8B%E7%AF%87/

SpringBoot高级篇JdbcTemplate之数据查询上篇 讲了如何使用JdbcTemplate进行简单的查询操作,主要介绍了三种方法的调用姿势 queryForMap, queryForList, queryForObject 本篇则继续介绍剩下的两种方法使用说明 queryForRowSet query

181012-SpringBoot基础篇Bean之自动加载 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/10/12/181012-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87Bean%E4%B9%8B%E8%87%AA%E5%8A%A8%E5%8A%A0%E8%BD%BD/

前面一篇介绍了Bean的常用姿势,在一个项目中,可能不会出现什么问题,可如果你提供了一个Jar包供第三方用户使用,那么你这个jar包中的Bean,能被第三方加载么? 本篇博文将主要介绍AutoConfig相关的内容,即如果我想提供一个jar包供第三方在Spring的环境下使用时,可以怎么做

190824-SpringBoot系列教程web篇之Get请求参数解析姿势汇总 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/08/24/190824-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8Bweb%E7%AF%87%E4%B9%8BGet%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%A7%BF%E5%8A%BF%E6%B1%87%E6%80%BB/

一般在开发web应用的时候,如果提供http接口,最常见的http请求方式为GET/POST,我们知道这两种请求方式的一个显著区别是GET请求的参数在url中,而post请求可以不在url中;那么一个SpringBoot搭建的web应用可以如何解析发起的http请求参数呢? 下面我们将结合实例汇总一下GET请求参数的几种常见的解析姿势

190820-SpringBoot系列教程web篇之Thymeleaf环境搭建 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/08/20/190820-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8Bweb%E7%AF%87%E4%B9%8BThymeleaf%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/

上一篇博文介绍了如何使用Freemaker引擎搭建web项目,这一篇我们则看一下另外一个常见的页面渲染引擎Thymeleaf如何搭建一个web项目 推荐结合Freemaker博文一起查看,效果更佳 190816-SpringBoot系列教程web篇之Freemaker环境搭建

190510-SpringBoot高级篇搜索之Solr环境搭建与简单测试 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/05/10/190510-SpringBoot%E9%AB%98%E7%BA%A7%E7%AF%87%E6%90%9C%E7%B4%A2%E4%B9%8BSolr%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E4%B8%8E%E7%AE%80%E5%8D%95%E6%B5%8B%E8%AF%95/

搜索可以说是非常常见的场景了,一般选择比较多的有solr和es,底层都是基于Lucene搜索引擎实现。之前简单的使用过solr,一直没有成体系的学习过,正好需要给一个内部项目封装统一的查询组件,借这个机会好好的撸一把solr的知识要点

181225-SpringBoot应用篇之借助Redis实现排行榜功能 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/12/25/181225-SpringBoot%E5%BA%94%E7%94%A8%E7%AF%87%E4%B9%8B%E5%80%9F%E5%8A%A9Redis%E5%AE%9E%E7%8E%B0%E6%8E%92%E8%A1%8C%E6%A6%9C%E5%8A%9F%E8%83%BD/

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 在一些游戏和活动中,当涉及到社交元素的时候,排行榜可以说是一个很常见的需求场景了,就我们通常见到的排行榜而言,会提供以下基本功能 全球榜单,对所有用户根据积分进行排名,并在榜单上展示前多少 个人排名,用户查询自己所在榜单的位置,并获知周边小伙伴的积分,方便自己比较和超越 实时更新,用户的积分实时更改,榜单也需要实时更新 上面

181108-SpringBoot高级篇Redis之String数据结构的读写 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/11/08/181108-SpringBoot%E9%AB%98%E7%BA%A7%E7%AF%87Redis%E4%B9%8BString%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%9A%84%E8%AF%BB%E5%86%99/

Redis目前常用的存储结构有五种,String字符串,List列表,Set集合,Hash散列,ZSet有序集合;本篇则主要集中在String这个数据结构的读写操作之上 对于String的操作,除了常见的get/set之外,还有一些比较有特色的功能,如用于实现redis分布式锁的setnx/getset方法;用于实现计数的incr/decr方法;位图算法的经典实用场景之bitmap的使用方法等也有

180919-SpringBoot基础篇配置信息之如何读取配置信息 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/09/19/180919-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF%E4%B9%8B%E5%A6%82%E4%BD%95%E8%AF%BB%E5%8F%96%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF/

SpringBoot极大的减少了配置,开一个新项目时,完全可以做到什么配置都不加,就可以直接跑,简单方便的同时,就带来了一个问题 怎么知道这些默认的配置是什么? 如果要修改默认配置怎么办? 如何添加自定义的配置? 如何读取这些配置?

181018-SpringBoot基础篇Bean之条件注入@Condition使用姿势 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/10/18/181018-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87Bean%E4%B9%8B%E6%9D%A1%E4%BB%B6%E6%B3%A8%E5%85%A5-Condition%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/

前面几篇关于Bean的基础博文中,主要集中在Bean的定义和使用,但实际的情况中有没有一些场景是不加载我定义的bean,或者只有满足某些前提条件的时候才加载我定义的Bean呢? 本篇博文将主要介绍bean的加载中,条件注解@conditional的相关使用

190816-SpringBoot系列教程web篇之Freemaker环境搭建 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/08/16/190816-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8Bweb%E7%AF%87%E4%B9%8BFreemaker%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/

现在的开发现状比较流行前后端分离,使用springboot搭建一个提供rest接口的后端服务特别简单,引入spring-boot-starter-web依赖即可。那么在不分离的场景下,比如要开发一个后端使用的控制台,这时候可能并没有前端资源,由javaer自己来客串一把,我希望简单一点,前后端项目都集成在一起,一个jar包运行起来就完事,可以怎么搞呢? 本篇将介绍一下如何使用springboot集

180929-SpringBoot基础篇日志管理之logback配置文件 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/09/29/180929-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87%E6%97%A5%E5%BF%97%E7%AE%A1%E7%90%86%E4%B9%8Blogback%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6/

SpringBoot默认选用logback进行日志管理,前一篇讲述了默认配置日志的参数,然而这些内容比较初级,并不一定能满足我们更加特殊的需求(比如输出到多个不同的配置文件,不同的包路劲选择不同的输出方式等) 所以本篇的内容,主要介绍logback.xml配置文件的语法,虽然与SpringBoot本身没有太多的关联性,但在SpringBoot项目中却非常实用

181024-SpringBoot应用篇之FactoryBean及代理实现SPI机制的实例 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/10/24/181024-SpringBoot%E5%BA%94%E7%94%A8%E7%AF%87%E4%B9%8BFactoryBean%E5%8F%8A%E4%BB%A3%E7%90%86%E5%AE%9E%E7%8E%B0SPI%E6%9C%BA%E5%88%B6%E7%9A%84%E5%AE%9E%E4%BE%8B/

FactoryBean在Spring中算是一个比较有意思的存在了,虽然在日常的业务开发中,基本上不怎么会用到,但在某些场景下,如果用得好,却可以实现很多有意思的东西 本篇博文主要介绍如何通过FactoryBean来实现一个类SPI机制的微型应用框架

190905-SpringBoot系列教程web篇之中文乱码问题解决 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/09/05/190905-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8Bweb%E7%AF%87%E4%B9%8B%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/

前面几篇介绍了如何获取http请求参数,在实际测试的时候发现了一个问题,如果传入的参数为中文的时候,接收没什么问题;但是返回有中文的时候,会出现乱码;接下来我们看一下这个问题如何解决

190623-SpringBoot系列教程JPA之update使用姿势 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/06/23/190623-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8BJPA%E4%B9%8Bupdate%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/

上面两篇博文拉开了jpa使用姿势的面纱一角,接下来我们继续往下扯,数据插入db之后,并不是说就一层不变了,就好比我在银行开了户,当然是准备往里面存钱了,有存就有取(特别是当下银行利率这么低还不如买比特币屯着,截止19年6月22日,btc已经突破1.1w$,可惜没钱买😭)这就是我们今天的主题,数据更新–update的使用姿势

180922-SpringBoot基础篇配置信息之配置刷新 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/09/22/180922-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF%E4%B9%8B%E9%85%8D%E7%BD%AE%E5%88%B7%E6%96%B0/

配置的刷新,从第一篇就提出了这个问题,但是一直都没有说到,那么配置加载完毕之后能否在主动刷新呢? 如果对SpringCloud有了解的话,会直到有个配置中心的微服务,专门就是来做配置远程拉取,当然也支持刷新了,这是否意味着可以支持刷新呢,如果支持该怎么做?

190831-SpringBoot系列教程web篇之如何自定义参数解析器 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/08/31/190831-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8Bweb%E7%AF%87%E4%B9%8B%E5%A6%82%E4%BD%95%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%99%A8/

SpringMVC提供了各种姿势的http参数解析支持,从前面的GET/POST参数解析篇也可以看到,加一个@RequsetParam注解就可以将方法参数与http参数绑定,看到这时自然就会好奇这是怎么做到的呢?我们能不能自己定义一种参数解析规则呢? 本文将介绍如何实现自定义的参数解析,并让其生效

180926-SpringBoot高级篇DB之基本使用 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/09/26/180926-SpringBoot%E9%AB%98%E7%BA%A7%E7%AF%87DB%E4%B9%8B%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/

现在的完整的后端项目,基本上离不开DB、缓存,接下来开始进入DB篇的系列教程,首先确定我们的目标,一个是知道怎么配置,怎么用;接着就是更高级一点的多个数据源的配置,使用不同的方式来实现CURD(如Mybatis, JPDA, MyCat, Hibernate, Jooq等),数据库不得不谈到的事物管理,锁机制,以及高级一点的分库分表等;然后再进一步则是优秀的框架的学习了,大名鼎鼎的MyBaits的

190822-SpringBoot系列教程web篇之Beetl环境搭建 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/08/22/190822-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8Bweb%E7%AF%87%E4%B9%8BBeetl%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/

前面两篇分别介绍了目前流行的模板引擎Freemaker和Thymeleaf构建web应用的方式,接下来我们看一下号称性能最好的国产模板引擎Beetl,如何搭建web环境 本文主要来自官方文档,如有疑问,推荐查看: http://ibeetl.com/guide/#beetl

190421-SpringBoot高级篇WEB之websocket的使用说明 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/04/21/190421-SpringBoot%E9%AB%98%E7%BA%A7%E7%AF%87WEB%E4%B9%8Bwebsocket%E7%9A%84%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E/

常见的web应用大多是提供基础的REST服务,简单来讲就是用户发起一个请求,然后给出反应,可以理解为由客户主动发起的单边操作;那么有没有一种技术是服务端主动发起,与客户端进行交互的? 非常常见的几个需求场景,如聊天室的实现,股票的委托、成交实时刷新,信息推送机制,应用日志实时刷新等用我们传统的web交互方式,就不太容易做到了,本篇博文将介绍下HTML5中引入的WebSocket,可以如何实现客户端

190828-SpringBoot系列教程web篇之Post请求参数解析姿势汇总 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/08/28/190828-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8Bweb%E7%AF%87%E4%B9%8BPost%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%A7%BF%E5%8A%BF%E6%B1%87%E6%80%BB/

作为一个常年提供各种Http接口的后端而言,如何获取请求参数可以说是一项基本技能了,本篇为《190824-SpringBoot系列教程web篇之Get请求参数解析姿势汇总》之后的第二篇,对于POST请求方式下,又可以怎样获取请求参数呢 本篇主要内容包括以下几种姿势 @requestbody json格式 RequestEntity MultipartFile 文件上传

190614-SpringBoot系列教程JPA之新增记录使用姿势 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/06/14/190614-SpringBoot%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8BJPA%E4%B9%8B%E6%96%B0%E5%A2%9E%E8%AE%B0%E5%BD%95%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF/

上一篇文章介绍了如何快速的搭建一个JPA的项目环境,并给出了一个简单的演示demo,接下来我们开始业务教程,也就是我们常说的CURD,接下来进入第一篇,如何添加数据 通过本篇文章,你可以get到以下技能点 POJO对象如何与表关联 如何向DB中添加单条记录 如何批量向DB中添加记录 save 与 saveAndFlush的区别

190407-SpringBoot高级篇JdbcTemplate之数据插入使用姿势详解 | 一灰灰Blog

http://spring.hhui.top/spring-blog/2019/04/07/190407-SpringBoot%E9%AB%98%E7%BA%A7%E7%AF%87JdbcTemplate%E4%B9%8B%E6%95%B0%E6%8D%AE%E6%8F%92%E5%85%A5%E4%BD%BF%E7%94%A8%E5%A7%BF%E5%8A%BF%E8%AF%A6%E8%A7%A3/

db操作可以说是java后端的必备技能了,实际项目中,直接使用JdbcTemplate的机会并不多,大多是mybatis,hibernate,jpa或者是jooq,然后前几天写一个项目,因为db操作非常简单,就直接使用JdbcTemplate,然而悲催的发现,对他的操作并没有预期中的那么顺畅,所以有必要好好的学一下JdbcTemplate的CURD;本文为第一篇,插入数据

181019-SpringBoot基础篇Bean之@ConditionalOnBean与@ConditionalOnClass | 一灰灰Blog

http://spring.hhui.top/spring-blog/2018/10/19/181019-SpringBoot%E5%9F%BA%E7%A1%80%E7%AF%87Bean%E4%B9%8B-ConditionalOnBean%E4%B8%8E@ConditionalOnClass/

bean的条件注入,除了前面一篇博文中介绍的通过@conditional注解配合Condition接口的实现之外,还提供了更多简化的注解使用方式,省略了自己实现Condtion接口,本篇博文主要介绍下面几个常用的注解使用方式 @ConditionalOnBean @ConditionalOnMissingBean @ConditionalOnClass @ConditionalOnMissin

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.