Java 配置文件
Java 服务我们主要使用 spring cloud 框架,配置文件分为三部分:引导程序配置文件(bootstrap.yml)、应用配置文件(application.yml)、存储在配置中心内的配置文件(通用的数据源配置文件 - datasource.yaml、应用专属配置文件 - ${应用名}.yaml)。
引导程序配置文件(bootstrap.yml)
引导程序配置文件会在程序启动初期生效,主要配置应用程序端口、应用名、注册中心、配置中心、日志输出等信息。
应用程序端口
每个应用程序的端口是固定的,详情查看内部文档,配置方式如下:
server:
port: 8000
应用名称
每个应用程序的名称是固定的,详情查看内部文档,配置方式如下:
spring:
application:
name: basic-paper-gateway
注册中心与配置中心
注册中心和配置中心我们都是用 nacos,不同环境区分使用 namespace
,我们一般不会使用到 group
,所以不用配置,使用默认值即可。配置方式如下所示:
spring:
cloud:
nacos:
discovery:
server-addr: @nacos.addr@
namespace: @nacos.namespace@ # 命名空间,用于注册中心、配置中心的数据隔离(在同一个注册中心负责多个环境时极其重要),只读取此命名空间下的配置文件。
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
namespace: ${spring.cloud.nacos.discovery.namespace}
shared-configs:
- data-id: datasource.yaml # 导入通用数据源配置文件
日志存储配置
日志框架我们使用 logback,可以直接在配置文件中配置,配置方式如下所示:
提示
这是目前的方案,以后融合日志收集和告警系统后可能会有修改
logging:
file:
path: @logging.filePath@ # 日志文件输出路径,请配置物理磁盘,防止日志写入延迟导致程序卡顿
bak-path: @logging.fileBakPath@ # 日志文件备份路径,可以配置网盘路径,用于备份使用
name: ${logging.file.path}/bp_customer.log # 日志的名称,非必要请勿修改
charset:
console: UTF-8 # 日志控制台输出编码,非必要请勿修改
file: UTF-8 # 日志文件编码,非必要请勿修改
logback:
rollingpolicy:
file-name-pattern: ${logging.file.bak-path}/bp_customer/${HOSTNAME}/%d{yyyy-MM-dd}/bp_customer.%d{yyyy-MM-dd}.%i.log.gz # 日志备份完整路径,非必要请勿修改
max-file-size: 50MB # 每个日志文件最大大小,非必要请勿修改
clean-history-on-start: true # 是否清理日志,非必要请勿修改
max-history: 90 # 日志留存数量,由于按照日期存储的日志,所以这里可以理解为日志留存时间
pattern:
dateformat: yyyy-MM-dd HH:mm:ss.SSSXXX # 日期格式化,请勿修改
应用配置文件(application.yml)
应用配置文件用于配置框架内的一些配置,正常情况下是一定不用修改的。
关闭堆栈信息返回
关闭 spring boot
当出现请求错误时(如:4xx 等错误)从接口中返回堆栈信息。
server:
error:
include-stacktrace: never
Redis 存储前缀
命名规则为:bp:${模块名}:
simperfect:
redis:
redis-prefix: 'bp:customer:'
mybatis 配置
mybatis:
configuration:
map-underscore-to-camel-case: true # 下划线自动转换为驼峰
jdbc-type-for-null: null
pagehelper:
reasonable: true # 是否启用分页合理化;如果启用,当pageNum<1时,会自动查询第一页的数据,当pageNum>pages时,自动查询最后一页数据;
use-sqlserver2012: true # 当使用 SqlServer 数据库时使用 SqlServer2012 数据库分页方式
count-column: '*' # 用于配置自动 count 查询时的查询列,默认值0,也就是 count(0),Page 对象也新增了 countColumn 参数,可以针对具体查询进行配置。
mapper:
resolve-class: com.simperfect.commons.mapper.resolve.JakartaEntityResolve # 配置解析器为我们自定义的解析器,使其支持 Jakarta API
时间日期格式化
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
mvc:
format:
date-time: yyyy-MM-dd HH:mm:ss
date: yyyy-MM-dd
time: HH:mm:ss
数据源过滤器配置
数据源过滤器是通过 http 请求来切换数据源,有些模块可能不需要,可以配置关闭,如:登录模块
simperfect:
datasource:
dynamic:
datasource-interceptor-enabled: false # 是否启用数据源拦截器,登录模块不需要过滤器,关闭即可
行为验证码配置
有些模块可能需要行为验证功能,如:登录模块
captcha:
# 如果项目中使用到了redis,滑块验证码会自动把验证码数据存到redis中, 这里配置redis的key的前缀,默认是captcha:slider
prefix: 'sp:bp:sso:captcha:slider'
# 验证码过期时间,默认是2分钟,单位毫秒, 可以根据自身业务进行调整
expire:
# 默认缓存时间
default: 60000
# 针对 点选验证码 过期时间设置为 2分钟, 因为点选验证码验证比较慢,把过期时间调整大一些
WORD_IMAGE_CLICK: 20000
# 使用加载系统自带的资源, 默认是 false
init-default-resource: false
cache:
# 缓存控制, 默认为false不开启
enabled: true
# 验证码会提前缓存一些生成好的验证数据, 默认是20
cacheSize: 20
# 缓存拉取失败后等待时间 默认是 5秒钟
wait-time: 5000
# 缓存检查间隔 默认是2秒钟
period: 2000
secondary:
# 二次验证, 默认false 不开启
enabled: true
# 二次验证过期时间, 默认 2分钟
expire: 120000
# 二次验证缓存key前缀,默认是 captcha:secondary
keyPrefix: 'sp:bp:sso:captcha:secondary'
定时任务线程池配置
有些模块需要 spring 定时任务功能,需要配置线程池内线程数量。一般情况下 25 个线程足够了,如果真的对任务的实时性要求非常高,那么可以增大线程数。如:任务调度模块
spring:
task:
scheduling:
pool:
size: 25
配置中心中的公共配置文件
公共配置文件为各个模块都可用的配置文件,如何引用文件详见 配置中心配置 中的 shared-configs
参数。
为什么公共配置要拆分为不同的配置?
- 配置文件是热更新的,为了解耦,不用修改其中一个配置导致所有配置都重新加载
- 为了避免配置的歧义,比如某些模块并不需要引入数据库配置
- 为了方便查找相关配置,分别存储在不同文件可以更快的找到想要的配置
数据源配置文件(datasource.yaml)
数据源配置文件仅配置数据库连接信息,目前为止我们都是使用同一个数据库。数据源的配置是所有模块通用的,所有需要连接数据库的模块都要引入此文件。
提示
- 后续如果存在分库分表的情况,可以添加多个数据源配置文件,不同模块引用不同的数据源配置即可。
- 如果存在特殊模块,不使用通用数据源,可以配置在模块配置文件中,不引用通用数据源配置即可。
simperfect:
datasource:
dynamic:
enabled: true # 是否启用多租户模式 true-启用 false-禁用
spring:
datasource:
dynamic:
druid:
initial-size: 5 # 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
min-idle: 5 # 最小连接池数量
max-active: 20 # 最大连接池数量
validation-query: select 'x' # 用来检测连接是否有效的sql,要求是一个查询语句,MySQL与sqlserver使用select 'x';Oracle使用select 1 from dual。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
test-on-borrow: false # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-while-idle: true # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
pool-prepared-statements: false # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
max-pool-prepared-statement-per-connection-size: -1 # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/rm3cdb_2023?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
username: username
password: password
Redis 配置文件(redis.yaml)
Redis 配置文件配置 Redis 的连接信息,所有需要使用 Redis 的模块都需要引入此配置文件。
spring:
data:
redis:
host: 127.0.0.1
port: 6379
password: password
connect-timeout: 3000 # 连接超时时间 单位 ms (毫秒)
文件配置文件(file.yaml)
文件配置文件需要配置文件存储、访问目录、签发文件访问签名等配置,所有需要文件操作得模块都需要引入(包括导出功能)
simperfect:
file:
storage-path-prefix: d://simperfect/files/ # 文件存储的真实目录前缀
JWT 配置文件(jwt.yaml)
JWT token 密钥配置,用于生成系统中的 token,包括但不限于等于、文件签名等。需要签发、验证签名(token)的模块都需要引用此配置(例:如果需要签发文件下载签名那这个配置是必须的)
注意
为了系统安全考虑,每个项目必须使用不同公钥和私钥,请勿使用网络上的工具生成,如果您无法通过 OpenSSL 生成, 可以使用 basic-paper-tools 工具来生成。
如何安装 OpenSSL 生成密钥对可以移步至 OpenSSL 了解。 如何安装和生成密钥对。生成后可以将对应的公钥、私钥写入配置中。
simperfect:
jwt:
token-timeout: 30m # 登录鉴权 token 的超时时间
key-pair:
public-key: public-key # RSA 公钥 (为了系统安全考虑,不同项目需要配置不同的值)
private-key: private-key # RSA 私钥 (为了系统安全考虑,不同项目需要配置不同的值)
密码加密配置(password-codec.yaml)
用于配置密码加密规则,仅使用到密码加密的模块引用即可,目前用到的模块有 config
和 sso
两个模块,其他模块无需引用
注意
为了数据安全,每个项目必须使用不同的加密规则
simperfect:
encode:
password:
static-salt: # 密码加密静态盐值
number-of-iterations: # 密码加密迭代次数