diff --git a/README.md b/README.md
index a41cb5dc47279cd04e1e627a2bfa64e85df25925..99395aa76938e3c99be8647798d2f930bfda8988 100644
--- a/README.md
+++ b/README.md
@@ -4,25 +4,57 @@
-
### 🎁简介
-🔥🔥🔥dorive是一个轻量化、渐进式开发框架,帮助开发者,快速落地领域驱动式项目。
+🔥🔥🔥dorive是一个轻量化、渐进式、领域驱动式开发框架,帮助开发者,开发**可持续演进的复杂应用**。
dorive = domain + driven 或 do + driven ,是原公司项目沉淀后的开源库。
“do”表明了一种态度,只有付诸行动,才能有所收获。
-### 📚3M架构
+### 🧱领域驱动
-领域驱动设计的核心是高内聚、低耦合。为了实现它,现代应用架构正朝着微服务化、模块化、模型化方向发展。
+领域驱动是一种软件开发方式。
-3M架构 = Microservices + Module + Model
+解决痛点:
-### 📦模块化
+- **腐化**(代码组织混乱,逻辑互相渗透)
+- **僵化**(直接依赖过多,修改困难)
+
+实施方法:
+
+- 通过**业务划界**,理清业务之间的关系。
+- 通过**业务建模**,表达真实的业务逻辑。
+
+核心:
+
+- **高内聚**
+- **低耦合**
+
+### 🏗️架构实现
+
+领域驱动的几种架构实现方式:
+
+- 分层架构(Layered Architecture)
+- 六边形架构(Hexagonal Architecture)
+- 清洁架构(Clean Architecture)
+- 事件驱动架构(Event-Driven Architecture, EDA)
+- CQRS(命令查询职责分离)
+- 微服务架构(Microservices + DDD)
+
+- **3M架构(Microservices + Module + Model)**
+
+### 3️⃣3M架构
+
+一种新的架构实现。在分层架构、微服务架构的基础上,提出将项目**模块化、模型化**,从而达到业务自由组合,灵活定制的效果。
+
+- 逻辑架构图:[logic.png](https://gitee.com/digital-engine/dorive/blob/3.5.2/doc/img/logic.png)
+- 物理架构图:[physical.png](https://gitee.com/digital-engine/dorive/blob/3.5.2/doc/img/physical.png)
+
+### 📦模块化(module)
一个应用系统由一个或多个模块组成。
@@ -36,7 +68,7 @@ dorive = domain + driven 或 do + driven ,是原公司项目沉淀后的开源
- 模块可选择向外暴露的bean。
- 模块之间不直接依赖,可通过接口与事件进行交互。
-### 🛠️模型化
+### 🛠️模型化(model)
同个领域内的多个模块共享一个边界上下文。
@@ -66,28 +98,44 @@ dorive开发框架实现了模块化、模型化的全部特性,你可以有
- 持续演进,技术负债低。
- 代码生成,开发快。
-### 💬使用建议
+### 🚅快速开始
-基础依赖说明:
-
-| 依赖库 | 版本 | 说明 |
-| ------------------------- | ------ | ------------------- |
-| spring-boot-starter-web | 2.7.18 | spring boot web集成 |
-| spring-tx | 5.3.31 | spring事务管理 |
-| hutool-all | 5.8.25 | 工具库 |
-| mybatis-plus-boot-starter | 3.5.7 | 数据库框架 |
-
-如果是新项目,你将毫无负担地使用它:
+Maven引入:
```xml
com.gitee.digital-engine
dorive-spring-boot-starter
- 3.5.1
+ 3.5.2
```
-如果是存量项目,你还需要考虑兼容性:
+### 💡项目案例
+
+项目地址:[dorive-example](https://gitee.com/digital-engine/dorive-example)
+
+### 📝说明文档
+
+文档地址:[Gitee wiki](https://gitee.com/digital-engine/dorive/wikis/pages)
+
+### 🌿版本说明
+
+例如:3.5.1(格式A.B.C)
+
+- A-架构版本:架构重构时增加,不保证兼容性。
+- B-特性版本:新特性引入时增加。
+- C-迭代版本:功能优化、bug修复时增加。
+
+### 💬依赖项
+
+| 依赖库 | 版本 | 说明 |
+| ------------------------- | ------ | ------------------- |
+| spring-boot-starter-web | 2.7.18 | spring boot web集成 |
+| spring-tx | 5.3.31 | spring事务管理 |
+| hutool-all | 5.8.25 | 工具库 |
+| mybatis-plus-boot-starter | 3.5.7 | 数据库框架 |
+
+### 🤝兼容性
| 模块 | 说明 | 模块 | 适配Spring Boot版本 |
| -------------------------- | ---------------- | ------ | ------------------- |
@@ -104,25 +152,11 @@ dorive开发框架实现了模块化、模型化的全部特性,你可以有
| dorive-autoconfigure | 自动配置实现 | | |
| dorive-spring-boot-starter | 启动器 | | |
-### 🌿分支版本说明
-
-例如:3.5.1(格式A.B.C)
-
-- A-架构版本:架构重构时增加,不保证兼容性。
-- B-特性版本:新特性引入时增加。
-- C-迭代版本:功能优化、bug修复时增加。
-
-### 📝文档
-
-wiki地址:
-
-- [Gitee wiki](https://gitee.com/digital-engine/dorive/wikis/pages)
-
### 🐞bug反馈与建议
提交问题反馈请说明正在使用的JDK版本、dorive版本,以及依赖库版本。
-- [Gitee issue](https://gitee.com/digital-engine/dorive/issues)
+页面地址:[Gitee issue](https://gitee.com/digital-engine/dorive/issues)
### 🙏🏻特别感谢
diff --git a/doc/img/physical.png b/doc/img/physical.png
index d43c96b57af9cd8bb23877d3e064ab3b637af66c..4c2240ee0b65e501dbc4778b8d87065905aa4daa 100644
Binary files a/doc/img/physical.png and b/doc/img/physical.png differ
diff --git a/dorive-api/pom.xml b/dorive-api/pom.xml
index 8a4a7517922bfdf59fa941bd7258c5a502f602a6..ed5c73c13cac2684652b64e22681bdb38f08159f 100644
--- a/dorive-api/pom.xml
+++ b/dorive-api/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-api
@@ -14,10 +14,6 @@
org.springframework.boot
spring-boot-starter
-
- org.projectlombok
- lombok
-
org.apache.commons
commons-lang3
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/Order.java b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/OrderBy.java
similarity index 93%
rename from dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/Order.java
rename to dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/OrderBy.java
index 3f882063a60bad14ad95c1f56265421c00794b9b..957efc3e918acb586469fc7221d380089ceb2882 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/Order.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/annotation/core/OrderBy.java
@@ -31,17 +31,17 @@ import java.lang.annotation.Target;
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
-public @interface Order {
+public @interface OrderBy {
/**
* 排序字段
*/
- String sortBy() default "";
+ String field() default "";
/**
* 排序方式
*/
- String order() default "";
+ String sort() default "";
}
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java b/dorive-api/src/main/java/com/gitee/dorive/api/api/common/BoundedContextAware.java
similarity index 90%
rename from dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java
rename to dorive-api/src/main/java/com/gitee/dorive/api/api/common/BoundedContextAware.java
index 0433a048e1060050a2c792cc91a5f6490aa5e6e1..e985c176d3330119f73c5ed2e6b368552bcaf14f 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/api/BoundedContextAware.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/api/common/BoundedContextAware.java
@@ -15,9 +15,9 @@
* limitations under the License.
*/
-package com.gitee.dorive.api.api;
+package com.gitee.dorive.api.api.common;
-import com.gitee.dorive.api.entity.BoundedContext;
+import com.gitee.dorive.api.entity.common.BoundedContext;
public interface BoundedContextAware {
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/constant/core/Order.java b/dorive-api/src/main/java/com/gitee/dorive/api/constant/core/Sort.java
similarity index 97%
rename from dorive-api/src/main/java/com/gitee/dorive/api/constant/core/Order.java
rename to dorive-api/src/main/java/com/gitee/dorive/api/constant/core/Sort.java
index 3c47a6d3103e1125cda6b65c0dd3c749abd73732..5eac131e903078a34ac8c97e6682cd48f86e11d0 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/constant/core/Order.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/constant/core/Sort.java
@@ -17,7 +17,7 @@
package com.gitee.dorive.api.constant.core;
-public interface Order {
+public interface Sort {
String ASC = "ASC";
String DESC = "DESC";
}
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/BoundedContext.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/common/BoundedContext.java
similarity index 90%
rename from dorive-api/src/main/java/com/gitee/dorive/api/entity/BoundedContext.java
rename to dorive-api/src/main/java/com/gitee/dorive/api/entity/common/BoundedContext.java
index d770c46d60c09fe1f982da7a93c0409f9576b1e5..7530e928036279b944e9beaf3cb8cee7ae08816e 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/BoundedContext.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/common/BoundedContext.java
@@ -15,12 +15,9 @@
* limitations under the License.
*/
-package com.gitee.dorive.api.entity;
-
-import lombok.NoArgsConstructor;
+package com.gitee.dorive.api.entity.common;
import java.util.Properties;
-@NoArgsConstructor
public class BoundedContext extends Properties {
}
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/FieldEntityDefinition.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/FieldEntityDefinition.java
index 6e23921e3bd4bf8dd6c526a4995b98baaddcf3d2..8a39182b43040d22ab90339c0073b506d6e27e39 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/FieldEntityDefinition.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/FieldEntityDefinition.java
@@ -18,7 +18,7 @@
package com.gitee.dorive.api.entity.core;
import com.gitee.dorive.api.entity.core.def.BindingDef;
-import com.gitee.dorive.api.entity.core.def.OrderDef;
+import com.gitee.dorive.api.entity.core.def.OrderByDef;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -29,7 +29,7 @@ import java.util.List;
public class FieldEntityDefinition extends EntityDefinition {
private Field field;
private List bindingDefs;
- private OrderDef orderDef;
+ private OrderByDef orderByDef;
public java.lang.reflect.Field getJavaField() {
return field != null ? field.getField() : null;
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/OrderDef.java b/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/OrderByDef.java
similarity index 81%
rename from dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/OrderDef.java
rename to dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/OrderByDef.java
index a52719b98d5e8c86c031659446a4383be5ee08bd..3ed9ff351ee9857e1afde6a6dd907b50df782b75 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/OrderDef.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/entity/core/def/OrderByDef.java
@@ -18,7 +18,7 @@
package com.gitee.dorive.api.entity.core.def;
import cn.hutool.core.bean.BeanUtil;
-import com.gitee.dorive.api.annotation.core.Order;
+import com.gitee.dorive.api.annotation.core.OrderBy;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -30,12 +30,12 @@ import java.util.Map;
@Data
@NoArgsConstructor
@AllArgsConstructor
-public class OrderDef {
- private String sortBy;
- private String order;
+public class OrderByDef {
+ private String field;
+ private String sort;
- public static OrderDef fromElement(AnnotatedElement element) {
- Map attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(element, Order.class);
- return attributes != null ? BeanUtil.copyProperties(attributes, OrderDef.class) : null;
+ public static OrderByDef fromElement(AnnotatedElement element) {
+ Map attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(element, OrderBy.class);
+ return attributes != null ? BeanUtil.copyProperties(attributes, OrderByDef.class) : null;
}
}
diff --git a/dorive-api/src/main/java/com/gitee/dorive/api/impl/core/EntityDefinitionResolver.java b/dorive-api/src/main/java/com/gitee/dorive/api/impl/core/EntityDefinitionResolver.java
index 1a8cbe698f2bce6fd6d09e7d5cbf25cd11b4a93e..4025ddc6f7b98637af81a099742a0e323bc44f79 100644
--- a/dorive-api/src/main/java/com/gitee/dorive/api/impl/core/EntityDefinitionResolver.java
+++ b/dorive-api/src/main/java/com/gitee/dorive/api/impl/core/EntityDefinitionResolver.java
@@ -163,7 +163,7 @@ public class EntityDefinitionResolver {
FieldEntityDefinition fieldEntityDefinition = BeanUtil.copyProperties(entityDefinition, FieldEntityDefinition.class);
fieldEntityDefinition.setField(myField);
fieldEntityDefinition.setBindingDefs(BindingDef.fromElement(field));
- fieldEntityDefinition.setOrderDef(OrderDef.fromElement(field));
+ fieldEntityDefinition.setOrderByDef(OrderByDef.fromElement(field));
EntityDef entityDef = fieldEntityDefinition.getEntityDef();
EntityDef newEntityDef = BeanUtil.copyProperties(entityDef, EntityDef.class);
diff --git a/dorive-autoconfigure/pom.xml b/dorive-autoconfigure/pom.xml
index 817b07c5de1e39956aa106eb367ac5be5b89493f..e0d4462b5b0bb033cb3c60807b0803351ec66283 100644
--- a/dorive-autoconfigure/pom.xml
+++ b/dorive-autoconfigure/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-autoconfigure
diff --git a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/web/DoriveWebConfiguration.java b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/web/DoriveWebConfiguration.java
index a99703209ee51bb2e6ad4688756adf5b49a4d3f5..1d51bcae7e5f045859dba5ca46290ab8cc739a59 100644
--- a/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/web/DoriveWebConfiguration.java
+++ b/dorive-autoconfigure/src/main/java/com/gitee/dorive/autoconfigure/web/DoriveWebConfiguration.java
@@ -18,6 +18,7 @@
package com.gitee.dorive.autoconfigure.web;
import com.gitee.dorive.web.impl.advice.ParameterControllerAdvice;
+import com.gitee.dorive.web.impl.banner.BannerPrinter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
@@ -31,4 +32,9 @@ public class DoriveWebConfiguration {
return new ParameterControllerAdvice();
}
+ @Bean("bannerPrinterV3")
+ public static BannerPrinter bannerPrinter() {
+ return new BannerPrinter();
+ }
+
}
diff --git a/dorive-core/pom.xml b/dorive-core/pom.xml
index 3e9dfaa152e75c539ca5ab0af7aa1d1630b54b02..c401baa54b1f4134e1ce7b6bbff571e801030904 100644
--- a/dorive-core/pom.xml
+++ b/dorive-core/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-core
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Example.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Example.java
index 736c75ac71139414cc7a36d91bebb3ca3ead1457..11345e925ca2c22dfaf67243192572b5c58a8a5d 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Example.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/Example.java
@@ -18,7 +18,7 @@
package com.gitee.dorive.core.entity.executor;
import com.gitee.dorive.api.constant.core.Operator;
-import com.gitee.dorive.api.constant.core.Order;
+import com.gitee.dorive.api.constant.core.Sort;
import com.gitee.dorive.core.impl.util.StringUtils;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -133,12 +133,12 @@ public class Example {
}
public Example orderByAsc(String... fields) {
- orderBy = new OrderBy(Arrays.asList(fields), Order.ASC);
+ orderBy = new OrderBy(Arrays.asList(fields), Sort.ASC);
return this;
}
public Example orderByDesc(String... fields) {
- orderBy = new OrderBy(Arrays.asList(fields), Order.DESC);
+ orderBy = new OrderBy(Arrays.asList(fields), Sort.DESC);
return this;
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/OrderBy.java b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/OrderBy.java
index 9c874e6dfea13198bf1b81864b74873a2813bedc..f4441599bcdc2ec46ca8271740ef2fb4b992b79e 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/OrderBy.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/entity/executor/OrderBy.java
@@ -28,11 +28,11 @@ import java.util.List;
public class OrderBy {
private List properties;
- private String order;
+ private String sort;
@Override
public String toString() {
- return "ORDER BY " + StrUtil.join(",", properties) + " " + order.toUpperCase();
+ return "ORDER BY " + StrUtil.join(",", properties) + " " + sort.toUpperCase();
}
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java
index 5367f246115df234bd2b36addeb404913c8c3d99..fd88667fbaa9d8b1f2fe28b917afbec468bc60ff 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/factory/DefaultEntityFactory.java
@@ -26,7 +26,7 @@ import com.gitee.dorive.core.api.context.Context;
import com.gitee.dorive.core.api.factory.EntityAdapter;
import com.gitee.dorive.core.api.factory.EntityFactory;
import com.gitee.dorive.core.api.factory.EntityMapper;
-import com.gitee.dorive.api.entity.BoundedContext;
+import com.gitee.dorive.api.entity.common.BoundedContext;
import com.gitee.dorive.core.entity.common.EntityStoreInfo;
import com.gitee.dorive.core.entity.enums.Domain;
import com.gitee.dorive.core.entity.factory.FieldConverter;
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java
index 8ddee9c5074ac2e4cecbcb1c3c8111d38aed8113..a647e654a23ddbf2e89a727edaac0ec06b4b0332 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/repository/AbstractContextRepository.java
@@ -19,12 +19,12 @@ package com.gitee.dorive.core.impl.repository;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
-import com.gitee.dorive.api.api.BoundedContextAware;
-import com.gitee.dorive.api.constant.core.Order;
+import com.gitee.dorive.api.api.common.BoundedContextAware;
+import com.gitee.dorive.api.constant.core.Sort;
import com.gitee.dorive.api.entity.core.EntityDefinition;
import com.gitee.dorive.api.entity.core.EntityElement;
import com.gitee.dorive.api.entity.core.def.EntityDef;
-import com.gitee.dorive.api.entity.core.def.OrderDef;
+import com.gitee.dorive.api.entity.core.def.OrderByDef;
import com.gitee.dorive.api.entity.core.def.RepositoryDef;
import com.gitee.dorive.api.impl.core.EntityDefinitionResolver;
import com.gitee.dorive.api.impl.core.EntityElementResolver;
@@ -36,7 +36,7 @@ import com.gitee.dorive.core.api.executor.Executor;
import com.gitee.dorive.core.api.factory.EntityFactory;
import com.gitee.dorive.core.api.factory.EntityMapper;
import com.gitee.dorive.core.config.RepositoryContext;
-import com.gitee.dorive.api.entity.BoundedContext;
+import com.gitee.dorive.api.entity.common.BoundedContext;
import com.gitee.dorive.core.entity.common.EntityStoreInfo;
import com.gitee.dorive.core.entity.executor.OrderBy;
import com.gitee.dorive.core.entity.factory.FieldConverter;
@@ -142,7 +142,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor
resetEntityDef(entityElement);
EntityDef entityDef = entityElement.getEntityDef();
- OrderDef orderDef = entityElement.getOrderDef();
+ OrderByDef orderByDef = entityElement.getOrderByDef();
String accessPath = entityElement.getAccessPath();
OperationFactory operationFactory = new OperationFactory(entityElement);
@@ -159,7 +159,7 @@ public abstract class AbstractContextRepository extends AbstractRepositor
boolean isAggregated = repository instanceof AbstractContextRepository;
BinderResolver binderResolver = new BinderResolver(this);
binderResolver.resolve(entityElement);
- OrderBy defaultOrderBy = newDefaultOrderBy(orderDef);
+ OrderBy defaultOrderBy = newDefaultOrderBy(orderByDef);
CommonRepository repositoryWrapper = new CommonRepository();
repositoryWrapper.setEntityElement(entityElement);
@@ -249,15 +249,15 @@ public abstract class AbstractContextRepository extends AbstractRepositor
return repository;
}
- private OrderBy newDefaultOrderBy(OrderDef orderDef) {
- if (orderDef != null) {
- String sortBy = orderDef.getSortBy();
- String order = orderDef.getOrder();
- if (StringUtils.isNotBlank(sortBy) && StringUtils.isNotBlank(order)) {
- order = order.toUpperCase();
- if (Order.ASC.equals(order) || Order.DESC.equals(order)) {
- List properties = StrUtil.splitTrim(sortBy, ",");
- return new OrderBy(properties, order);
+ private OrderBy newDefaultOrderBy(OrderByDef orderByDef) {
+ if (orderByDef != null) {
+ String field = orderByDef.getField();
+ String sort = orderByDef.getSort();
+ if (StringUtils.isNotBlank(field) && StringUtils.isNotBlank(sort)) {
+ sort = sort.toUpperCase();
+ if (Sort.ASC.equals(sort) || Sort.DESC.equals(sort)) {
+ List properties = StrUtil.splitTrim(field, ",");
+ return new OrderBy(properties, sort);
}
}
}
diff --git a/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/ExampleUtils.java b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/ExampleUtils.java
index a12a54698a92333a6517b6fa54823b10223a3f14..2d0000ae651176b2889ab308e1176864d5339bba 100644
--- a/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/ExampleUtils.java
+++ b/dorive-core/src/main/java/com/gitee/dorive/core/impl/util/ExampleUtils.java
@@ -70,7 +70,7 @@ public class ExampleUtils {
}
public static OrderBy clone(OrderBy orderBy) {
- return new OrderBy(new ArrayList<>(orderBy.getProperties()), orderBy.getOrder());
+ return new OrderBy(new ArrayList<>(orderBy.getProperties()), orderBy.getSort());
}
public static Page clone(Page page) {
diff --git a/dorive-event/pom.xml b/dorive-event/pom.xml
index bbb0e760b653b3696b8a07d012748c8509cad0ef..12869573de5e7a5f11eda39b6ecbdb6831e361e1 100644
--- a/dorive-event/pom.xml
+++ b/dorive-event/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-event
diff --git a/dorive-module/pom.xml b/dorive-module/pom.xml
index 9f3b1b3acbe48fb39187fc0ccfceaf6ba5d6535b..2bddf35fa313cdec3c2cbcf5db9cb42893efaeb7 100644
--- a/dorive-module/pom.xml
+++ b/dorive-module/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-module
diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java
index 64266b5821783944e15b8e31d6124e3a07cf85ca..fa61c38e1c2a8cbb09bceba7973da5aeba06339d 100644
--- a/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java
+++ b/dorive-module/src/main/java/com/gitee/dorive/module/entity/ModuleDefinition.java
@@ -21,6 +21,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.StrUtil;
+import com.gitee.dorive.module.impl.util.NameUtils;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.io.Resource;
@@ -37,6 +38,7 @@ import static com.gitee.dorive.module.impl.parser.AbstractModuleParser.PATH_MATC
public class ModuleDefinition {
private Resource resource;
private String originId;
+ private String organization;
private String project;
private String domain;
private String subdomain;
@@ -62,6 +64,7 @@ public class ModuleDefinition {
Attributes mainAttributes = manifest.getMainAttributes();
String originId = mainAttributes.getValue("Dorive-Origin-Id");
+ String organization = mainAttributes.getValue("Dorive-Organization");
String project = mainAttributes.getValue("Dorive-Project");
String domain = mainAttributes.getValue("Dorive-Domain");
String subdomain = mainAttributes.getValue("Dorive-Subdomain");
@@ -82,6 +85,7 @@ public class ModuleDefinition {
String requestPrefix = mainAttributes.getValue("Dorive-Request-Prefix");
this.originId = filterValue(originId);
+ this.organization = filterValue(organization);
this.project = filterValue(project);
this.domain = filterValue(domain);
this.subdomain = filterValue(subdomain);
@@ -123,7 +127,14 @@ public class ModuleDefinition {
}
public String getScanPackage() {
- return project + ".**";
+ List packages = new ArrayList<>(2);
+ if (StringUtils.isNotBlank(organization)) {
+ packages.add(NameUtils.toPackage(organization));
+ }
+ if (StringUtils.isNotBlank(project)) {
+ packages.add(NameUtils.toPackage(project));
+ }
+ return StrUtil.join(".", packages) + ".**";
}
public boolean isExposed(Class> clazz) {
@@ -131,7 +142,7 @@ public class ModuleDefinition {
return CollUtil.findOne(exports, export -> PATH_MATCHER.match(export, className)) != null;
}
- public String getDomainPackage() {
+ public String getDomainPath() {
List packages = new ArrayList<>(2);
if (StringUtils.isNotBlank(project)) {
packages.add(project);
@@ -143,18 +154,21 @@ public class ModuleDefinition {
}
public String getBasePackage() {
- List packages = new ArrayList<>(4);
+ List packages = new ArrayList<>(5);
+ if (StringUtils.isNotBlank(organization)) {
+ packages.add(NameUtils.toPackage(organization));
+ }
if (StringUtils.isNotBlank(project)) {
- packages.add(project);
+ packages.add(NameUtils.toPackage(project));
}
if (StringUtils.isNotBlank(domain)) {
- packages.add(domain);
+ packages.add(NameUtils.toPackage(domain));
}
if (StringUtils.isNotBlank(subdomain)) {
- packages.add(subdomain);
+ packages.add(NameUtils.toPackage(subdomain));
}
if (StringUtils.isNotBlank(version)) {
- packages.add(version);
+ packages.add(NameUtils.toPackage(version));
}
return StrUtil.join(".", packages);
}
diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java
index 8c968db0498cdb92b246725a1252fc066e779409..c50f2534a2c4bbb1dce0cc03d3392e50e554d540 100644
--- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java
+++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/filter/BoundedContextExposedBeanFilter.java
@@ -17,7 +17,7 @@
package com.gitee.dorive.module.impl.filter;
-import com.gitee.dorive.api.entity.BoundedContext;
+import com.gitee.dorive.api.entity.common.BoundedContext;
import com.gitee.dorive.module.api.ExposedBeanFilter;
import com.gitee.dorive.module.entity.ModuleBeanDescriptor;
import com.gitee.dorive.module.entity.ModuleDefinition;
@@ -32,8 +32,8 @@ public class BoundedContextExposedBeanFilter implements ExposedBeanFilter {
Class> declaredType = descriptor.getDeclaredType();
if (declaredType == BoundedContext.class && !exposedCandidates.isEmpty()) {
ModuleDefinition moduleDefinition = beanDescriptor.getModuleDefinition();
- String domainPackage = moduleDefinition.getDomainPackage();
- String boundedContextName = domainPackage + ".boundedContext";
+ String domainPath = moduleDefinition.getDomainPath();
+ String boundedContextName = domainPath + ".boundedContext";
ModuleBeanDescriptor existModuleBeanDescriptor = exposedCandidates.get(boundedContextName);
// 清空
exposedCandidates.clear();
diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java
index 275e390e543368ac45fc3c329ee60369ca8be5e5..f0a300f27050c54210511427dddd3201c6e0e9d9 100644
--- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java
+++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/inject/BoundedContextBeanPostProcessor.java
@@ -17,8 +17,8 @@
package com.gitee.dorive.module.impl.inject;
-import com.gitee.dorive.api.api.BoundedContextAware;
-import com.gitee.dorive.api.entity.BoundedContext;
+import com.gitee.dorive.api.api.common.BoundedContextAware;
+import com.gitee.dorive.api.entity.common.BoundedContext;
import com.gitee.dorive.module.api.ModuleParser;
import com.gitee.dorive.module.entity.ModuleDefinition;
import com.gitee.dorive.module.impl.parser.DefaultModuleParser;
@@ -50,8 +50,8 @@ public class BoundedContextBeanPostProcessor implements BeanFactoryAware, BeanPo
if (bean instanceof BoundedContextAware) {
ModuleDefinition moduleDefinition = moduleParser.findModuleDefinition(userClass);
if (moduleDefinition != null) {
- String domainPackage = moduleDefinition.getDomainPackage();
- String boundedContextName = domainPackage + ".boundedContext";
+ String domainPath = moduleDefinition.getDomainPath();
+ String boundedContextName = domainPath + ".boundedContext";
if (beanFactory.containsBean(boundedContextName)) {
BoundedContext boundedContext = beanFactory.getBean(boundedContextName, BoundedContext.class);
((BoundedContextAware) bean).setBoundedContext(boundedContext);
diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java
index f14fb0dbf128d0fd6a519c874238a375593d4e4d..1c0d7ed54b594f4f509e80ef5156e714b4dd82bc 100644
--- a/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java
+++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/parser/AbstractModuleParser.java
@@ -87,6 +87,13 @@ public abstract class AbstractModuleParser implements ModuleParser {
ModuleDefinition moduleDefinition = new ModuleDefinition(resource, manifest);
nameModuleDefinitionMap.put(moduleName, moduleDefinition);
uriModuleDefinitionMap.put(uriForMatch, moduleDefinition);
+ // For test.
+ String uri = uriForMatch.toString();
+ if (uri.endsWith("/target/classes/")) {
+ uri = StrUtil.removeSuffix(uri, "/target/classes/");
+ uri = uri + "/target/test-classes/";
+ uriModuleDefinitionMap.put(new URI(uri), moduleDefinition);
+ }
List configs = moduleDefinition.getConfigs();
if (configs != null && !configs.isEmpty()) {
for (String config : configs) {
diff --git a/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/NameUtils.java b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/NameUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..1cb1dd213817e395abd6b7e12dfa65a1f926d4bd
--- /dev/null
+++ b/dorive-module/src/main/java/com/gitee/dorive/module/impl/util/NameUtils.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.module.impl.util;
+
+import cn.hutool.core.util.StrUtil;
+
+public class NameUtils {
+
+ public static String toPackage(String name) {
+ name = StrUtil.replace(name, "-", "_");
+ name = StrUtil.toUnderlineCase(name);
+ return name;
+ }
+
+}
diff --git a/dorive-mybatis-plus/pom.xml b/dorive-mybatis-plus/pom.xml
index abed11f1be972ca8dbcd726102423b1ad30764b3..4dca5421171e32d978b673f0b2e4ea773db145bf 100644
--- a/dorive-mybatis-plus/pom.xml
+++ b/dorive-mybatis-plus/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-mybatis-plus
diff --git a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/executor/MybatisPlusExecutor.java b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/executor/MybatisPlusExecutor.java
index 2a4b195d28def170eb1c8467e838ce5c1b88e16d..a364dd43461e5af935805551844351455b48ca50 100644
--- a/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/executor/MybatisPlusExecutor.java
+++ b/dorive-mybatis-plus/src/main/java/com/gitee/dorive/mybatis/plus/impl/executor/MybatisPlusExecutor.java
@@ -23,7 +23,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.gitee.dorive.api.constant.core.Order;
+import com.gitee.dorive.api.constant.core.Sort;
import com.gitee.dorive.api.entity.core.def.EntityDef;
import com.gitee.dorive.api.entity.core.EntityElement;
import com.gitee.dorive.core.api.context.Context;
@@ -137,11 +137,11 @@ public class MybatisPlusExecutor extends AbstractExecutor {
OrderBy orderBy = example.getOrderBy();
if (orderBy != null) {
- String order = orderBy.getOrder();
- if (Order.ASC.equals(order)) {
+ String sort = orderBy.getSort();
+ if (Sort.ASC.equals(sort)) {
queryWrapper.orderByAsc(orderBy.getProperties());
- } else if (Order.DESC.equals(order)) {
+ } else if (Sort.DESC.equals(sort)) {
queryWrapper.orderByDesc(orderBy.getProperties());
}
}
diff --git a/dorive-query/pom.xml b/dorive-query/pom.xml
index 910a60b7aed5ab6cebbceb256489e40d201acc14..994e3e4cb669b5bab954256ba097f8f6cd95fa30 100644
--- a/dorive-query/pom.xml
+++ b/dorive-query/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-query
diff --git a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryExampleResolver.java b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryExampleResolver.java
index 64fec98320d055d7a13bdc5b47adca172b7b4db7..2aedd8e243651500ebc963c1bc0e1fe284f5ff9c 100644
--- a/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryExampleResolver.java
+++ b/dorive-query/src/main/java/com/gitee/dorive/query/impl/resolver/QueryExampleResolver.java
@@ -19,7 +19,7 @@ package com.gitee.dorive.query.impl.resolver;
import cn.hutool.core.convert.Convert;
import com.gitee.dorive.api.constant.core.Operator;
-import com.gitee.dorive.api.constant.core.Order;
+import com.gitee.dorive.api.constant.core.Sort;
import com.gitee.dorive.api.constant.query.OperatorV2;
import com.gitee.dorive.api.entity.core.Field;
import com.gitee.dorive.api.entity.query.QueryDefinition;
@@ -78,7 +78,7 @@ public class QueryExampleResolver {
List properties = StringUtils.toList(sortBy);
if (properties != null && !properties.isEmpty()) {
String orderStr = ((String) order).toUpperCase();
- if (Order.ASC.equals(orderStr) || Order.DESC.equals(orderStr)) {
+ if (Sort.ASC.equals(orderStr) || Sort.DESC.equals(orderStr)) {
return new OrderBy(properties, orderStr);
}
}
diff --git a/dorive-ref/pom.xml b/dorive-ref/pom.xml
index 0242cc312305e7287b6a528dd312aa848e77463c..c7f6b7c9ceb4b100a4cb6e5fc44e1b8ca3a5dad2 100644
--- a/dorive-ref/pom.xml
+++ b/dorive-ref/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-ref
diff --git a/dorive-spring-boot-starter/pom.xml b/dorive-spring-boot-starter/pom.xml
index ae4f8cbfbcdd1fe53cd7f0e492c1a32270a03411..dcbd2f53280f13610ad33551023e509c050329b9 100644
--- a/dorive-spring-boot-starter/pom.xml
+++ b/dorive-spring-boot-starter/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-spring-boot-starter
diff --git a/dorive-sql/pom.xml b/dorive-sql/pom.xml
index 63f68ca91d0bf863ff31b7e26fb0962ce4b45353..eea1c97820994df0cdec41d5cd8ad6b2fad8d988 100644
--- a/dorive-sql/pom.xml
+++ b/dorive-sql/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-sql
diff --git a/dorive-test/pom.xml b/dorive-test/pom.xml
index 6173f98fb2c6640981d5bcf9f890242c7aee881d..0d0e18fe1740ec72c04215352176dbfc4313e808 100644
--- a/dorive-test/pom.xml
+++ b/dorive-test/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-test
diff --git a/dorive-web/pom.xml b/dorive-web/pom.xml
index d81c1bca1686ee6eefbd7dc6b117592a345582cb..fd377bf7d270d576e9148d0b08117eda95ce14d2 100644
--- a/dorive-web/pom.xml
+++ b/dorive-web/pom.xml
@@ -6,7 +6,7 @@
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
dorive-web
diff --git a/dorive-web/src/main/java/com/gitee/dorive/web/impl/banner/BannerPrinter.java b/dorive-web/src/main/java/com/gitee/dorive/web/impl/banner/BannerPrinter.java
new file mode 100644
index 0000000000000000000000000000000000000000..deee640c7bcab6607395f0ef321248dcfc674543
--- /dev/null
+++ b/dorive-web/src/main/java/com/gitee/dorive/web/impl/banner/BannerPrinter.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.web.impl.banner;
+
+import org.springframework.beans.factory.InitializingBean;
+
+public class BannerPrinter implements InitializingBean {
+
+ @Override
+ public void afterPropertiesSet() {
+ System.out.println(" __ __ __ ___ ");
+ System.out.println("| \\ / \\ |__) | \\ / |__ ");
+ System.out.println("|__/ \\__/ | \\ | \\/ |___ ");
+ System.out.println(" " + DoriveVersion.getVersion() + "");
+ }
+
+ public static void main(String[] args) {
+ BannerPrinter bannerPrinter = new BannerPrinter();
+ bannerPrinter.afterPropertiesSet();
+ }
+
+}
diff --git a/dorive-web/src/main/java/com/gitee/dorive/web/impl/banner/DoriveVersion.java b/dorive-web/src/main/java/com/gitee/dorive/web/impl/banner/DoriveVersion.java
new file mode 100644
index 0000000000000000000000000000000000000000..53c792dba7d2cd21e0628ea07909c55d2f0b01f4
--- /dev/null
+++ b/dorive-web/src/main/java/com/gitee/dorive/web/impl/banner/DoriveVersion.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.gitee.dorive.web.impl.banner;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.CodeSource;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+
+public class DoriveVersion {
+
+ public static String getVersion() {
+ return determineSpringBootVersion();
+ }
+
+ private static String determineSpringBootVersion() {
+ final Package pkg = DoriveVersion.class.getPackage();
+ if (pkg != null && pkg.getImplementationVersion() != null) {
+ return pkg.getImplementationVersion();
+ }
+ CodeSource codeSource = DoriveVersion.class.getProtectionDomain().getCodeSource();
+ if (codeSource == null) {
+ return null;
+ }
+ URL codeSourceLocation = codeSource.getLocation();
+ try {
+ URLConnection connection = codeSourceLocation.openConnection();
+ if (connection instanceof JarURLConnection) {
+ return getImplementationVersion(((JarURLConnection) connection).getJarFile());
+ }
+ try (JarFile jarFile = new JarFile(new File(codeSourceLocation.toURI()))) {
+ return getImplementationVersion(jarFile);
+ }
+ } catch (Exception ex) {
+ return null;
+ }
+ }
+
+ private static String getImplementationVersion(JarFile jarFile) throws IOException {
+ return jarFile.getManifest().getMainAttributes().getValue(Attributes.Name.IMPLEMENTATION_VERSION);
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index f89ea1b42b959022c1d91f197c6c6829be6080f3..2bf7caecd213fd9688d761f8b0df1c134d157422 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.gitee.digital-engine
dorive
- 3.5.1
+ 3.5.2
pom
@@ -81,7 +81,6 @@
org.projectlombok
lombok
1.18.16
- compile
org.apache.commons
@@ -101,6 +100,14 @@
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+
@@ -119,6 +126,18 @@
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.1.2
+
+
+
+ ${project.version}
+
+
+
+
\ No newline at end of file