升级服务清单
以下服务或组件升级至 0.9.0.RELEASE
组件
- hzero-parent
- hzero-starter-parent
- hzero-boot-parent
- hzero-plugin-parent (op/saas)
服务
-
hzero-register
-
hzero-config (op/saas)
-
hzero-gateway
-
hzero-gateway-helper
-
hzero-asgard
-
hzero-swagger
-
hzero-oauth
-
hzero-iam (op/saas)
-
hzero-front
-
hzero-platform (op/saas)
-
hzero-file (op/saas)
-
hzero-message (op/saas)
-
hzero-portal (op/saas)
-
hzero-report (op/saas)
-
hzero-scheduler (op/saas)
-
hzero-import (op/saas)
-
hzero-workflow
-
hzero-workflow-editor
服务/组件升级
-
修改 pom.xml,如果 parent 依赖的
hzero-parent
,需修改版本号为0.9.0.RELEASE
;如果是自建的 parent 项目,需将其中的 hzero 服务/组件的版本号修改为0.9.0.RELEASE
<parent> <groupId>org.hzero</groupId> <artifactId>hzero-parent</artifactId> <version>0.9.0.RELEASE</version> </parent>
-
修改依赖的服务版本号
<!-- SAAS 版本 --> <dependency> <groupId>org.hzero</groupId> <artifactId>hzero-xxx-saas</artifactId> <version>0.9.0.RELEASE</version> </dependency> <!-- OP 版本 --> <dependency> <groupId>org.hzero</groupId> <artifactId>hzero-xxx</artifactId> <version>0.9.0.RELEASE</version> </dependency>
-
将服务 jar 包中的配置
application.yml
、bootstrap.yml
拷贝出来覆盖src/main/resources
目录下的配置文件,再更新自己特定的配置 -
对比服务启动类,除一些基础服务需特殊的配置外,其它服务都是标准的结构
启动类标准结构
@EnableHZeroXxxx @EnableDiscoveryClient @SpringBootApplication public class XxxxApplication { public static void main(String[] args) { SpringApplication.run(XxxxApplication.class, args); } }
hzero-gateway
、hzero-gateway-helper
需在 SpringBootApplication 注解中排除 Security 的自动化配置
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
hzero-config
需在 SpringBootApplication 注解中排除 ConfigServer 的自动化配置
@SpringBootApplication(exclude = ConfigServerAutoConfiguration.class)
hzero-config
、hzero-swagger
、hzero-iam
、hzero-asgard
需在 main 方法中加入初始化服务注册监听处理器
public static void main(String[] args) { EurekaEventHandler.getInstance().init(); SpringApplication.run(XxxxApplication.class, args); }
SpringBoot 升级
本次版本升级最大的一个升级是将 Spring boot 版本由 1.5.x
升级至 2.0.6.RELEASE
,Spring cloud 版本由 Dalston.SR4
升级至 Finchley.SR2
,对于非依赖HZERO服务的服务需自行做如下的一些调整
WebSecurity 配置方式变动
-
废弃了配置文件配置的方式
management: port: ×××× security: enabled: × security: basic: enabled: × ignored: ×
-
统一使用 Java 配置的方式,继承
WebSecurityConfigurerAdapter
并实现自定义配置,否则会使用默认配置public class CustomSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) { web .ignoring() .antMatchers("/public"); } @Override protected void configure(HttpSecurity http) throws Exception { // 禁用 security http.httpBasic().disable(); http.csrf().disable(); } }
Eureka 依赖变动
Eureka 的依赖包分离出 eureka-client
和 eureka-server
两个子依赖,用户在使用eureka时需根据情况选择引入eureka-client或eureka-server
-
Spring-Cloud-Dependences 版本为
Dalston.SR4
时,eureka依赖示例:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
-
Spring-Cloud-Dependences 版本为
Finchley.SR2
时,eureka依赖示例:<!-- Eureka 注册中心 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!-- 服务客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
Hystrix依赖变动
-
Spring-Cloud-Dependences 版本为
Dalston.SR4
时,hystrix依赖示例:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>
-
Spring-Cloud-Dependences 版本为
Finchley.SR2
时,hystrix依赖示例:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
Feign依赖变动
-
Spring-Cloud-Dependences 版本为
Dalston.SR4
时,hystrix依赖示例:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
-
Spring-Cloud-Dependences 版本为
Finchley.SR2
时,hystrix依赖示例:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
-
另外,需要注意类的路径也有相应的变动:
org.springframework.cloud.netflix.feign.FeignClient
-> org.springframework.cloud.openfeign.FeignClient
org.springframework.cloud.netflix.feign.EnableFeignClients
-> org.springframework.cloud.openfeign.EnableFeignClients
Actuator路径变动
-
actuator对外暴露的endpoint统一增加了
/actuator
前缀,如:/actuator/info、/actuator/health -
如需开启某些端点的监控,需做如下配置
management: server: port: 8031 endpoints: web: exposure: include: '*'
spring-boot-starter-redis依赖包变动
-
1.x 依赖redis.clients:jedis:2.9.0
-
2.x 取消了该依赖
如果项目使用了该依赖包的类,可以根据情况自行引入redis.clients:jedis
常用配置的路径变动
server.context-path -> server.servlet.context-path
spring.resources.cache-period -> spring.resources.cache.period
spring.redis.pool.max-active -> spring.redis.jedis.pool.max-active
spring.redis.pool.max-idle -> spring.redis.jedis.pool.max-idle
spring.redis.pool.max-wait-> spring.redis.jedis.pool.max-wait
配置文件变动
- SpringBoot 升级到 2.0.6 之后,数据源默认为 Hikari,所以响应的数据源连接池配置需要修改为 hikari 的。
spring:
datasource:
url: ${SPRING_DATASOURCE_URL:jdbc:mysql://db.hzero.org:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false}
username: ${SPRING_DATASOURCE_USERNAME:xxx}
password: ${SPRING_DATASOURCE_PASSWORD:xxx}
hikari:
# 连接池最小空闲连接数
minimum-idle: ${SPRING_DATASOURCE_MINIMUM_IDLE:20}
# 连接池允许的最大连接数
maximum-pool-size: ${SPRING_DATASOURCE_MAXIMUM_POOL_SIZE:200}
# 等待连接池分配连接的最大时长(毫秒)
connection-timeout: ${SPRING_DATASOURCE_CONNECTION_TIMEOUT:30000}
表结构升级
-
从 gitlab 上下载
0.9.0.RELEASE
的数据库脚本和Excel期初数据ssh: ~ git clone git@code.choerodon.com.cn:hzero-hzero/hzero-resource.git https: ~ git clone https://code.choerodon.com.cn/hzero-hzero/hzero-resource.git ~ git checkout 0.9.0.RELEASE
-
请先备份每个库的表结构及数据,便于出问题之后恢复
-
请不要使用之前的
choerodon-tool-liquibase(0.9.x)
工具,更新数据时会有问题,可使用 tool-jar 下提供的工具或执行脚本时自动下载 -
修改
database-init.sh
脚本- 修改 service,指定更新目录,与 groovy 下的目录对应即可
- 修改 数据库 url、username、password
service=hzero_platform schema=$service dir=groovy/$service java -Dspring.datasource.url="jdbc:mysql://db.hzero.org:3306/$schema?useUnicode=true&characterEncoding=utf-8&useSSL=false" \ -Dspring.datasource.username=root \ -Dspring.datasource.password=root \ -Ddata.drop=false \ -Ddata.init=true \ -Ddata.dir=$dir \ -Ddata.update.exclusion=iam_role \ -jar tool-jar/choerodon-tool-liquibase.jar
-
依次更改每个目录,执行此脚本,升级表结构
数据升级
-
在 表结构更新 的基础上,同样修改
database-init.sh
脚本- 修改 service,指定更新目录,与
init-data
下的目录对应即可 - 修改 数据库 url、username、password
- dir 改成
init-data/$service
- 修改
-Ddata.update.exclusion
指定要排除的表或表字段
service=hzero_platform schema=$service dir=init-data/$service java -Dspring.datasource.url="jdbc:mysql://db.hzero.org:3306/$schema?useUnicode=true&characterEncoding=utf-8&useSSL=false" \ -Dspring.datasource.username=root \ -Dspring.datasource.password=root \ -Ddata.drop=false \ -Ddata.init=true \ -Ddata.dir=$dir \ -Ddata.update.exclusion=iam_role,iam_user, \ -jar tool-jar/choerodon-tool-liquibase.jar
- 修改 service,指定更新目录,与
-
注意:更新 hzero-iam 服务的数据时,确定项目是 OP 版本还是 SaaS 版本,目录需指定到具体版本的目录下更新
-
注意:如果是第一次部署 HZERO,可直接执行脚本更新初始化数据,如果是0.8.0升级至0.9.0,需排除部分表的更新,否则会更新已有数据
hzero_platform
-Ddata.update.exclusion=iam_role,fd_organization,iam_user,hiam_user_info,iam_member_role,oauth_client,oauth_ldap,oauth_password_policy,hpfm_permission_range,hpfm_permission_rule,hpfm_permission_rel,hpfm_config,hpfm_code_rule,hpfm_code_rule,hpfm_code_rule_detail,hpfm_static_text,hpfm_static_text_value,hpfm_tenant,hpfm_group
hzero-message
-Ddata.update.exclusion=hmsg_email_server,hmsg_email_property,hmsg_sms_server,hmsg_receive_config,hmsg_receiver_type
hzero_governance、hzero_message、hzero_scheduler、hzero_workflow
需要更新
hzero-file、hzero-import
无需更新
-
依次更改每个目录,执行此脚本,升级数据
数据处理
-
由于更改了编码规则的 key,在
hzero-platform
服务启动前,先删除Redis缓存hpfm:codeRule
(db=1),再启动 hzero-platform -
由于更改了权限的缓存结构,在
hzero-iam
和hzero-gateway-helper
服务启动成功后,需删除Redis缓存hgwh:permissions
(db=4),之后权限会自动刷新 -
由于Zuul路由设置自定义敏感头时必须设置敏感头,所以 oauth 的路由需设置 sensitive_headers 一个默认值
修改 sensitive_headers
update hzero_governance.hsgp_service_route set sensitive_headers = 'none' where path = '/oauth/**'
-
OP 版本,由于只有租户级,需将所有菜单设置为客制化菜单
修改 h_custom_flag
update hzero_platform.iam_menu set h_custom_flag = 1;
-
由于编码规则取消租户级和平台级区分,需将历史数据中平台级修改为租户级
update hzero_platform.hpfm_code_rule set rule_level = 'T' where rule_level = 'P'
-
清除
hzero_platform.iam_menu
表的h_level_path
路径数据,再调用接口重新刷新路径清除 level_path
update hzero_platform.iam_menu set h_level_path = null;
调用 hzero-iam 服务如下接口,初始化 h_level_path
-
清除
hzero_platform.iam_role
表的h_level_path
、h_inherit_level_path
路径数据,再调用接口重新刷新路径清除 level_path
update hzero_platform.iam_role set h_level_path = null, h_inherit_level_path = null;
调用 hzero-iam 服务如下接口,初始化 h_level_path 及 h_inherit_level_path
-
调用 hzero-iam 服务的如下接口,将权限集分配到超级管理员上