配置管理
配置中心我们使用的是 Nacos,我们在之前的步骤中已经安装好了 Nacos。 如果您还没有安装,那么请移步 Nacos 安装 先将 Nacos 安装完成后再进行以下操作。
导入配置
在我们自己的项目安装包中会存在一个 bp-cloud-config-yaml-${ver}.zip
文件,这个文件包含了项目中的默认配置文件。 这里仅提供可让程序基础运行的基础配置文件,配置文件的值需要导入后再修改。
导入前准备工作
- 确保 Nacos 正常启动,并且可以访问。
- 确保 Nacos 中存在一个命名空间,例如:命名空间名称为
bp-cloud-prod
。 - 准备好需要导入的配置文件,例如:
bp-cloud-config-yaml-1.0.0.zip
。
导入配置文件
- 在 nacos 管理工具中找到 配置管理 -> 配置列表
- 选中对应的命名空间,例如:
bp-cloud-prod
,进行配置导入。
修改之前导入的默认配置文件,默认的配置文件的一些信息是不可用的,需要修改。
修改数据库配置
数据库配置文件我们统一在 datasource.yaml 中配置。
以下是 MySQL 的配置信息,其中大部分参数都不需要修改,一般情况下只需要修改 4,12,19-22
行(高亮)部分的配置,其中第 12 行只有在连接 Oracle 数据库时需要修改。
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,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMills,执行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
参数详解
simperfect.datasource.dynamic.enabled
是否启用多租户模式 true-启用 false-禁用。这个配置主要看当前要实施的项目是否为多租户,如果是多租户项目,那么就设置为 true
,如果不是那么就设置为 false
。
何为多租户?
- 多个客户使用同一个应该程序,且需要进行数据隔离。这里的多个客户并不是多个账号,可以理解为多套账号。
- 我们的多租户数据隔离是通过连接不同的数据库来解决的,也就是每个租户的数据是完全隔离的。
- 多租户的数据库会分为主库和租户库,只需配置主库连接信息,会根据不同的租户来切换不同的租户数据库。
spring.datasource.dynamic.druid.validation-query
用来检测连接是否有效的 Sql,要求是一个查询语句,不同的数据库的配置有所不同,详见下表:
数据库 | 连接测试语句 |
---|---|
MySQL | SELECT 'x' |
SqlServer | SELECT 'x' |
达梦 | SELECT 'x' |
Oracle | SELECT 1 FROM DUAL |
spring.datasource.dynamic.datasource.master.driver-class-name
数据库驱动,不同类型的数据库要配置不同的驱动,详见下表:
数据库 | 驱动 |
---|---|
MySQL | com.mysql.cj.jdbc.Driver |
SqlServer | com.microsoft.sqlserver.jdbc.SQLServerDriver |
达梦 | 目前不支持 |
Oracle | 目前不支持 |
配置文件样例
MySQL
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
SqlServer
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.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://127.0.0.1:1533;databaseName=rm3cdb_2023
username: username
password: password
修改 Redis 配置
Redis 配置文件我们统一在 redis.yaml 中配置。
Redis 配置文件配置 Redis 的连接信息,所有需要使用 Redis 的模块都需要引入此配置文件。不同的模式的 Redis 服务连接方式不同
单机模式连接
单机模式、或者使用代理模式的连接,只需修改 host
、port
、password
即可。
注意
当没有密码时,需要删除第 6
行整行删除。
spring:
data:
redis:
host: 127.0.0.1
port: 6379
password: password
connect-timeout: 3000 # 连接超时时间 单位 ms (毫秒)
client-type: lettuce
lettuce:
pool:
enabled: true
min-idle: 0
max-idle: 8
max-active: 8
哨兵模式连接
哨兵模式连接,只需修改 master
、nodes
、password
即可。
注意
哨兵模式下需要两种密码:哨兵密码、数据节点密码。
需要根据服务器情况对密码进行配置:
- 如果数据节点没有密码,需要删除第
4
行整行删除。 - 如果哨兵没有密码,需要删除第
15
行整行删除。
spring:
data:
redis:
password: password
connect-timeout: 3000 # 连接超时时间 单位 ms (毫秒)
client-type: lettuce
lettuce:
pool:
enabled: true
min-idle: 0
max-idle: 8
max-active: 8
sentinel:
master: master
password: password
nodes:
- 127.0.0.1:26379
- 127.0.0.2:36379
- 127.0.0.3:46379
如何查看是否开启了哨兵鉴权
使用 vim 命令查看配置文件 sentinel.conf
中是否配置了 sentinel-pass
# sentinel sentinel-pass <password>
修改文件存储配置
文件存储配置文件我们统一在 file.yaml 中配置。
提示
我们这里只会介绍存储路径,因为多数项目只需要修改存储路径即可。如果需要了解其他配置项,请移步 file.yaml 查看详情。
在项目现场一般会有存储盘专属存储目录,建议将文件存储目录配置到存储盘,这样不会因为存储盘空间不足导致文件存储失败。
simperfect:
file:
storage-path-prefix: /home/simperfect/files/ # 文件存储的真实目录前缀
替换默认头像
有些项目的可以需要替换默认头像,员工默认头像的存储目录在 ${上面配置的根目录}avatar/employee/
,将文件名修改为 avatar.png
放在这个目录即可。
修改 Token 密钥配置
Token 密钥配置文件我们统一在 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 中配置。
用于配置密码加密规则,这个加密规则配置后,所有密码都会使用这个加密规则进行加密,为了用户数据安全无法解密。
注意
为了数据安全,每个项目必须使用不同的加密规则。这个参数设置之后不可修改,否则会导致原始用户无法登录。
simperfect:
encode:
password:
static-salt: # 静态盐值,一个字符串类型的值
number-of-iterations: # 迭代次数,输入一个数字,建议大于 1