diff --git a/.run/ruoyi-auth.run.xml b/.run/ruoyi-auth.run.xml index b5377a238..e6ab844bc 100644 --- a/.run/ruoyi-auth.run.xml +++ b/.run/ruoyi-auth.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-gateway.run.xml b/.run/ruoyi-gateway.run.xml index a2b752fe9..ada189c58 100644 --- a/.run/ruoyi-gateway.run.xml +++ b/.run/ruoyi-gateway.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-gen.run.xml b/.run/ruoyi-gen.run.xml index ecd2ca6bf..7c8bb5201 100644 --- a/.run/ruoyi-gen.run.xml +++ b/.run/ruoyi-gen.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-job.run.xml b/.run/ruoyi-job.run.xml index 13e38295c..1f5b24a20 100644 --- a/.run/ruoyi-job.run.xml +++ b/.run/ruoyi-job.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-monitor.run.xml b/.run/ruoyi-monitor.run.xml index 1aae51ffd..8a316c5ec 100644 --- a/.run/ruoyi-monitor.run.xml +++ b/.run/ruoyi-monitor.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-nacos.run.xml b/.run/ruoyi-nacos.run.xml index 4fbf1ec28..6dfb007f8 100644 --- a/.run/ruoyi-nacos.run.xml +++ b/.run/ruoyi-nacos.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-resource.run.xml b/.run/ruoyi-resource.run.xml index cfcb4937b..c3dbc5a48 100644 --- a/.run/ruoyi-resource.run.xml +++ b/.run/ruoyi-resource.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-seata-server.run.xml b/.run/ruoyi-seata-server.run.xml index fad600893..4b7d9433b 100644 --- a/.run/ruoyi-seata-server.run.xml +++ b/.run/ruoyi-seata-server.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-sentinel-dashboard.run.xml b/.run/ruoyi-sentinel-dashboard.run.xml index 417090bc2..be0aa76e0 100644 --- a/.run/ruoyi-sentinel-dashboard.run.xml +++ b/.run/ruoyi-sentinel-dashboard.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-snailjob-server.run.xml b/.run/ruoyi-snailjob-server.run.xml index 03cb21a68..f240908ec 100644 --- a/.run/ruoyi-snailjob-server.run.xml +++ b/.run/ruoyi-snailjob-server.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-system.run.xml b/.run/ruoyi-system.run.xml index d362cc89c..bab982f06 100644 --- a/.run/ruoyi-system.run.xml +++ b/.run/ruoyi-system.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-workflow.run.xml b/.run/ruoyi-workflow.run.xml index 8ac0af262..f0ee1336b 100644 --- a/.run/ruoyi-workflow.run.xml +++ b/.run/ruoyi-workflow.run.xml @@ -2,7 +2,7 @@ - diff --git a/README.md b/README.md index 2ab673b65..09da758dd 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus/blob/master/LICENSE) [![使用IntelliJ IDEA开发维护](https://img.shields.io/badge/IntelliJ%20IDEA-提供支持-blue.svg)](https://www.jetbrains.com/?from=RuoYi-Cloud-Plus)
-[![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-2.3.0--BETA2-success.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus) +[![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-2.3.0-success.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.4-blue.svg)]() [![JDK-17](https://img.shields.io/badge/JDK-17-green.svg)]() [![JDK-21](https://img.shields.io/badge/JDK-21-green.svg)]() diff --git a/pom.xml b/pom.xml index 2084342a4..5e8eb6c81 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ Dromara RuoYi-Cloud-Plus微服务系统 - 2.3.0-BETA2 + 2.3.0 UTF-8 UTF-8 17 @@ -21,7 +21,7 @@ 2024.0.0 3.4.5 3.5.16 - 3.5.10.1 + 3.5.11 3.9.1 4.3.1 2.3 @@ -32,7 +32,7 @@ 5.8.35 3.45.1 2.2.7 - 1.4.0-beta2 + 1.4.0 1.40.0 1.18.36 7.4 diff --git a/ruoyi-api/ruoyi-api-bom/pom.xml b/ruoyi-api/ruoyi-api-bom/pom.xml index 1362c3ee0..52ad81cbc 100644 --- a/ruoyi-api/ruoyi-api-bom/pom.xml +++ b/ruoyi-api/ruoyi-api-bom/pom.xml @@ -15,7 +15,7 @@ - 2.3.0-BETA2 + 2.3.0 diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/form/PasswordLoginBody.java b/ruoyi-auth/src/main/java/org/dromara/auth/form/PasswordLoginBody.java index d077d2be5..31086ab4d 100644 --- a/ruoyi-auth/src/main/java/org/dromara/auth/form/PasswordLoginBody.java +++ b/ruoyi-auth/src/main/java/org/dromara/auth/form/PasswordLoginBody.java @@ -19,14 +19,14 @@ public class PasswordLoginBody extends LoginBody { * 用户名 */ @NotBlank(message = "{user.username.not.blank}") - @Length(min = 2, max = 20, message = "{user.username.length.valid}") + @Length(min = 2, max = 30, message = "{user.username.length.valid}") private String username; /** * 用户密码 */ @NotBlank(message = "{user.password.not.blank}") - @Length(min = 5, max = 20, message = "{user.password.length.valid}") + @Length(min = 5, max = 30, message = "{user.password.length.valid}") private String password; } diff --git a/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml b/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml index a89e7529f..9ff327ba0 100644 --- a/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml @@ -14,7 +14,7 @@ - 2.3.0-BETA2 + 2.3.0 2023.0.1.2 1.8.8 2.3.0 diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml index f01443d6c..ea018a874 100644 --- a/ruoyi-common/ruoyi-common-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-bom/pom.xml @@ -14,7 +14,7 @@ - 2.3.0-BETA2 + 2.3.0 diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/CustomBeanFactoryPostProcessor.java b/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/CustomBeanFactoryPostProcessor.java index 40ad3a2e8..83e0e43a2 100644 --- a/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/CustomBeanFactoryPostProcessor.java +++ b/ruoyi-common/ruoyi-common-dubbo/src/main/java/org/dromara/common/dubbo/config/CustomBeanFactoryPostProcessor.java @@ -1,5 +1,6 @@ package org.dromara.common.dubbo.config; +import org.apache.dubbo.common.constants.CommonConstants; import org.dromara.common.core.utils.StringUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; @@ -35,7 +36,7 @@ public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor, */ @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - String property = System.getProperty("DUBBO_IP_TO_REGISTRY"); + String property = System.getProperty(CommonConstants.DubboProperty.DUBBO_IP_TO_REGISTRY); if (StringUtils.isNotBlank(property)) { return; } @@ -59,6 +60,6 @@ public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor, } } // 设置系统属性 DUBBO_IP_TO_REGISTRY 为获取到的 IP 地址 - System.setProperty("DUBBO_IP_TO_REGISTRY", ip); + System.setProperty(CommonConstants.DubboProperty.DUBBO_IP_TO_REGISTRY, ip); } } diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java index b22e6f987..0e9569677 100644 --- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/utils/ExcelUtil.java @@ -245,9 +245,10 @@ public class ExcelUtil { .registerWriteHandler(new DataWriteHandler(data.get(0).getClass())) .build(); WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); // 单表多数据导出 模板格式为 {.属性} for (T d : data) { - excelWriter.fill(d, writeSheet); + excelWriter.fill(d, fillConfig, writeSheet); } excelWriter.finish(); } @@ -320,7 +321,7 @@ public class ExcelUtil { // 多表导出必须使用 FillWrapper excelWriter.fill(new FillWrapper(map.getKey(), (Collection) map.getValue()), fillConfig, writeSheet); } else { - excelWriter.fill(map.getValue(), writeSheet); + excelWriter.fill(map.getValue(), fillConfig, writeSheet); } } excelWriter.finish(); diff --git a/ruoyi-visual/ruoyi-sentinel-dashboard/src/main/resources/application.properties b/ruoyi-visual/ruoyi-sentinel-dashboard/src/main/resources/application.properties new file mode 100644 index 000000000..b12af6be2 --- /dev/null +++ b/ruoyi-visual/ruoyi-sentinel-dashboard/src/main/resources/application.properties @@ -0,0 +1 @@ +# 覆盖sentinel内置配置 不可删除 diff --git a/script/config/nacos/application-common.yml b/script/config/nacos/application-common.yml index 60150045a..b5357e2db 100644 --- a/script/config/nacos/application-common.yml +++ b/script/config/nacos/application-common.yml @@ -264,7 +264,7 @@ springdoc: # seata配置 seata: # 是否启用 - enabled: true + enabled: false # Seata 应用编号,默认为应用名 application-id: ${spring.application.name} # Seata 事务组编号,用于 TC 集群名 diff --git a/script/config/nacos/ruoyi-snailjob-server.yml b/script/config/nacos/ruoyi-snailjob-server.yml index dfb855c42..51357506f 100644 --- a/script/config/nacos/ruoyi-snailjob-server.yml +++ b/script/config/nacos/ruoyi-snailjob-server.yml @@ -31,8 +31,6 @@ snail-job: job-pull-page-size: 1000 # 服务器端口 server-port: 17888 - # 号段模式下步长配置 - step: 100 # 日志保存时间(单位: day) - log-storage: 90 + log-storage: 7 rpc-type: grpc diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml index b841833ef..5440f001a 100644 --- a/script/docker/docker-compose.yml +++ b/script/docker/docker-compose.yml @@ -27,7 +27,7 @@ services: network_mode: "host" nacos: - image: ruoyi/ruoyi-nacos:2.3.0-BETA2 + image: ruoyi/ruoyi-nacos:2.3.0 container_name: nacos ports: - "8848:8848" @@ -94,7 +94,7 @@ services: network_mode: "host" seata-server: - image: ruoyi/ruoyi-seata-server:2.3.0-BETA2 + image: ruoyi/ruoyi-seata-server:2.3.0 container_name: seata-server ports: - "7091:7091" @@ -133,7 +133,7 @@ services: network_mode: "host" sentinel: - image: ruoyi/ruoyi-sentinel-dashboard:2.3.0-BETA2 + image: ruoyi/ruoyi-sentinel-dashboard:2.3.0 container_name: sentinel environment: TZ: Asia/Shanghai @@ -148,7 +148,7 @@ services: network_mode: "host" ruoyi-monitor: - image: ruoyi/ruoyi-monitor:2.3.0-BETA2 + image: ruoyi/ruoyi-monitor:2.3.0 container_name: ruoyi-monitor environment: # 时区上海 @@ -164,7 +164,7 @@ services: network_mode: "host" ruoyi-snailjob-server: - image: ruoyi/ruoyi-snailjob-server:2.3.0-BETA2 + image: ruoyi/ruoyi-snailjob-server:2.3.0 container_name: ruoyi-snailjob-server environment: # 时区上海 @@ -178,7 +178,7 @@ services: network_mode: "host" ruoyi-gateway: - image: ruoyi/ruoyi-gateway:2.3.0-BETA2 + image: ruoyi/ruoyi-gateway:2.3.0 container_name: ruoyi-gateway environment: # 时区上海 @@ -194,7 +194,7 @@ services: network_mode: "host" ruoyi-auth: - image: ruoyi/ruoyi-auth:2.3.0-BETA2 + image: ruoyi/ruoyi-auth:2.3.0 container_name: ruoyi-auth environment: # 时区上海 @@ -210,7 +210,7 @@ services: network_mode: "host" ruoyi-system: - image: ruoyi/ruoyi-system:2.3.0-BETA2 + image: ruoyi/ruoyi-system:2.3.0 container_name: ruoyi-system environment: # 时区上海 @@ -226,7 +226,7 @@ services: network_mode: "host" ruoyi-gen: - image: ruoyi/ruoyi-gen:2.3.0-BETA2 + image: ruoyi/ruoyi-gen:2.3.0 container_name: ruoyi-gen environment: # 时区上海 @@ -242,7 +242,7 @@ services: network_mode: "host" ruoyi-job: - image: ruoyi/ruoyi-job:2.3.0-BETA2 + image: ruoyi/ruoyi-job:2.3.0 container_name: ruoyi-job environment: # 时区上海 @@ -258,7 +258,7 @@ services: network_mode: "host" ruoyi-resource: - image: ruoyi/ruoyi-resource:2.3.0-BETA2 + image: ruoyi/ruoyi-resource:2.3.0 container_name: ruoyi-resource environment: # 时区上海 @@ -274,7 +274,7 @@ services: network_mode: "host" ruoyi-workflow: - image: ruoyi/ruoyi-workflow:2.3.0-BETA2 + image: ruoyi/ruoyi-workflow:2.3.0 container_name: ruoyi-workflow environment: # 时区上海 diff --git a/script/sql/oracle/oracle_ry_workflow.sql b/script/sql/oracle/oracle_ry_workflow.sql index babe30b48..62563d191 100644 --- a/script/sql/oracle/oracle_ry_workflow.sql +++ b/script/sql/oracle/oracle_ry_workflow.sql @@ -363,3 +363,31 @@ COMMENT ON COLUMN test_leave.create_by IS '创建者'; COMMENT ON COLUMN test_leave.create_time IS '创建时间'; COMMENT ON COLUMN test_leave.update_by IS '更新者'; COMMENT ON COLUMN test_leave.update_time IS '更新时间'; + + +-- for AT mode you must to init this sql for you business database. the seata server not need it. +CREATE TABLE undo_log +( + id NUMBER(19) NOT NULL, + branch_id NUMBER(19) NOT NULL, + xid VARCHAR2(128) NOT NULL, + context VARCHAR2(128) NOT NULL, + rollback_info BLOB NOT NULL, + log_status NUMBER(10) NOT NULL, + log_created TIMESTAMP(0) NOT NULL, + log_modified TIMESTAMP(0) NOT NULL, + PRIMARY KEY (id), + CONSTRAINT ux_undo_log UNIQUE (xid, branch_id) +); +CREATE INDEX ix_log_created ON undo_log(log_created); +COMMENT ON TABLE undo_log IS 'AT transaction mode undo table'; +COMMENT ON COLUMN undo_log.branch_id is 'branch transaction id'; +COMMENT ON COLUMN undo_log.xid is 'global transaction id'; +COMMENT ON COLUMN undo_log.context is 'undo_log context,such as serialization'; +COMMENT ON COLUMN undo_log.rollback_info is 'rollback info'; +COMMENT ON COLUMN undo_log.log_status is '0:normal status,1:defense status'; +COMMENT ON COLUMN undo_log.log_created is 'create datetime'; +COMMENT ON COLUMN undo_log.log_modified is 'modify datetime'; + +-- Generate ID using sequence and trigger +CREATE SEQUENCE UNDO_LOG_SEQ START WITH 1 INCREMENT BY 1; diff --git a/script/sql/postgres/postgresql_ry_config.sql b/script/sql/postgres/postgres_ry_config.sql similarity index 100% rename from script/sql/postgres/postgresql_ry_config.sql rename to script/sql/postgres/postgres_ry_config.sql diff --git a/script/sql/postgres/postgres_ry_workflow.sql b/script/sql/postgres/postgres_ry_workflow.sql index a7e05dbe4..8574118fd 100644 --- a/script/sql/postgres/postgres_ry_workflow.sql +++ b/script/sql/postgres/postgres_ry_workflow.sql @@ -356,3 +356,31 @@ COMMENT ON COLUMN test_leave.create_by IS '创建者'; COMMENT ON COLUMN test_leave.create_time IS '创建时间'; COMMENT ON COLUMN test_leave.update_by IS '更新者'; COMMENT ON COLUMN test_leave.update_time IS '更新时间'; + + +-- for AT mode you must to init this sql for you business database. the seata server not need it. +CREATE TABLE IF NOT EXISTS public.undo_log +( + id SERIAL NOT NULL, + branch_id BIGINT NOT NULL, + xid VARCHAR(128) NOT NULL, + context VARCHAR(128) NOT NULL, + rollback_info BYTEA NOT NULL, + log_status INT NOT NULL, + log_created TIMESTAMP(0) NOT NULL, + log_modified TIMESTAMP(0) NOT NULL, + CONSTRAINT pk_undo_log PRIMARY KEY (id), + CONSTRAINT ux_undo_log UNIQUE (xid, branch_id) +); +CREATE INDEX ix_log_created ON undo_log(log_created); + +COMMENT ON TABLE public.undo_log IS 'AT transaction mode undo table'; +COMMENT ON COLUMN public.undo_log.branch_id IS 'branch transaction id'; +COMMENT ON COLUMN public.undo_log.xid IS 'global transaction id'; +COMMENT ON COLUMN public.undo_log.context IS 'undo_log context,such as serialization'; +COMMENT ON COLUMN public.undo_log.rollback_info IS 'rollback info'; +COMMENT ON COLUMN public.undo_log.log_status IS '0:normal status,1:defense status'; +COMMENT ON COLUMN public.undo_log.log_created IS 'create datetime'; +COMMENT ON COLUMN public.undo_log.log_modified IS 'modify datetime'; + +CREATE SEQUENCE IF NOT EXISTS undo_log_id_seq INCREMENT BY 1 MINVALUE 1 ; diff --git a/script/sql/ry-workflow.sql b/script/sql/ry-workflow.sql index 99640b39e..542d6dee3 100644 --- a/script/sql/ry-workflow.sql +++ b/script/sql/ry-workflow.sql @@ -201,3 +201,17 @@ create table test_leave update_time datetime null comment '更新时间', PRIMARY KEY (id) USING BTREE ) ENGINE = InnoDB COMMENT = '请假申请表'; + + +-- for AT mode you must to init this sql for you business database. the seata server not need it. +CREATE TABLE IF NOT EXISTS undo_log +( + branch_id BIGINT(20) NOT NULL COMMENT 'branch transaction id', + xid VARCHAR(100) NOT NULL COMMENT 'global transaction id', + context VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization', + rollback_info LONGBLOB NOT NULL COMMENT 'rollback info', + log_status INT(11) NOT NULL COMMENT '0:normal status,1:defense status', + log_created DATETIME(6) NOT NULL COMMENT 'create datetime', + log_modified DATETIME(6) NOT NULL COMMENT 'modify datetime', + UNIQUE KEY ux_undo_log (xid, branch_id) +) ENGINE = InnoDB COMMENT ='AT transaction mode undo table';