0%

一. 简述

Redis 是现在大部分项目中使用最多的 NOSQL 型数据库,其单线程的模型以及内存级别的读取可以给项目适当加加速。Redis 不仅会被当成缓存数据库使用,还会被作为分布式锁(因为是单线程模型)的工具来使用。 Spring-Boot 项目有两种方式使用 Redis ,接下来就是两种方式的使用方式了。
项目:spring-boot-data-redis 地址:https://github.com/WeidanLi/spring-boot-tutorial

二. 开发

(一)连接 redis 数据库

1. 环境准备

使用 Docker 启动 redis 内存数据库:

1
docker run --restart=always -d -p 6379:6379 --name imopei-redis redis redis-server

2. mvn 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
<dependencies>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

</dependencies>
阅读全文 »

一. 简述

MongoDB 是一款新兴的 NO-SQL 数据库,使用的是类 JSON 的数据格式 BSON 进行数据存储。MongoDB 将索引放在内存中,因此查询的时候会大幅度提高速度。在数据库领域中,MongoDB 适合单表的或者说 Column 不需要高度统一的业务处理中,比如:用户娱乐信息表(在商城的用户信息中存储的用户兴趣、用户QQ等等)。MongoDB 对事务支持度不算太高,日常需求需要连表操作的就不要放在 MongoDB 了。 SpringBootMongoDB 提供了 starterJavaer 能够更加简单的操作 MongoDB 数据库的信息。 项目地址:https://github.com/WeidanLi/spring-boot-tutorial 项目演示:spring-boot-data-mongo

二. 开发

(一)MongoDB 环境的准备

1. 使用 Docker 启动 MongoDB 环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3.1'

services:
# 启动MongoDB
mongo:
image: mongo
restart: always
ports:
- 27017:27017
# 启动MongoDB管理后台
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
阅读全文 »

一. 简述

MyBatis 是一个简单粗暴的 orm 框架,与 hibernate 相比起来,速度要快一点,封装也要少一点。如果要说封装程度的话,那就是对查询、返回结果的过程进行封装。 SpringBoot 只要简单的使用 MyBatis 官方提供的 starter ,稍微配置下就可以使用了。

二. 开发

(一) 集成 MyBatis

1. mvn依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>

<build>
<resources>
<resource>
<!-- 让 maven 把 mybatis 的 xml 拷贝到 classes -->
<directory>src/main/resources</directory>
<includes>
<include>**.*</include>
<include>**/**.*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
阅读全文 »

SpringBootJpa 与 DDD 开发

一. 简述

DDD 开发,相信开发几年的工程师一般都会知道这个名词了。还原面向对象的本质,用代码诠释业务。由 Eric Evans 提出但是响应起来并不是很简单。 知道 DDD 的都知道,使用集合型 orm 框架来开发会更加觉得顺手,mybatis 就不大合适了。所以 Spring 公司对 jpa 加入了一些支持。 DDD 几句话并不能讲清楚,这里就只是提供简单 Demo 和思路。
GitHub地址:https://github.com/WeidanLi/spring-boot-tutorial 示例代码:spring-boot-data-jpa-with-ddd

二. 开发

1. 设定情景

首先假定一个订单只能下单一个产品。(如果需要多产品的,需要设计订单主体信息和订单详情信息) 首先设定要开发一个下单的接口,我们下单的时候,订单都会存储一些产品的基本信息。 那么这时候一个订单就是一个实体 Entity (与 jpa 的注解不谋而合),产品信息就是一个 ValueObjectValueObject 一般没有无参构造器,也没有 setter,修改信息都需要进行整体替换) ,订单一旦生成就不能修改产品的基本信息,所以订单实体不能有产品信息的 setter。 OK,业务需求出来了,那么设计订单的时候一般在数据库的表现是订单和产品信息放在一起。

阅读全文 »

SpringBoot 与 jpa 的简单使用

一. 简述

jpa 全称 javax.persistence.annotation ,刚开始是由 hibernate 作者开发,后面被 java 公司收入到规范之中。spring-boot-data-jpa 就是在这套规范上面建立起来的。所以开发的时候默认的 orm 框架就是 hibernate 。 在刚开始接触编程的时候,万事以快为主,但其实现在我感觉开发体验更加重要。mybatis 是个封装比较少的框架,速度会略胜一筹,但 hibernate 开发数据库的时候会显得更加面向对象。当然两者都可以在不同的业务需求中体现其重要性。 简单的开发区别就是,把 hibernate 框架的 repository 当成一个集合来使用,使用起来就更加的得心应手。mybatis 则更加的面向过程,自主控制 SQL 的运行。
GitHub地址:https://github.com/WeidanLi/spring-boot-tutorial 演示项目:spring-boot-data-jpa

二. 开发

我们就通过一个简单用户系统来开发

阅读全文 »

spring-boot 使用 aop

一. 简述

AOP 是一种热门的编程模式,用途十分广泛,可以作为日志的记录、事件订阅。 主要的方式是通过 Aspect 框架,将与项目无太大关联的但是每个方法又都需要做的事情给抽取到一个类里面。然后使用 IOC 容器调用方法之前之后或者抛异常以后,跳入指定的方法执行 Aspect 框架定义了很多种切入模式,基本涵盖编程需求,有跳入方法之前之后执行的,环绕方法执行的,抛异常执行的等。
GitHub地址:https://github.com/WeidanLi/spring-boot-tutorial 项目示例:spring-boot-aop

二. 开发

1. 引入 aop 依赖

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

阅读全文 »

springboot 日志使用(LogBack

一. 简述

web 开发中,大大小小的 bug 是难以避免的。这时候,记录起来的日志就可以用来解决问题或者回滚。当然日志也可以用来查询用户操作的东西,以便甩锅(刚刚说完我就接到了一个产品被认为设置成 330 元的日志查询任务,他应该是 30 元以内的)。
Github地址:https://github.com/WeidanLi/spring-boot-tutorial 项目演示:globle-log-logback

阅读全文 »

springboot 的多配置环境配置

一. 简述

多环境配置,这个东西无论在大厂小厂都是需要的,因为往往我们开发环境、测试环境、生产环境都不一样。数据库连接不说别的,起码 url 是不一样的。当然做法也有很多,可以通过 properties ,也可以通过 mvn 的配置以及 springprofile 方式。 Github地址:https://github.com/WeidanLi/spring-boot-tutorial 演示项目:globle-profiles

二. 开发

1. mvn 依赖

1
2
3
4
5
6
7
8
9
<dependencies>

<!-- 引入 web-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

</dependencies>

感觉这个 web-starter 就是万能的依赖,有了它什么东西都有了。

阅读全文 »

springboot 与 security 保护 web 安全

一. 简述

web 项目,权限的事情就常常伴随着左右,比如某个用户有没有资格访问这个资源,常用的权限框架一般有 shriospring-security 。一般来说,很多公司会选择前者,因为会稍微轻量级(其实我为了写这篇文章稍微学习一下 spring-security 也有这种感觉,spring 公司把用户权限等等都已经提供了接口,不利于我们自己定制化,有好有坏吧,熟悉的话快速开发是个不错的选择)。当然现在我有种比较喜欢 spring 的全家桶的感觉,毕竟开发起来很面向对象。而且自家的产品,跟自己搭配起来,都会很简单的就起来了。
OK,简单的搭建没什么意义,所以这里我提前用了下 jpa ,简单的示例。 业务情景是这样子的:我数据库里面有一堆资源,但是有规定,不同角色只能请求不同的资源,当你的角色不匹配,请求的时候会被拒绝。用户和角色我就没分出来表了,放在同一张表,目的是快速的进行演示。 示例代码:web-security

阅读全文 »

springboot 与接口文档系统 swagger

一. 简述

日常开发中,常常需要接口文档的交互,跟前端也好,跟 app 端的也好。但是如果是手动编写的文档,常常会因为各种原因(当然,懒和忘记是主要原因),会比代码滞后。这样导致的问题就比较严重了,有时候前端写完一个功能了,对接一下,哎呀,出错了。不仅增加了麻烦,还浪费了时间。 当初选择使用 swagger 是因为其界面还不错,清新清新的感觉。现在官网出了很多产品,但还都是需要去利用手动的去更新文档。我最喜欢的还是这种你编码一个接口顺便把文档使用注解的方式给写在了文档上面。可以有效的避免了接口更新但是忘记更新文档的尴尬。

二. 开发

1. mvn 引入所需要的依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<properties>
<springfox-version>2.5.0</springfox-version>
<swagger-core-version>1.5.10</swagger-core-version>
</properties>

<dependencies>

<!-- 引入 web-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 引入 swagger 相关的依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox-version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-core</artifactId>
<version>${swagger-core-version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox-version}</version>
</dependency>


</dependencies>

2. 编写启动器

1
2
3
4
5
6
7
8
9
@SpringBootApplication
@EnableSwagger2 // 启动 swagger 自动配置
public class Swagger2Application {

public static void main(String[] args) {
SpringApplication.run(Swagger2Application.class, args);
}

}
阅读全文 »