Spring Boot 2系列(五十五):spring-boot-maven-plugin 详细配置

创建 Spring Boot 应用,默认会添加 Maven 插件:spring-boot-maven-plugin。如果该应用的结构比较简单,使用默认的编译打包等,可以不用额外的配置。

若应用结构比较复杂,如父子工程,多层结构等;或要通过命令行动态指定打包方式等等,就需要额外的配置支持了。

该篇结合官方文档对 spring-boot-maven-plugin 的使用配置进行详细描述。另有的 Maven 相关文章,但不是针对 Spring Boot 和 插件的。

Spring Boot Maven Plugin 官网Apache Maven 官网

阅读更多

Utils-Linux环境下获取 IP v4 地址

获取 Linux 环境下当前的 IP v4 的 IP 地址。在不修改 Linux 系统的 host 映射的情况下,InetAddress.getLocalHost().getHostAddress()获取的 IP 地址很可能是 127.0.0.1,而真正想要的是对外 IP 地址。

阅读更多

Spring Boot 2系列(五十四):分布式文件服务 FastDFS 安装与集成

项目需要用到文件服务,外网使用阿里云的 OSS 对象存储,内网优先考虑 FastDFS,备选 go-fastdfs

FastDFS 是一款开源的轻量级的分布式文件系统,功能主要包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了文件大容量存储和高性能访问的问题。FastDFS特别适合以文件为载体的在线服务,如图片、视频、文档等等。–摘自官方说明。

FastDFS 的官方文档极少,不便于快速学习用使用,需要个人整理总结。在源码的根目录下有个 INSTALL 的文件,里面记录的是安装 FastDFS 服务的安装步骤。

Github > FastDFSGitee > FastDFSgo-fastdfs fastdfs-client-java。另可参考 tobato/FastDFS_Client 文档。

阅读更多

Spring Boot 2系列(五十三):Spring Boot 配置外部化

Spring Boot 允许将配置外部化,以便可以在不同的环境中使用相同的应用程序代码。可以使用 properties 文件、YAML文件、环境变量和命令行参数将配置外部化。

属性值可以通过@Value注解直接注入到 Bean 的属性,通过 Spring 的 Environment 抽象访问,或者通过@ConfigurationProperties 绑定到结构化对象。

之前写过 Spring Boot 配置的相关文件,但不完整。本篇基于官方文档(Externalized Configuration)行详细描述。

阅读更多

Spring Cloud(二十一):Gateway 元数据,超时,跨域,HTTPS,监控,问题定位

Spring Cloud Gateway 网关除了核心的路由判断表达式(predicate :有的译为谓词)和过滤器外,还有一些其它的设置,以便于可以更好的配置和应用 Gateway。

例如,元数据配置,超时处理,跨域处理,HTTPS 安全配置,监控/指标 收集,问题定位等。可以添加一些全局配置,可以收集健康数据,便于快速定位问题等等。

阅读更多

Spring Cloud(二十):Gateway 路由匹配表达式工厂,过滤器工厂,全局过滤器,HTTP头过滤器

Spring Cloud Gateway 项目提供了一个基于 Spring 生态体系构建的 API 网关,包括:Spring 5,Spring Boot 2。

Spring Cloud Gateway 旨在提供一种简单而有效的方试将前端请求 URI 路由到后端服务的接口,它还提供了其它的附加实用的功能,例如:安全性,监控/指标,可伸缩性等。

阅读更多

Spring Cloud(十九):Gateway 特性,述语,自动配置与简单应用

即将开发的新平台在网关组件上选择了 GatewaySpring 官方主推 Gateway。Zuul 1 虽然很成熟,但不再维护,Zuul 2 已闭源。

网关组件,不管是 Zuul 还是 Gateway,其核心技术脱离不了 代理请求过滤器。本篇根据 Spring Cloud Gateway 官方文档对其功能,配置,应用进行详细描述。

阅读更多

Go 基础:数组(array)数据类型

数组

Go 数组

示例

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
33
34
35
36
37
38
39
40
41
42
43
44
package main

import "fmt"

// 数组定义
var arr []int

func main() {

// 指定长度,并赋初始值
array1 := [3]int{1, 2, 3}
fmt.Println(array1)

// 不指定长度,赋初始值
array2 := [...]float64{1.2, 2.1, 3.2, 4.3}
fmt.Println(array2)
fmt.Println(len(array2))

// 指定长度,按索引赋初始值,没有指明索引的元素值为类型的默认值
array3 := [3]int{1: 1, 2: 3}
fmt.Println(array3)

// 不指定长茺,按索引赋初始值,没有指明索引的元素值为类型的默认值
array4 := [...]int{1: 1, 2: 2, 4: 6}
fmt.Println(array4, len(array4))

array5 := [...]int{1, 2, 3}
// 取值
b := array5[0]
fmt.Println(b)
// 遍历
for i, v := range array5 {
fmt.Println("i = ", i, "v = ", v)
}

array6 := [...]int{1, 2, 3}
// 长度
arlen := len(array6)
fmt.Println(arlen)
// 遍历
for i := 0; i < len(array6); i++ {
fmt.Println("i=", i, "v=", array6[i])
}
}