# 配置文件
# 单体启动模式
开发SpringBoot应用的时候,通常程序需要在测试环境测试成功后才会上线到生产环境。而测试环境和生产环境的数据库地址、服务器端口等配置都不同。
在为不同环境打jar包时,需要频繁的修改application.yml配置文件,十分麻烦,因此可以采用创建多个配置文件的方法解决这一问题。
比如创建以下三个文件,配置不同环境的地址信息,存放在application.yml同一目录下:
application-dev.yml:本地开发环境
application-test.yml:测试环境
application-prod.yml:生产环境
其中application.yml存放公共配置,可通过修改active切换读取的配置文件,比如spring.profiles.active
的值 dev
改成 test
就是将读取application-dev.yml改为application-test.yml,环境也从本地开发变成了测试环境
如果有重复的则配置一切以application.yml为主,application.yml会覆盖掉application-dev.yml或者application-pro.yml中与application.yml属性一致的配置
# application.yml文件配置示例
具体配置参数说明,请看下文中的配置项说明
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
configuration:
# 不开启驼峰的话,使用@TableField注解
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
jdbc-type-for-null: 'null'
global-config:
banner: false
typeHandlersPackage: com.mediway.hos.app.common.handler.mybatis
spring:
application:
name: oa-runner
profiles:
active: dev
servlet:
multipart:
max-file-size: 10485760
max-request-size: 20MB
main:
allow-circular-references: true
server:
servlet:
context-path: /api
sys:
# # 该配置项于2.5.2版删除,请不要再使用
backendPath:
####不能为空
restfulPath: /openApi
#是否启用自动创建实体
extendEntity:
enable: false
# 日志配置 为空为项目跟目录下的logs 或者指定已经存在的目录
log:
path: /home/logs/hos/
posyspath: C:\
# application-dev.yml文件配置示例
spring:
jackson:
time-zone: GMT+8
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# url: jdbc:mysql://localhost:3306/hos-new?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
# username: root
# password: root
url: jdbc:mysql://114.xxxx.xxxx.6:xxxxx/hos_app_8261?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
username: admin
password: xxxxxx
driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:oracle:thin:@114.242.246.250:8521/XE
# username: HOS_APP_2_DEV
# password: wvB27Mdkw
# driver-class-name: oracle.jdbc.driver.OracleDriver
web-stat-filter:
enabled: true #默认为false,表示不使用WebStatFilter配置,就是属性名去短线
url-pattern: /* #拦截该项目下的一切请求
exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico #对这些请求放行
session-stat-enable: true
principal-session-name: session_name
principal-cookie-name: cookie_name
filter:
wall:
enabled: false
stat:
slow-sql-millis: 1000
log-slow-sql: true
stat-view-servlet: # StatViewServlet配置
enabled: true #默认为false,表示不使用StatViewServlet配置,就是属性名去短线
url-pattern: /druid/* #配置DruidStatViewServlet的访问地址。后台监控页面的访问地址
reset-enable: false #禁用HTML页面上的“重置”功能,会把所有监控的数据全部清空,一般不使用
login-username: admin #监控页面登录的用户名
login-password: 123456 #监控页面登录的密码
allow: 223.71.143.178 #白名单中需要添加访问浏览器的外网ip
#安全攻击防护相关配置
framework:
multi-tenant:
enable: false
#动态数据源开关,默认关闭
dynamic-datasource: false
ignore-table:
- hos_tenant_package
- hos_tenant
- hos_datasource
- hos_tenant_package_resource
hoscache:
##使用的缓存类型,目前支持 redis ehcache,如果使用redis还需要单独设置redis的连接信息
type: redis
ehcachePath: /temp
##缓存前缀,如果多个基于HOS基础平台的产品使用同一个redis,每个产品需要单独定义,否则会缓存冲突
prev: hos-base-
interface-encryption:
#是否全局进行接口签名验证,开启之后对全局的数据进行解密加密
isGlobal: false
#全局下的加密方式,以及单个接口的默认加密方式,支持的方式有 AES、RSA、国密(SM4)
decryptType: SM4
#是否对接口的入参进行解密,全局模式下使用
isDecrypt: false
#对body里面的数据单个解密,还是作为一个整体解密
decryptAll:
# RequestParam(param参数)的参数进行全参数解密
params: false
# RequestBody(body参数)的参数进行全参数解密
body: false
# 解密的参数配置,isGlobal为ture(全局解密),encrypAll为false的情况下,只对单个参数进行解密
decryptParam:
# 对请求RequestParam(param参数)中附加的参数进行解密
params:
- password
# 对RequestBody(body参数)里面的参数进行解密,只支持键值对的JSON
body:
- password
#是否对接口返回的结果进行加密,默认情况只加密data字段的数据
isEncrypt: false
# RSA公钥,用于加密解密
publicKey:
# RSA私钥,用于加密解密
privateKey:
# 秘钥,用于接口数据加解密
secret: 1234567890123456
# 全局情况下,排除的请求
excludeUrl:
- /ceshipost001/*
security:
license:
enable: false
production:
name: HOSBase
version: V2.0.5
#防xss攻击,默认关闭
xss:
enable: false
#防csrf攻击,默认关闭。此处需要注意:csrf开关开启后,除"GET", "HEAD", "TRACE", "OPTIONS"四类请求可以直接通过外,其他请求都会拦截
#由于防csrf采用了token机制,所以要求前端页面传入csrfToken,传入方式有两种:
#方式一:隐藏域 <input type='hidden' name='${_csrf.parameterName}' value='${_csrf.token}'>写法固定;
#方式二:header中传入,如果token保存在session中(默认),则header-name为 X-CSRF-TOKEN,header-value为token具体值;
#如果token保存在cookie中,则header-name为 X-XSRF-TOKEN,header-value为token具体值
csrf:
enable: false
#跨域,默认关闭
cors:
enable: true
#allowed:
#跨域允许来源,可配置多个,在framework.security.cors.enable=true时有效,不配置默认允许所有来源
#origins: https://www.baidu.com,https://www.taobao.com
#跨域允许方法,可配置多个,在framework.security.cors.enable=true时有效,不配置默认允许所有方法
#methods: GET,POST,PUT,DELETE
# 操作日志输出位置:logFile,database 二者可以同时存在,默认为logFile
# logFile表示输出到log文件,database表示输出数据库中的sys_oper_log表中
# 该配置只对OperLog注解生效,与其他日志输出无关
oper-log:
out: database
####jwt 相关
jwt:
# 令牌内容前缀,此处必须修改为自己的
prefix: mediway_
# 签名密钥,必须是32位的长度,为了安全,最好设置成自己的,否则会使用默认的
signKey: mediwaysapowerfulmicroservicearchitectureupgradedandoptimizedfromacommercialproject
server:
port: 8261
tomcat:
relaxed-query-chars: <,>,[,]
smscaptcha:
templateId: 1
smsSp: rly
validField: 1
timeField: 2
pulling:
config:
orgsyn:
interfaceType: restful
restfulUrl: http://10.1.20.150:8367/api/openApi/sync/getOrgData
webserviceUrl: http://10.80.99.222/imedical/web/web.SLYTLCPF.HOS.Soap.GetView.CLS
webserviceMethod: GetView
# 禁止Actuator监控Redis连接
management:
health:
redis:
enabled: false
hos-security:
platform: platform
front-url: http://114.251.235.9:8328 #应用前端页面地址
authentication-uri: http://114.251.235.9:8345 #统一认证地址
login: #登录相关配置
captcha: #图形验证码配置
captcha-type: line
captcha-length: 5
password: #密码相关配置
login-password-encode: BCRYPT #数据库中密码加密方式
login-password-secret: 1234567890123456 #前后端密码传输SM4加密秘钥
token: #token相关配置
access-token-expires-in: 600 #token过期时间,单位:秒
refresh-token-expires-in: 6000 #刷新token过期时间,单位:秒
enable-refresh-token: true #是否开启刷新token
sign-key: 123123 #生成jwt token 签名key
access-token-key: access_token #保存token缓存的前缀
refresh-token-key: refresh_token #保存刷新token缓存的前缀
log-table-name: hos_sys_log_login #登录日志保存表名称
white-list: #认证白名单
- ${sys.restfulPath}/**
- /druid/**
- /license/*
- /loginPageData/*
- /property/is-enable-tenant
- /tenant/select-tenant-by-domain
- /tenant/select-tenant
- /core/system/files/other/**
- /core/system/files/image/**
- /websocket/**
- /favicon.ico
- /v2/api-docs
- /swagger-resources
- /acm/accountAndPWD/validateAccount
- /doc
- /**/*.css
- /**/*.js
- /**/*.png
- /**/*.jpg
- /**/*.jpeg
- /**/*.html
- /**/*.ico
- /**/*.properties
- /**/*.woff
- /**/*.woff2
- /**/*.ttf
- /hos-job-admin/api/registry
- /i18n/language/list-select
- /i18n/element/get-loginPageElements
- /i18n/element/get-login-page-config
- /i18n/config/is-open
- /i18n/static-translation/transByCode
- /poserver.zz
- /posetup.exe
- /sealsetup.exe
- /poserver.zz
- /sys/config/is-open-download-browser
- /login/passwordFree/userInfo
- /org/hos-post/select-post-page
- /file/downloadById
oauth2: #统一认证oauth2登录配置
enable: false #是否开启统一认证登录
state-expire-in: 600 #oauth2登录中state的有效时间,单位:秒
client: #统一认证登录配置
registration:
messaging-client-oidc:
provider: spring #对应下边 provider 的配置,不需要修改
client-id: messaging-client #统一用户平台中创建应用的id
client-secret: secret #统一用户平台中创建应用的秘钥
authorization-grant-type: authorization_code #认证类型,不要修改
redirect-uri: ${hos-security.front-url}/api/security/login/oauth2/code/messaging-client-oidc #回调地址,不要修改
scope: all #统一用户平台中创建应用的作用域
client-name: hos-app #该客户端名称
provider:
spring:
issuer-uri: ${hos-security.authentication-uri}/api #发行地址
authorization-uri: ${hos-security.authentication-uri}/oauth/authorize #获取授权码页面
hos:
functional:
version: professional # 功能版本 不配时默认为专业版 simple/professional/wrought (简版/专业版/精简版)
i18n:
baiduAppId: # 辅助翻译。百度翻译API的appid
baiduSecurityKey: # 辅助翻译。百度翻译API的securityKey
isOpen: true # 是否开启国际化。
isShowSource: true # 开启后,翻译值为空是否显示原文。
send:
smscaptcha:
templateId: 1
smsSp: rly
validField: 1
timeField: 2
mail:
account: 1058039417@qq.com
password: jcvcxhjtbwhbbcei
address: 1058039417@qq.com
host: smtp.qq.com
port: 25
server-url: http://127.0.0.1:8080 #仅为示例。配的当前服务的后端地址(实际项目为代理地址)
posyspath: /home/app/pageoffice5.4/ #打印保存路径 注意区分windows和linux路径
提示
如果要使用集群或负载的,缓存类型
framework.hoscache.type
请使用redis,详细配置参考缓存组件如果业务中使用了消息模块的话,那么Redis和xxl-job也是必须配置的。
如果要配置接口跳过登录验证,请参考配置接口跳过登录验证。
# 微服务
微服务版集成了Nacos做为配置中心,因此配置信息分为两部分存储,一部分是本地配置(bootstrap),另一部分存储在配置中心nacos中,
本地配置一般主要配置服务名称、注册中心、配置中心的远程地址等信息, 远程配置中心一般配置其他的配置信息。
# 本地配置
# 应用名称
通过feign调用此服务时需要和该配置项一致
spring:
application:
# 应用名称,通过feign调用此服务时需要和该配置项一致
name: oa-user-service
# 本地完整文件
bootstrap.yml
spring:
application:
# 应用名称,通过feign调用此服务时需要和该配置项一致
name: oa-user-service
profiles:
active: ${SPRING_PROFILES_ACTIVE:dev}
main:
allow-bean-definition-overriding: true
hos:
cloud:
name: ### 通过feign调用hos-app时的服务名
bootstrap-dev.yml
spring:
cloud:
#naocs配置项
nacos:
config:
# nacos上的配置文件格式
file-extension: yml
# 和nacos的dataId保持一致
prefix: oa-user
# 和nacos的groupId保持一致
group: hos
# nacos的地址,多个以逗号分割
server-addr: ${ENV_NACOS_ADDERSS:192.16.18.196:10011}
# nacos 的命名空间
namespace: ${ENV_DIS_NAMESPACE:demo}
discovery:
group: hos
server-addr: ${ENV_NACOS_ADDERSS:192.16.18.196:10011}
namespace: ${ENV_DIS_NAMESPACE:demo}
server:
port: 8003
# nacos中配置信息
下图为示例代码中在nacos的配置文件,主要分为业务微服务和网关gateway配置
Nacos配置文件中具体配置信息可参考单体中的application.yml、application-dev.yml文件配置信息介绍
# 配置项说明
# mybatis以及maybatis-plus相关配置
如果有需要修改mapper对应的resource下xml文件路径,需要修改mybatis-plus.mapper-locations
具体配置,可以查询其官网
mybatis-plus:
# mapper文件存放地址
mapper-locations: classpath*:/mapper/*/*.xml
configuration:
# 不开启驼峰的话,使用@TableField注解
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 全局配置
global-config:
# 是否开启logo
banner: false
# 配置当前handler可以把库中vachar类型字段查出为null的转为''字符串
typeHandlersPackage: com.mediway.hos.app.common.handler.mybatis
# 更换环境配置文件
如果有多个可变配置信息保存在多个配置文件中,可以通过修改spring.profiles.active
的值,选择对应的环境配置文件
例如:值为dev,则读取的就是application-dev.yml配置文件
# spring信息
spring:
profiles:
# 配置文件 dev
active: dev
# 文件上传限制相关信息需要修改
spring:
servlet:
multipart:
max-file-size: 10485760
max-request-size: 20MB
# 端口及根目录
修改端口,请修改server.port
属性。
erve.servlet.context-path
属性为端口号后紧跟的上下文根目录,
这里进行修改后接口的访问路径, 如:localhost:8367/api/**,前端工程访问后端的地址也需要进行同步修改
server:
port: 8367
servlet:
context-path: /api
# 跳过登录验证接口配置
当自己系统对应的前端需要调用后端接口时,因业务需要跳过登录验证时,请使用以下配置,不建议暴露给外部应用,否则可能产生安全隐患 表示当接口访问路径包含对应前缀时,可跳过登录直接进行访问。
hos-security:
login:
white-list:
- /api/otp-auth/forget-code
- /core/system/files/other/**
- /openApi/**
所有匹配遵循从左到右完全匹配:
- /iam/**:标识访问路径中以iam作为前缀的所有接口:
@RestController
@RequestMapping("/iam/iamLogExamine")
@Api(tags = "")
public class IamLogExamineController extends BaseController<IamLogExamine> {}
- /test/iam/**:标识访问路径中以test/iam作为前缀的所有接口:
@RestController
@RequestMapping("/test/iam/iamLogExamine")
@Api(tags = "")
public class IamLogExamineController extends BaseController<IamLogExamine> {}
# 数据源连接池配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
url: jdbc:mysql://localhost:3306/hos_base_app?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
web-stat-filter:
enabled: true #默认为false,表示不使用WebStatFilter配置,就是属性名去短线
url-pattern: /* #拦截该项目下的一切请求
exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico #对这些请求放行
session-stat-enable: true
principal-session-name: session_name
principal-cookie-name: cookie_name
stat-view-servlet: # StatViewServlet配置
enabled: true #默认为false,表示不使用StatViewServlet配置,就是属性名去短线
url-pattern: /druid/* #配置DruidStatViewServlet的访问地址。后台监控页面的访问地址
reset-enable: false #禁用HTML页面上的“重置”功能,会把所有监控的数据全部清空,一般不使用
login-username: admin #监控页面登录的用户名
login-password: 123456 #监控页面登录的密码
allow: 223.71.143.178 #白名单中需要添加访问浏览器的外网ip
通常我们只修改数据库url,username,password,driver-class-name就可以。其他相关参数请参考 跳转到:数据源连接池
# hos缓存配置
framework:
hoscache:
##使用的缓存类型,目前支持 redis ehcache,如果使用redis还需要单独设置redis的连接信息
type: redis
ehcachePath: /temp
##缓存前缀,如果多个基于HOS基础平台的产品使用同一个redis,每个产品需要单独定义,否则会缓存冲突
prev: hos-base-
具体配置详解,请参考:HOSCache组件
# 接口签名配置
framework:
interface-encryption:
#是否全局进行接口签名验证,开启之后对全局的数据进行解密加密
isGlobal: false
#全局下的加密方式,以及单个接口的默认加密方式,支持的方式有 AES、RSA、国密(SM4)
decryptType: SM4
#是否对接口的入参进行解密,全局模式下使用
isDecrypt: false
#对body里面的数据单个解密,还是作为一个整体解密
decryptAll:
# RequestParam(param参数)的参数进行全参数解密
params: false
# RequestBody(body参数)的参数进行全参数解密
body: false
# 解密的参数配置,isGlobal为ture(全局解密),encrypAll为false的情况下,只对单个参数进行解密
decryptParam:
# 对请求RequestParam(param参数)中附加的参数进行解密
params:
- password
# 对RequestBody(body参数)里面的参数进行解密,只支持键值对的JSON
body:
- password
#是否对接口返回的结果进行加密,默认情况只加密data字段的数据
isEncrypt: false
# RSA公钥,用于加密解密
publicKey:
# RSA私钥,用于加密解密
privateKey:
# 秘钥,用于接口数据加解密
secret: 1234567890123456
# 全局情况下,排除的请求
excludeUrl:
- /ceshipost001/*
具体配置详解,请参考:接口加解密组件
# hos安全配置
framework:
#安全攻击防护相关配置
security:
#防xss攻击,默认关闭
xss:
enable: false
#防csrf攻击,默认关闭。此处需要注意:csrf开关开启后,除"GET", "HEAD", "TRACE", "OPTIONS"四类请求可以直接通过外,其他请求都会拦截
#由于防csrf采用了token机制,所以要求前端页面传入csrfToken,传入方式有两种:
#方式一:隐藏域 <input type='hidden' name='${_csrf.parameterName}' value='${_csrf.token}'>写法固定;
#方式二:header中传入,如果token保存在session中(默认),则header-name为 X-CSRF-TOKEN,header-value为token具体值;
#如果token保存在cookie中,则header-name为 X-XSRF-TOKEN,header-value为token具体值
csrf:
enable: false
#跨域,默认关闭
cors:
enable: true
#allowed:
#跨域允许来源,可配置多个,在framework.security.cors.enable=true时有效,不配置默认允许所有来源
#origins: https://www.baidu.com,https://www.taobao.com
#跨域允许方法,可配置多个,在framework.security.cors.enable=true时有效,不配置默认允许所有方法
#methods: GET,POST,PUT,DELETE
具体配置详解,请参考:安全配置
# license配置
framework:
security:
license:
# 是否开启生产许可认证,缺省值为true。该配置项在客户的环境中必须删除,不能出现在配置文件中
enable: true
production:
# BOS中维护的产品名,必填项,根据开发的产品维护
name: HOS-PORTAL
# BOS中维护的产品版本,必填项,根据开发的产品维护
version: R1.0.0
# 国际化配置
hos:
i18n:
baiduAppId:
baiduSecurityKey:
isOpen: true
isShowSource: true
# hos操作日志配置
framework:
# 操作日志输出位置:logFile,database 二者可以同时存在,默认为logFile
# logFile表示输出到log文件,database表示输出数据库中的sys_oper_log表中
# 该配置只对OperLog注解生效,与其他日志输出无关
oper-log:
out: database
具体配置详解,请参考:日志
# hos登录配置
hos-security:
platform: platform
front-url: http://114.251.235.9:8328 #应用前端页面地址
authentication-uri: http://114.251.235.9:8345 #统一认证地址,当hos-security.oauth2.enable=true时需要配置
login: #登录相关配置
password: #密码相关配置
login-password-encode: BCRYPT #数据库中密码加密方式
login-password-secret: 1234567890123456 #前后端密码传输SM4加密秘钥
token: #token相关配置
access-token-expires-in: 6000 #token过期时间,单位:秒
refresh-token-expires-in: 12000 #刷新token过期时间,单位:秒
enable-refresh-token: true #是否开启刷新token
access-token-key: access_token #保存token缓存的前缀
refresh-token-key: refresh_token #保存刷新token缓存的前缀
log-table-name: hos_sys_log_login #登录日志保存表名称
white-list: #认证白名单
- ${sys.restfulPath}/**
- /druid/**
- /license/*
- /loginPageData/*
- /property/is-enable-tenant
- /tenant/select-tenant-by-domain
- /tenant/select-tenant
- /core/system/files/other/**
- /core/system/files/image/**
- /websocket/**
- /favicon.ico
- /v2/api-docs
- /swagger-resources
- /acm/accountAndPWD/validateAccount
- /doc
- /**/*.css
- /**/*.js
- /**/*.png
- /**/*.jpg
- /**/*.jpeg
- /**/*.html
- /**/*.ico
- /**/*.properties
- /**/*.woff
- /**/*.woff2
- /**/*.ttf
- /hos-job-admin/api/registry
- /i18n/language/list-select
- /i18n/element/get-loginPageElements
- /i18n/element/get-login-page-config
- /i18n/config/is-open
- /i18n/static-translation/transByCode
- /poserver.zz
- /posetup.exe
- /sealsetup.exe
- /poserver.zz
- /sys/config/is-open-download-browser
- /login/passwordFree/userInfo
- /org/hos-post/select-post-page
oauth2: #统一认证oauth2登录配置
enable: false #是否开启统一认证登录
state-expire-in: 600 #oauth2登录中state的有效时间,单位:秒
client: #统一认证登录配置,当hos-security.oauth2.enable=true时需要配置
registration:
messaging-client-oidc:
provider: spring #对应下边 provider 的配置,不需要修改
client-id: messaging-client #统一用户平台中创建应用的id
client-secret: secret #统一用户平台中创建应用的秘钥
authorization-grant-type: authorization_code #认证类型,不要修改
redirect-uri: ${hos-security.front-url}/api/security/login/oauth2/code/messaging-client-oidc #回调地址,不要修改
scope: openid #统一用户平台中创建应用的作用域
client-name: hos-app #该客户端名称
provider:
spring:
issuer-uri: ${hos-security.authentication-uri}/api #发行地址
authorization-uri: ${hos-security.authentication-uri}/oauth/authorize #获取授权码页面
# 注册中心nacos
使用spring cloud Alibaba中nacos做注册中心时,需要配置nacos的远程地址、命名空间、组名, 具体介绍见 nacos相关介绍
spring:
cloud:
#naocs配置项
nacos:
discovery:
group: hos
# NacosServer 启动监听的ip地址和端口
server-addr: ${ENV_NACOS_ADDERSS:192.16.18.196:10011}
namespace: ${ENV_DIS_NAMESPACE:demo}
# 配置中心nacos
使用spring cloud Alibaba中nacos做配置中心时,需要配置nacos的远程地址、命名空间、组名,以及nacos配置中心上对应的文件名及文件格式, 具体介绍见nacos相关介绍
spring:
cloud:
#naocs配置项
nacos:
config:
# nacos上的配置文件格式
file-extension: yml
# 和nacos的dataId保持一致
prefix: oa-user
# 和nacos的groupId保持一致
group: hos
# nacos的地址,多个以逗号分割
server-addr: ${ENV_NACOS_ADDERSS:192.16.18.196:10011}
# nacos 的命名空间
namespace: ${ENV_DIS_NAMESPACE:demo}
← 工程结构 hos-app引用说明 →