diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..e2cf923b96b8119182edde2969d69bc77c23eaa9 --- /dev/null +++ b/pom.xml @@ -0,0 +1,215 @@ + + + 4.0.0 + + cn.bugstack + xfg-frame-archetype-std + 1.0-SNAPSHOT + pom + + + xfg-frame-archetype-std-app + xfg-frame-archetype-std-domain + xfg-frame-archetype-std-trigger + xfg-frame-archetype-std-infrastructure + xfg-frame-archetype-std-types + xfg-frame-archetype-std-api + + + + 1.8 + UTF-8 + 8 + 8 + UTF-8 + + + + + xiaofuge + 184172133@qq.com + fuzhengwei + https://github.com/fuzhengwei + + + + + + Apache License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0 + + + + + org.springframework.boot + spring-boot-starter-parent + 2.7.12 + + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + + mysql + mysql-connector-java + 8.0.22 + + + com.alibaba + fastjson + 2.0.28 + + + org.apache.commons + commons-lang3 + 3.9 + + + com.google.guava + guava + 32.1.3-jre + + + dom4j + dom4j + 1.6.1 + + + com.thoughtworks.xstream + xstream + 1.4.10 + + + io.jsonwebtoken + jjwt + 0.9.1 + + + com.auth0 + java-jwt + 4.4.0 + + + commons-codec + commons-codec + 1.15 + + + + org.apache.dubbo + dubbo + 3.0.9 + + + org.apache.dubbo + dubbo-spring-boot-starter + 3.0.9 + + + + + + + + com.alibaba.nacos + nacos-client + 2.1.0 + + + + + cn.bugstack + xfg-frame-archetype-std-domain + 1.0-SNAPSHOT + + + cn.bugstack + xfg-frame-archetype-std-infrastructure + 1.0-SNAPSHOT + + + cn.bugstack + xfg-frame-archetype-std-types + 1.0-SNAPSHOT + + + cn.bugstack + xfg-frame-archetype-std-trigger + 1.0-SNAPSHOT + + + cn.bugstack + xfg-frame-archetype-std-api + 1.0-SNAPSHOT + + + + + + + + org.apache.maven.plugins + maven-archetype-plugin + 3.2.0 + + + org.apache.maven.plugins + maven-compiler-plugin + 3.0 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + UTF-8 + + + + org.codehaus.mojo + versions-maven-plugin + 2.7 + + + + + + + dev + + true + + + -Xms1G -Xmx1G -server -XX:MaxPermSize=256M -Xss256K -Dspring.profiles.active=test -XX:+DisableExplicitGC -XX:+UseG1GC -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/xfg-frame-archetype-std-boot -Xloggc:/export/Logs/xfg-frame-archetype-std-boot/gc-xfg-frame-archetype-std-boot.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps + dev + + + + test + + -Xms1G -Xmx1G -server -XX:MaxPermSize=256M -Xss256K -Dspring.profiles.active=test -XX:+DisableExplicitGC -XX:+UseG1GC -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/xfg-frame-archetype-std-boot -Xloggc:/export/Logs/xfg-frame-archetype-std-boot/gc-xfg-frame-archetype-std-boot.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps + test + + + + prod + + -Xms6G -Xmx6G -server -XX:MaxPermSize=256M -Xss256K -Dspring.profiles.active=release -XX:+DisableExplicitGC -XX:+UseG1GC -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/fq-mall-activity-app -Xloggc:/export/Logs/xfg-frame-archetype-std-boot/gc-xfg-frame-archetype-std-boot.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps + prod + + + + + diff --git a/xfg-frame-archetype-std-api/pom.xml b/xfg-frame-archetype-std-api/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..2dee2f8da2f55ed640c3ac9fe8d2c4372358dda1 --- /dev/null +++ b/xfg-frame-archetype-std-api/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + cn.bugstack + xfg-frame-archetype-std + 1.0-SNAPSHOT + + + xfg-frame-archetype-std-api + + + + org.projectlombok + lombok + 1.18.26 + + + jakarta.validation + jakarta.validation-api + 3.0.2 + + + cn.bugstack + xfg-frame-archetype-std-types + 1.0-SNAPSHOT + + + + + xfg-frame-archetype-std-api + + + org.apache.maven.plugins + maven-compiler-plugin + + ${java.version} + ${java.version} + + + + + + \ No newline at end of file diff --git a/xfg-frame-archetype-std-api/src/main/java/cn/bugstack/api/IUserService.java b/xfg-frame-archetype-std-api/src/main/java/cn/bugstack/api/IUserService.java new file mode 100644 index 0000000000000000000000000000000000000000..febfa898988780676768fd2ed1a97f55225621b2 --- /dev/null +++ b/xfg-frame-archetype-std-api/src/main/java/cn/bugstack/api/IUserService.java @@ -0,0 +1,7 @@ +package cn.bugstack.api; + +public interface IUserService { + + String queryUserInfo(String req); + +} diff --git a/xfg-frame-archetype-std-api/src/main/java/cn/bugstack/api/model/package-info.java b/xfg-frame-archetype-std-api/src/main/java/cn/bugstack/api/model/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..e2a002b24aa942e185f92dadf3685ff40bce0e76 --- /dev/null +++ b/xfg-frame-archetype-std-api/src/main/java/cn/bugstack/api/model/package-info.java @@ -0,0 +1,4 @@ +/** + * RPC 接口层;因为RPC的调用方式,需要调用方依赖接口提供方的接口描述信息,所以需要单独提供Jar。这个包下编写接口所需的基础对象和DTO对象 + */ +package cn.bugstack.api.model; \ No newline at end of file diff --git a/xfg-frame-archetype-std-app/Dockerfile b/xfg-frame-archetype-std-app/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..aa15a402b506882ec2e52ea9d15238e31708c039 --- /dev/null +++ b/xfg-frame-archetype-std-app/Dockerfile @@ -0,0 +1,17 @@ +# 基础镜像 +FROM openjdk:8-jre-slim + +# 作者 +MAINTAINER xiaofuge + +# 配置 +ENV PARAMS="" + +# 时区 +ENV TZ=PRC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# 添加应用 +ADD target/xfg-frame-archetype-std-app-app.jar /xfg-frame-archetype-std-app-app.jar + +ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /xfg-frame-archetype-std-app-app.jar $PARAMS"] \ No newline at end of file diff --git a/xfg-frame-archetype-std-app/build.sh b/xfg-frame-archetype-std-app/build.sh new file mode 100644 index 0000000000000000000000000000000000000000..6be66e2f2d1f606d67a9b222145c4c0eb7f49afb --- /dev/null +++ b/xfg-frame-archetype-std-app/build.sh @@ -0,0 +1,6 @@ + +# 普通镜像构建,随系统版本构建 amd/arm +docker build -t system/xfg-frame-archetype-std-app:1.0-SNAPSHOT -f ./Dockerfile . + +# 兼容 amd、arm 构建镜像 +# docker buildx build --load --platform liunx/amd64,linux/arm64 -t xiaofuge/xfg-frame-archetype-app:1.0 -f ./Dockerfile . --push \ No newline at end of file diff --git a/xfg-frame-archetype-std-app/pom.xml b/xfg-frame-archetype-std-app/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..ffb7b644a5075716c2400c417db5bcda8192a325 --- /dev/null +++ b/xfg-frame-archetype-std-app/pom.xml @@ -0,0 +1,155 @@ + + + 4.0.0 + + cn.bugstack + xfg-frame-archetype-std + 1.0-SNAPSHOT + + + xfg-frame-archetype-std-app + + jar + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.apache.tomcat.embed + tomcat-embed-core + + + org.springframework.boot + spring-boot-configuration-processor + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + + + + mysql + mysql-connector-java + + + com.alibaba + fastjson + + + org.apache.commons + commons-lang3 + + + org.projectlombok + lombok + + + com.google.guava + guava + + + junit + junit + test + + + io.jsonwebtoken + jjwt + + + com.auth0 + java-jwt + + + commons-codec + commons-codec + + + com.squareup.retrofit2 + converter-gson + 2.9.0 + + + + org.apache.dubbo + dubbo + + + org.apache.dubbo + dubbo-spring-boot-starter + + + + + + + com.alibaba.nacos + nacos-client + + + + + cn.bugstack + xfg-frame-archetype-std-trigger + + + cn.bugstack + xfg-frame-archetype-std-infrastructure + + + + + xfg-frame-archetype-std-app + + + src/main/resources + true + + **/** + + + + + + src/test/resources + true + + **/** + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.6 + + true + false + + **/*Test.java + + + + + org.springframework.boot + spring-boot-maven-plugin + + cn.bugstack.Application + JAR + + + + + + + diff --git a/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/Application.java b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/Application.java new file mode 100644 index 0000000000000000000000000000000000000000..1e2160b4e34b26296ae7b20064b0a1d1b5f63335 --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/Application.java @@ -0,0 +1,17 @@ +package cn.bugstack; + +import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; +import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +@Configurable +@EnableDubbo +public class Application { + + public static void main(String[] args){ + SpringApplication.run(Application.class); + } + +} diff --git a/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/GuavaConfig.java b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/GuavaConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..d677317377abdc8b93ce2799130af501814f6d23 --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/GuavaConfig.java @@ -0,0 +1,20 @@ +package cn.bugstack.config; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +@Configuration +public class GuavaConfig { + + @Bean(name = "cache") + public Cache cache() { + return CacheBuilder.newBuilder() + .expireAfterWrite(3, TimeUnit.SECONDS) + .build(); + } + +} diff --git a/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/ThreadPoolConfig.java b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/ThreadPoolConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..629011a9acd9117f203dcd0259ac4d289f1a0356 --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/ThreadPoolConfig.java @@ -0,0 +1,50 @@ +package cn.bugstack.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; + +import java.util.concurrent.*; + +@Slf4j +@EnableAsync +@Configuration +@EnableConfigurationProperties(ThreadPoolConfigProperties.class) +public class ThreadPoolConfig { + + @Bean + @ConditionalOnMissingBean(ThreadPoolExecutor.class) + public ThreadPoolExecutor threadPoolExecutor(ThreadPoolConfigProperties properties) throws ClassNotFoundException, InstantiationException, IllegalAccessException { + // 实例化策略 + RejectedExecutionHandler handler; + switch (properties.getPolicy()){ + case "AbortPolicy": + handler = new ThreadPoolExecutor.AbortPolicy(); + break; + case "DiscardPolicy": + handler = new ThreadPoolExecutor.DiscardPolicy(); + break; + case "DiscardOldestPolicy": + handler = new ThreadPoolExecutor.DiscardOldestPolicy(); + break; + case "CallerRunsPolicy": + handler = new ThreadPoolExecutor.CallerRunsPolicy(); + break; + default: + handler = new ThreadPoolExecutor.AbortPolicy(); + break; + } + // 创建线程池 + return new ThreadPoolExecutor(properties.getCorePoolSize(), + properties.getMaxPoolSize(), + properties.getKeepAliveTime(), + TimeUnit.SECONDS, + new LinkedBlockingQueue<>(properties.getBlockQueueSize()), + Executors.defaultThreadFactory(), + handler); + } + +} diff --git a/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/ThreadPoolConfigProperties.java b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/ThreadPoolConfigProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..d6b643d6dc48ec11b9c50779e43d3865696db18b --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/ThreadPoolConfigProperties.java @@ -0,0 +1,26 @@ +package cn.bugstack.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Data +@ConfigurationProperties(prefix = "thread.pool.executor.config", ignoreInvalidFields = true) +public class ThreadPoolConfigProperties { + + /** 核心线程数 */ + private Integer corePoolSize = 20; + /** 最大线程数 */ + private Integer maxPoolSize = 200; + /** 最大等待时间 */ + private Long keepAliveTime = 10L; + /** 最大队列数 */ + private Integer blockQueueSize = 5000; + /* + * AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 + * DiscardPolicy:直接丢弃任务,但是不会抛出异常 + * DiscardOldestPolicy:将最早进入队列的任务删除,之后再尝试加入队列的任务被拒绝 + * CallerRunsPolicy:如果任务添加线程池失败,那么主线程自己执行该任务 + * */ + private String policy = "AbortPolicy"; + +} diff --git a/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/package-info.java b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..922bb8933a8eb5883139104ebf4d374179e7327e --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/config/package-info.java @@ -0,0 +1,6 @@ +/** + * 1. 用于管理引入的Jar所需的资源启动或者初始化处理 + * 2. 如果有AOP切面,可以再建一个aop包,来写切面逻辑 + */ +package cn.bugstack.config; + diff --git a/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/package-info.java b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..a39d3cdab4a1d3fbbc7d78b171f2170dbbf092f9 --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/java/cn/bugstack/package-info.java @@ -0,0 +1,4 @@ +/** + * 应用启动层,注意Application所在的包路径,是在上一层。这样才能扫描到其他 module + * */ +package cn.bugstack; \ No newline at end of file diff --git a/xfg-frame-archetype-std-app/src/main/resources/application-dev.yml b/xfg-frame-archetype-std-app/src/main/resources/application-dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..b40f3c255c03599c5688e188c56cb710ca1ce6bd --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/resources/application-dev.yml @@ -0,0 +1,55 @@ +server: + port: 8091 + +# 线程池配置 +thread: + pool: + executor: + config: + core-pool-size: 20 + max-pool-size: 50 + keep-alive-time: 5000 + block-queue-size: 5000 + policy: CallerRunsPolicy + +# 数据库配置;启动时配置数据库资源信息 +spring: + datasource: + username: root + password: 123456 + url: jdbc:mysql://127.0.0.1:3306/xfg_frame_archetype?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + pool-name: Retail_HikariCP + minimum-idle: 15 #最小空闲连接数量 + idle-timeout: 180000 #空闲连接存活最大时间,默认600000(10分钟) + maximum-pool-size: 25 #连接池最大连接数,默认是10 + auto-commit: true #此属性控制从池返回的连接的默认自动提交行为,默认值:true + max-lifetime: 1800000 #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟 + connection-timeout: 30000 #数据库连接超时时间,默认30秒,即30000 + connection-test-query: SELECT 1 + type: com.zaxxer.hikari.HikariDataSource + +#mybatis: +# mapper-locations: classpath:/mybatis/mapper/*.xml +# config-location: classpath:/mybatis/config/mybatis-config.xml + +# Dubbo +dubbo: + application: + name: xfg-frame-archetype-std + version: 1.0.0 + registry: + id: nacos-registry + address: nacos://127.0.0.1:8848 + protocol: + name: dubbo + port: -1 + scan: + base-packages: cn.bugstack.api + +# 日志 +logging: + level: + root: info + config: classpath:logback-spring.xml \ No newline at end of file diff --git a/xfg-frame-archetype-std-app/src/main/resources/application-prod.yml b/xfg-frame-archetype-std-app/src/main/resources/application-prod.yml new file mode 100644 index 0000000000000000000000000000000000000000..f3696195c61239e31c8fdc29287c3c0abd21759f --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/resources/application-prod.yml @@ -0,0 +1,41 @@ +server: + port: 8091 + +# 线程池配置 +thread: + pool: + executor: + config: + core-pool-size: 20 + max-pool-size: 50 + keep-alive-time: 5000 + block-queue-size: 5000 + policy: CallerRunsPolicy + +# 数据库配置 +#spring: +# datasource: +# username: root +# password: 123456 +# url: jdbc:mysql://127.0.0.1:3306/xfg_frame_archetype?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true +# driver-class-name: com.mysql.cj.jdbc.Driver +# hikari: +# pool-name: Retail_HikariCP +# minimum-idle: 15 #最小空闲连接数量 +# idle-timeout: 180000 #空闲连接存活最大时间,默认600000(10分钟) +# maximum-pool-size: 25 #连接池最大连接数,默认是10 +# auto-commit: true #此属性控制从池返回的连接的默认自动提交行为,默认值:true +# max-lifetime: 1800000 #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟 +# connection-timeout: 30000 #数据库连接超时时间,默认30秒,即30000 +# connection-test-query: SELECT 1 +# type: com.zaxxer.hikari.HikariDataSource + +#mybatis: +# mapper-locations: classpath:/mybatis/mapper/*.xml +# config-location: classpath:/mybatis/config/mybatis-config.xml + +# 日志 +logging: + level: + root: info + config: classpath:logback-spring.xml \ No newline at end of file diff --git a/xfg-frame-archetype-std-app/src/main/resources/application-test.yml b/xfg-frame-archetype-std-app/src/main/resources/application-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..f3696195c61239e31c8fdc29287c3c0abd21759f --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/resources/application-test.yml @@ -0,0 +1,41 @@ +server: + port: 8091 + +# 线程池配置 +thread: + pool: + executor: + config: + core-pool-size: 20 + max-pool-size: 50 + keep-alive-time: 5000 + block-queue-size: 5000 + policy: CallerRunsPolicy + +# 数据库配置 +#spring: +# datasource: +# username: root +# password: 123456 +# url: jdbc:mysql://127.0.0.1:3306/xfg_frame_archetype?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true +# driver-class-name: com.mysql.cj.jdbc.Driver +# hikari: +# pool-name: Retail_HikariCP +# minimum-idle: 15 #最小空闲连接数量 +# idle-timeout: 180000 #空闲连接存活最大时间,默认600000(10分钟) +# maximum-pool-size: 25 #连接池最大连接数,默认是10 +# auto-commit: true #此属性控制从池返回的连接的默认自动提交行为,默认值:true +# max-lifetime: 1800000 #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟 +# connection-timeout: 30000 #数据库连接超时时间,默认30秒,即30000 +# connection-test-query: SELECT 1 +# type: com.zaxxer.hikari.HikariDataSource + +#mybatis: +# mapper-locations: classpath:/mybatis/mapper/*.xml +# config-location: classpath:/mybatis/config/mybatis-config.xml + +# 日志 +logging: + level: + root: info + config: classpath:logback-spring.xml \ No newline at end of file diff --git a/xfg-frame-archetype-std-app/src/main/resources/application.yml b/xfg-frame-archetype-std-app/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..38961419f4467f71ecb3765b95ec40499f8a373a --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/resources/application.yml @@ -0,0 +1,5 @@ +spring: + config: + name: xfg-frame-archetype-std-app + profiles: + active: dev diff --git a/xfg-frame-archetype-std-app/src/main/resources/logback-spring.xml b/xfg-frame-archetype-std-app/src/main/resources/logback-spring.xml new file mode 100644 index 0000000000000000000000000000000000000000..932ad72d7264b5b1cc269ea653fb732583748b0b --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/resources/logback-spring.xml @@ -0,0 +1,113 @@ + + + + + logback + + + + + + + + + + + + info + + + %d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0}%X{ServiceId} -%X{trace-id} %m%n + UTF-8 + + + + + + + + ./data/log/log_info.log + + + %d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0}%X{ServiceId} -%X{trace-id} %m%n + UTF-8 + + + + + ./data/log/log-info-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + 10GB + + + + + + + ./data/log/log_error.log + + + %d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0}%X{ServiceId} -%X{trace-id} %m%n + UTF-8 + + + + ./data/log/log-error-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 7 + 5GB + + + + WARN + + + + + + + 0 + + 8192 + + true + + false + + + + + + 0 + + 1024 + + true + + false + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xfg-frame-archetype-std-app/src/main/resources/mybatis/config/mybatis-config.xml b/xfg-frame-archetype-std-app/src/main/resources/mybatis/config/mybatis-config.xml new file mode 100644 index 0000000000000000000000000000000000000000..ed8ee962d694805b4aa589ef2c673ba74082b43d --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/resources/mybatis/config/mybatis-config.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/xfg-frame-archetype-std-app/src/main/resources/mybatis/mapper/frame_case_mapper.xml b/xfg-frame-archetype-std-app/src/main/resources/mybatis/mapper/frame_case_mapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..7e2ed513346996e764d31fe0edd9774d780eb880 --- /dev/null +++ b/xfg-frame-archetype-std-app/src/main/resources/mybatis/mapper/frame_case_mapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + INSERT INTO table(a,b,c) VALUES(#{a}, #{b}, #{c}) + + + + UPDATE table SET a = #{a} WHERE b = #{b} + + + + + diff --git a/xfg-frame-archetype-std-app/src/test/java/cn/bugstack/test/ApiTest.java b/xfg-frame-archetype-std-app/src/test/java/cn/bugstack/test/ApiTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9bc1a201d91950bc85a3ad92354618d6b3c5f2a0 --- /dev/null +++ b/xfg-frame-archetype-std-app/src/test/java/cn/bugstack/test/ApiTest.java @@ -0,0 +1,19 @@ +package cn.bugstack.test; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@Slf4j +@RunWith(SpringRunner.class) +@SpringBootTest +public class ApiTest { + + @Test + public void test() { + log.info("测试完成"); + } + +} diff --git a/xfg-frame-archetype-std-domain/pom.xml b/xfg-frame-archetype-std-domain/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..5277f9bc30a4e2e3f81e58cbaa21a41d2b47b33f --- /dev/null +++ b/xfg-frame-archetype-std-domain/pom.xml @@ -0,0 +1,75 @@ + + + 4.0.0 + + cn.bugstack + xfg-frame-archetype-std + 1.0-SNAPSHOT + + + xfg-frame-archetype-std-domain + + + + org.projectlombok + lombok + + + com.alibaba + fastjson + + + org.apache.commons + commons-lang3 + + + com.google.guava + guava + + + io.jsonwebtoken + jjwt + + + com.auth0 + java-jwt + + + commons-codec + commons-codec + + + + cn.bugstack + xfg-frame-archetype-std-types + + + + + xfg-frame-archetype-std-domain + + + org.apache.maven.plugins + maven-archetype-plugin + 3.2.0 + + + + create-from-project + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${java.version} + ${java.version} + ${java.version} + + + + + + diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/adapter/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/adapter/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..9a649da9f046cdac4ec8889b06b635c04124acad --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/adapter/package-info.java @@ -0,0 +1,4 @@ +/** + * 外部接口适配器层;当需要调用外部接口时,则创建出这一层,并定义接口,之后由基础设施层的 adapter 层具体实现 + */ +package cn.bugstack.domain.xxx.adapter; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/model/aggregate/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/model/aggregate/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..370736a7afdc268788b2f8ec1ec9f88bdb8e9a02 --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/model/aggregate/package-info.java @@ -0,0 +1,7 @@ +/** + * 聚合对象; + * 1. 聚合实体和值对象 + * 2. 聚合是聚合的对象,和提供基础处理对象的方法。但不建议在聚合中引入仓储和接口来做过大的逻辑。而这些复杂的操作应该放到service中处理 + * 3. 对象名称 XxxAggregate + */ +package cn.bugstack.domain.xxx.model.aggregate; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/model/entity/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/model/entity/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..56076f077f7edc1a6941fb1e0a0dca6f902974b5 --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/model/entity/package-info.java @@ -0,0 +1,7 @@ +/** + * 实体对象; + * 1. 一般和数据库持久化对象1v1的关系,但因各自开发系统的不同,也有1vn的可能。 + * 2. 如果是老系统改造,那么旧的库表冗余了太多的字段,可能会有nv1的情况 + * 3. 对象名称 XxxEntity + */ +package cn.bugstack.domain.xxx.model.entity; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/model/valobj/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/model/valobj/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..49626aeb9e9ae092d820c8f99299a76742829009 --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/model/valobj/package-info.java @@ -0,0 +1,6 @@ +/** + * 值对象; + * 1. 用于描述对象属性的值,如一个库表中有json后者一个字段多个属性信息的枚举对象 + * 2. 对象名称如;XxxVO + */ +package cn.bugstack.domain.xxx.model.valobj; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/repository/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/repository/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..28347611b0cd3edf3164e0949a9fd526f6c773c3 --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/repository/package-info.java @@ -0,0 +1,5 @@ +/** + * 仓储服务 + * 1. 定义仓储接口,之后由基础设施层做具体实现 + */ +package cn.bugstack.domain.xxx.repository; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/service/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/service/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..7941ad4daadd3e7a0129f05f010bdf54a59db10f --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/xxx/service/package-info.java @@ -0,0 +1 @@ +package cn.bugstack.domain.xxx.service; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/model/aggregate/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/model/aggregate/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..43fd7a750be936f8d61a052e617fb33032caf4b6 --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/model/aggregate/package-info.java @@ -0,0 +1,7 @@ +/** + * 聚合对象; + * 1. 聚合实体和值对象 + * 2. 聚合是聚合的对象,和提供基础处理对象的方法。但不建议在聚合中引入仓储和接口来做过大的逻辑。而这些复杂的操作应该放到service中处理 + * 3. 对象名称 XxxAggregate + */ +package cn.bugstack.domain.yyy.model.aggregate; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/model/entity/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/model/entity/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..4e4401cfbbe7b8129c43892f4e4ef8c3bc2a1737 --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/model/entity/package-info.java @@ -0,0 +1,7 @@ +/** + * 实体对象; + * 1. 一般和数据库持久化对象1v1的关系,但因各自开发系统的不同,也有1vn的可能。 + * 2. 如果是老系统改造,那么旧的库表冗余了太多的字段,可能会有nv1的情况 + * 3. 对象名称 XxxEntity + */ +package cn.bugstack.domain.yyy.model.entity; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/model/valobj/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/model/valobj/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..1cf24586b182ead94c030724f0b954fe8cfb23f4 --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/model/valobj/package-info.java @@ -0,0 +1,6 @@ +/** + * 值对象; + * 1. 用于描述对象属性的值,如一个库表中有json后者一个字段多个属性信息的枚举对象 + * 2. 对象名称如;XxxVO + */ +package cn.bugstack.domain.yyy.model.valobj; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/repository/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/repository/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..8ad830443a62efe546d6d4777e489abe954e119b --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/repository/package-info.java @@ -0,0 +1,5 @@ +/** + * 仓储服务 + * 1. 定义仓储接口,之后由基础设施层做具体实现 + */ +package cn.bugstack.domain.yyy.repository; \ No newline at end of file diff --git a/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/service/package-info.java b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/service/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..7e73392e3a9b40f5c5b44c1ce18211d6d280c110 --- /dev/null +++ b/xfg-frame-archetype-std-domain/src/main/java/cn/bugstack/domain/yyy/service/package-info.java @@ -0,0 +1 @@ +package cn.bugstack.domain.yyy.service; \ No newline at end of file diff --git a/xfg-frame-archetype-std-infrastructure/pom.xml b/xfg-frame-archetype-std-infrastructure/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..55dea5f0ddaf0f8d87affc08d4145709ced40c84 --- /dev/null +++ b/xfg-frame-archetype-std-infrastructure/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + cn.bugstack + xfg-frame-archetype-std + 1.0-SNAPSHOT + + + xfg-frame-archetype-std-infrastructure + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + + + org.projectlombok + lombok + + + + cn.bugstack + xfg-frame-archetype-std-domain + + + + + xfg-frame-archetype-std-infrastructure + + + org.apache.maven.plugins + maven-archetype-plugin + 3.2.0 + + + + create-from-project + + + + + + + + diff --git a/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/gateway/adapter/package-info.java b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/gateway/adapter/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..c79e36613db4c332068df4b3883d9a35f0dafe05 --- /dev/null +++ b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/gateway/adapter/package-info.java @@ -0,0 +1 @@ +package cn.bugstack.infrastructure.gateway.adapter; \ No newline at end of file diff --git a/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/gateway/api/package-info.java b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/gateway/api/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..e1319b9c9dd389a9f52b3c38c53f6dfbfe7e69c3 --- /dev/null +++ b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/gateway/api/package-info.java @@ -0,0 +1 @@ +package cn.bugstack.infrastructure.gateway.api; \ No newline at end of file diff --git a/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/gateway/dto/package-info.java b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/gateway/dto/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..80f3ccbf66a36b243d2642fd0321c63ad7f68f22 --- /dev/null +++ b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/gateway/dto/package-info.java @@ -0,0 +1 @@ +package cn.bugstack.infrastructure.gateway.dto; \ No newline at end of file diff --git a/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/dao/package-info.java b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/dao/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..7e6cb8b06e18cd922b015e78e89eb4739c68f5db --- /dev/null +++ b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/dao/package-info.java @@ -0,0 +1,4 @@ +/** + * DAO 接口;IXxxDao + */ +package cn.bugstack.infrastructure.persistent.dao; \ No newline at end of file diff --git a/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/po/package-info.java b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/po/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..0ff65fe2237c1a5a188be4772a987129343ea709 --- /dev/null +++ b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/po/package-info.java @@ -0,0 +1,4 @@ +/** + * 持久化对象;XxxPO 最后的 PO 是大写,UserPO + */ +package cn.bugstack.infrastructure.persistent.po; \ No newline at end of file diff --git a/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/repository/package-info.java b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/repository/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..18041e1b4a2535945dc79b45357dd8e35051f540 --- /dev/null +++ b/xfg-frame-archetype-std-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/repository/package-info.java @@ -0,0 +1,4 @@ +/** + * 仓储实现;用于实现 domain 中定义的仓储接口,如;IXxxRepository 在 Repository 中调用服务 + */ +package cn.bugstack.infrastructure.persistent.repository; \ No newline at end of file diff --git a/xfg-frame-archetype-std-trigger/pom.xml b/xfg-frame-archetype-std-trigger/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..4db8b62e0f6872020d64c20e96d926560b08c038 --- /dev/null +++ b/xfg-frame-archetype-std-trigger/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + cn.bugstack + xfg-frame-archetype-std + 1.0-SNAPSHOT + + + xfg-frame-archetype-std-trigger + + + + org.springframework.boot + spring-boot-starter-web + + + com.alibaba + fastjson + + + org.springframework + spring-tx + + + org.apache.commons + commons-lang3 + + + + org.apache.dubbo + dubbo + + + org.apache.dubbo + dubbo-spring-boot-starter + + + + + cn.bugstack + xfg-frame-archetype-std-types + + + cn.bugstack + xfg-frame-archetype-std-domain + + + cn.bugstack + xfg-frame-archetype-std-api + + + + + xfg-frame-archetype-std-trigger + + + org.apache.maven.plugins + maven-archetype-plugin + 3.2.0 + + + + create-from-project + + + + + + + + diff --git a/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/http/package-info.java b/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/http/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..78923e014adfcafa9b810bf0c3e031e4d2564f70 --- /dev/null +++ b/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/http/package-info.java @@ -0,0 +1,4 @@ +/** + * HTTP 接口服务 + */ +package cn.bugstack.trigger.http; \ No newline at end of file diff --git a/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/job/package-info.java b/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/job/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..1c1926cf3a8b910ecce664ff9228dbf608b017a6 --- /dev/null +++ b/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/job/package-info.java @@ -0,0 +1,4 @@ +/** + * 任务服务,可以选择使用 Spring 默认提供的 Schedule https://bugstack.cn/md/road-map/quartz.html + */ +package cn.bugstack.trigger.job; \ No newline at end of file diff --git a/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/listener/package-info.java b/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/listener/package-info.java new file mode 100644 index 0000000000000000000000000000000000000000..c561ee9475f05b43b318c663118117f23c37b210 --- /dev/null +++ b/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/listener/package-info.java @@ -0,0 +1,5 @@ +/** + * 监听服务;在单体服务中,解耦流程。类似MQ的使用,如Spring的Event,Guava的事件总线都可以。如果使用了 Redis 那么也可以有发布/订阅使用。 + * Guava:https://bugstack.cn/md/road-map/guava.html + */ +package cn.bugstack.trigger.listener; \ No newline at end of file diff --git a/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/rpc/UserService.java b/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/rpc/UserService.java new file mode 100644 index 0000000000000000000000000000000000000000..408b29fd04169ca6ef127b01d1a1750abbbccfb7 --- /dev/null +++ b/xfg-frame-archetype-std-trigger/src/main/java/cn/bugstack/trigger/rpc/UserService.java @@ -0,0 +1,16 @@ +package cn.bugstack.trigger.rpc; + +import cn.bugstack.api.IUserService; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; + +@Slf4j +@DubboService(version = "1.0.0", timeout = 450) +public class UserService implements IUserService { + + @Override + public String queryUserInfo(String req) { + return "查询用户信息"; + } + +} diff --git a/xfg-frame-archetype-std-types/pom.xml b/xfg-frame-archetype-std-types/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..9f5dbceb10a38567ac68d29ced42f93a55f778a9 --- /dev/null +++ b/xfg-frame-archetype-std-types/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + + cn.bugstack + xfg-frame-archetype-std + 1.0-SNAPSHOT + + + xfg-frame-archetype-std-types + + + + org.springframework.boot + spring-boot-starter-web + + + org.projectlombok + lombok + + + com.thoughtworks.xstream + xstream + + + dom4j + dom4j + + + org.apache.commons + commons-lang3 + + + + + xfg-frame-archetype-std-types + + + org.apache.maven.plugins + maven-archetype-plugin + 3.2.0 + + + + create-from-project + + + + + + + + diff --git a/xfg-frame-archetype-std-types/src/main/java/cn/bugstack/types/common/Constants.java b/xfg-frame-archetype-std-types/src/main/java/cn/bugstack/types/common/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..3e21a0d11d286581ba84b5545c78411809a745e9 --- /dev/null +++ b/xfg-frame-archetype-std-types/src/main/java/cn/bugstack/types/common/Constants.java @@ -0,0 +1,7 @@ +package cn.bugstack.types.common; + +public class Constants { + + public final static String SPLIT = ","; + +} diff --git a/xfg-frame-archetype-std-types/src/main/java/cn/bugstack/types/enums/ResponseCode.java b/xfg-frame-archetype-std-types/src/main/java/cn/bugstack/types/enums/ResponseCode.java new file mode 100644 index 0000000000000000000000000000000000000000..7460d4b0cfdc6c3c82e27089338ef10bf0c40ef1 --- /dev/null +++ b/xfg-frame-archetype-std-types/src/main/java/cn/bugstack/types/enums/ResponseCode.java @@ -0,0 +1,20 @@ +package cn.bugstack.types.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +public enum ResponseCode { + + SUCCESS("0000", "成功"), + UN_ERROR("0001", "未知失败"), + ILLEGAL_PARAMETER("0002", "非法参数"), + ; + + private String code; + private String info; + +} diff --git a/xfg-frame-archetype-std-types/src/main/java/cn/bugstack/types/exception/AppException.java b/xfg-frame-archetype-std-types/src/main/java/cn/bugstack/types/exception/AppException.java new file mode 100644 index 0000000000000000000000000000000000000000..8a499d4443922c95d9f67eeb188fdc9bcfd13b6c --- /dev/null +++ b/xfg-frame-archetype-std-types/src/main/java/cn/bugstack/types/exception/AppException.java @@ -0,0 +1,46 @@ +package cn.bugstack.types.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class AppException extends RuntimeException { + + private static final long serialVersionUID = 5317680961212299217L; + + /** 异常码 */ + private String code; + + /** 异常信息 */ + private String info; + + public AppException(String code) { + this.code = code; + } + + public AppException(String code, Throwable cause) { + this.code = code; + super.initCause(cause); + } + + public AppException(String code, String message) { + this.code = code; + this.info = message; + } + + public AppException(String code, String message, Throwable cause) { + this.code = code; + this.info = message; + super.initCause(cause); + } + + @Override + public String toString() { + return "cn.bugstack.x.api.types.exception.XApiException{" + + "code='" + code + '\'' + + ", info='" + info + '\'' + + '}'; + } + +}