1. 整合redis
key-value 存储系统,高性能的存储系统。NoSql (not only Sql),操作都是原子的
- 字符串
- 哈希
- 列表
- 集合
- 排列集合
- 位图
- 超文本
pom和配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
spring:
redis:
host: 127.0.0.1
port: 6379
database: 1 #选择 数据库1,其实 正常都是用 0
jedis:
pool:
max-active: 8
max-wait: 1
max-idle: 500
min-idle: 0
timeout: 200
RedisDao
/**
*
*数据操作层的RedisDao 类通过@Repository 注解来注入Spring IoC 容器中, 该类是通过RedisTemplate 来访问Redis的。
* 通过注入StringRedisTemplate 的Bean 来对Redis 数据库中的字符串类型的数据进行操作, 写了两个方法,
* 包括向Redis 中设置String 类型的数据和从Redis中读取String 类型的数据。
*/
@Repository
public class RedisDao {
@Autowired
private StringRedisTemplate template;
//设置
public void setKey(String key,String value){
ValueOperations<String, String> ops = template.opsForValue();
ops.set(key,value,1, TimeUnit.MINUTES);//1分钟过期
}
//读取
public String getValue(String key){
ValueOperations<String, String> ops = this.template.opsForValue();
return ops.get(key);
}
}
进行测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class Tests {
//使用 LoggerFactory
public static Logger logger= LoggerFactory.getLogger(Tests.class);
@Autowired
RedisDao redisDao;
@Test
public void testRedis(){
redisDao.setKey("name","forezp");
redisDao.setKey("age","11");
logger.info(redisDao.getValue("name"));
logger.info(redisDao.getValue("age"));
}
}
docker 或 k8s安装 redis
docker 启动
docker search redis
docker pull redis
docker images
# 启动
docker run -p 6379:6379 -d redis:latest redis-server
docker ps
菜鸟教程:
docker run -p 6379:6379 -v $PWD/data:/data -d redis:3.2 redis-server --appendonly yes
命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
# 使用docker id 进入
docker exec -ti d0b86 redis-cli
docker exec -ti d0b86 redis-cli -h localhost -p 6379 docker exec -ti d0b86 redis-cli -h 127.0.0.1 -p 6379 docker exec -ti d0b86 redis-cli -h 172.17.0.3 -p 6379 // 注意,这个是容器运行的ip,可通过 docker inspect redis_s | grep IPAddress 查看
# 不懂
docker exec -it redis_s redis-cli
docker exec -it redis_s redis-cli -h 192.168.1.100 -p 6379 -a your_password //如果有密码 使用 -a参数
docker run -itd --name redis-test -p 6379:6379 redis
docker exec -it redis-test /bin/bash #可能不行
进入后执行:redis命令 set test 1
k8s启动
kubectl create deployment nginx-deployment --image=nginx --dry-run -o yaml>nginx-deployment.yaml
# 修改 配置文件 或者 执行这个 ,赋值 副本
kubectl scale deployment javademo1 --replicas=3
# 生成 expose的文件
kubectl expose deployment nginx-deployment --name=nginx-service --port=81 --target-port=80 --type=NodePort --dry-run -o yaml>nginx-service.yaml
# 默认 是随机的端口,改配置文件,写死6379也可。
spec:
ports:
- port: 81 #service端口
protocol: TCP
targetPort: 80 #Pod即容器端口
nodePort: 30008 #定义NodePort端口如果不定义会随机生成一个端口
kubectl apply -f nginx-service.yaml
# 查看 随机的端口
kubectl get svc
redis-test NodePort 10.102.207.89 <none> 6379:31646/TCP 41m
swagger
引入pom
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
配置
/**
* @Configuration 注解, 表明是一个配置类,加上@EnableSwagger2 开启Swagger2 的功能
*/
@Configuration
@EnableSwagger2
public class Swagger2 {
/**
* Swagger2 中需要注入一个Docket 的Bean , 该 Bean 包含了apiInfo ,即基本API 文档的描述信息,以及包扫描的基本包名等信息
* @return
*/
@Bean
public Docket createRestApi() {
//Docket apiInfo 。所有的controller 都在 com.forezp.web 下
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.forezp.web"))
.paths(PathSelectors.any())
.build();
}
//api info 标题,说明,url,版本
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("springboot利用swagger构建api文档")
.description("简单优雅的restfun风格,http://blog.csdn.net/forezp")
.termsOfServiceUrl("http://blog.csdn.net/forezp")
.version("1.0")
.build();
}
}
使用注解
@ApiOperation(value="删除用户", notes="根据url的id来指定删除用户")
@RequestMapping(value="/{id}", method= RequestMethod.DELETE)
public String deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
return "success";
}
@ApiIgnore//使用该注解忽略这个API
@RequestMapping(value = "/hi", method = RequestMethod.GET)
public String jsonTest() {
return " hi you!";
}
@ApiOperation(value = "12321",notes = "1231")
@ApiImplicitParams({
@ApiImplicitParam(dataTypeClass = String.class, paramType = "header", name = "Login-Key",required = true, value = "登录标识")
})
@GetMapping(value = "/pick/{carId}")
public ResultDTO pickUpOrFetchOutTime(@PathVariable("carId") String carId) {
}
@ApiModel(description = "组织架构")
@Data
public class OrgaByIdOutModel{
@JsonFormat(shape = JsonFormat.Shape.STRING)
@ApiModelProperty(value = "这个组织架构的ID", dataType = "Long", example = "672")
private Long id;
}
@Slf4j
@Api(value = "测试 controller", tags = "tags上的内容,会显示")
@RestController
@RequestMapping(value = "/ignore", produces = MediaType.APPLICATION_JSON_VALUE)
public class Stay {
}
单个注解讲解
3. 写生成文档的注解
Swagger2 通过注解来生成API 接口文档,文档信息包括接口名、请求方法、参数、返回信息等。通常’悄况下用于生成在线API 文档,以下的注解能够满足基本需求,注解及其描述如下。
@Api : 修饰整个类,用于描述Controller 类。
@ApiOperation :描述类的方法,或者说一个接口。
@ApiParam : 单个参数描述。
@ApiModel :用对象来接收参数。
@ApiProperty :用对象接收参数时,描述对象的一个字段。
@ApiResponse: HTTP 响应的一个描述。
@ApiResponses: HTTP 响应的整体描述。
@Apilgnore :使用该注解,表示Swagger2 忽略这个API 。
@ApiError : 发生错误返回的信息。
@ApiParamlmplicit : 一个请求参数。
@ApiParamsimplicit : 多个请求参数。
@ApiImplicitParams
@ApiImplicitParam
http://localhost:8082/swagger-ui.html