init
This commit is contained in:
commit
8bcbf1b26b
39
.gitignore
vendored
Normal file
39
.gitignore
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
3
Dockerfile
Normal file
3
Dockerfile
Normal file
@ -0,0 +1,3 @@
|
||||
FROM harbor.axzo.cn/images_base/jdk1.8-fc:v1
|
||||
COPY server/target/demo-server.jar ./demo-server.jar
|
||||
ENTRYPOINT [{ENTRYPOINT}]
|
||||
27
orgmanax-api/pom.xml
Normal file
27
orgmanax-api/pom.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>cn.axzo.infra</groupId>
|
||||
<artifactId>axzo-parent</artifactId>
|
||||
<version>2.4.13.4</version>
|
||||
</parent>
|
||||
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax-api</artifactId>
|
||||
<version>${revision}</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-openfeign</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,13 @@
|
||||
package cn.axzo.orgmanax.config;
|
||||
|
||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2022/4/25 10:48
|
||||
*/
|
||||
@Configuration
|
||||
@EnableFeignClients(basePackages = "cn.axzo.orgmanax.feign")
|
||||
public class OrgmanaxApiConfig {
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package cn.axzo.orgmanax.feign;
|
||||
|
||||
|
||||
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author tanjie@axzo.cn
|
||||
*/
|
||||
@FeignClient(
|
||||
value = "orgmanax",
|
||||
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
|
||||
public interface OrganizationalUnitApi {
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package cn.axzo.orgmanax;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 对外提供的RPC接口
|
||||
* 1.该模块要做到尽量轻量级
|
||||
* 2.不允许依赖其它服务的api或者service
|
||||
* 3.不允许依赖本项目的service
|
||||
* 4.可以依赖common
|
||||
* 5.做好内部防御(如批量查询分页限制等)防止外部服务打爆自身
|
||||
*
|
||||
*/
|
||||
@ -0,0 +1 @@
|
||||
package cn.axzo.orgmanax.req;
|
||||
@ -0,0 +1 @@
|
||||
package cn.axzo.orgmanax.resp;
|
||||
2
orgmanax-api/src/resources/META-INF/spring.factories
Normal file
2
orgmanax-api/src/resources/META-INF/spring.factories
Normal file
@ -0,0 +1,2 @@
|
||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
cn.axzo.orgmanax.config.OrgmanaxApiConfig
|
||||
38
orgmanax-common/.gitignore
vendored
Normal file
38
orgmanax-common/.gitignore
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
20
orgmanax-common/pom.xml
Normal file
20
orgmanax-common/pom.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>orgmanax-common</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,6 @@
|
||||
package cn.axzo.orgmanax.config;
|
||||
/**
|
||||
* 公共组件、枚举等
|
||||
*
|
||||
*
|
||||
*/
|
||||
38
orgmanax-domain/.gitignore
vendored
Normal file
38
orgmanax-domain/.gitignore
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
20
orgmanax-domain/pom.xml
Normal file
20
orgmanax-domain/pom.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>orgmanax-domain</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
11
orgmanax-domain/src/main/java/cn/axzo/orgmanax/Main.java
Normal file
11
orgmanax-domain/src/main/java/cn/axzo/orgmanax/Main.java
Normal file
@ -0,0 +1,11 @@
|
||||
package cn.axzo.orgmanax;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/11/28 15:52
|
||||
*/
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Hello world!");
|
||||
}
|
||||
}
|
||||
38
orgmanax-infra/.gitignore
vendored
Normal file
38
orgmanax-infra/.gitignore
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
73
orgmanax-infra/pom.xml
Normal file
73
orgmanax-infra/pom.xml
Normal file
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>orgmanax-infra</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax-domain</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<!-- rocket相关的包 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.rocketmq</groupId>
|
||||
<artifactId>rocketmq-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<!-- rocket相关的包 -->
|
||||
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
|
||||
</dependency>
|
||||
<!-- TODO 根据项目需要, 使用不同的组件-->
|
||||
|
||||
<!---->
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>dao-support-lib</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>web-support-lib</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>event-support-lib</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>unittest-support-lib</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.logstash.logback</groupId>
|
||||
<artifactId>logstash-logback-encoder</artifactId>
|
||||
<version>6.6</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@ -0,0 +1,39 @@
|
||||
package cn.axzo.orgmanax.client;
|
||||
|
||||
import cn.axzo.foundation.web.support.apps.AppCenter;
|
||||
import cn.axzo.foundation.web.support.rpc.RpcClient;
|
||||
import cn.axzo.foundation.web.support.rpc.RpcClientWrapper;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class RpcClientHolder {
|
||||
final AppCenter appCenter;
|
||||
private final RpcClient rpcClient;
|
||||
|
||||
private final LoadingCache<String, RpcClient> rpcClientCache = CacheBuilder.newBuilder()
|
||||
.maximumSize(50)
|
||||
.expireAfterAccess(10, TimeUnit.MINUTES)
|
||||
.build(new CacheLoader<String, RpcClient>() {
|
||||
@Override
|
||||
public RpcClient load(String key) {
|
||||
return RpcClientWrapper.builder()
|
||||
.normalRpcClient(rpcClient)
|
||||
.appResolver(() -> appCenter.getByName(key))
|
||||
.build();
|
||||
}
|
||||
});
|
||||
|
||||
public RpcClient getRpcClient(String appName) {
|
||||
RpcClient result = rpcClientCache.getUnchecked(appName);
|
||||
Objects.requireNonNull(result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
103
orgmanax-infra/src/main/java/cn/axzo/orgmanax/config/Config.java
Normal file
103
orgmanax-infra/src/main/java/cn/axzo/orgmanax/config/Config.java
Normal file
@ -0,0 +1,103 @@
|
||||
package cn.axzo.orgmanax.config;
|
||||
|
||||
import cn.axzo.foundation.web.support.AppRuntime;
|
||||
import cn.axzo.foundation.web.support.apps.AppCenter;
|
||||
import cn.axzo.foundation.web.support.apps.AppCenterImpl;
|
||||
import cn.axzo.foundation.web.support.config.DefaultWebMvcConfig;
|
||||
import cn.axzo.foundation.web.support.exception.AbstractExceptionHandler;
|
||||
import cn.axzo.foundation.web.support.log.RequestLogAspect;
|
||||
import cn.axzo.foundation.web.support.rpc.RpcClient;
|
||||
import cn.axzo.foundation.web.support.rpc.RpcClientImpl;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration;
|
||||
import org.springframework.boot.task.TaskExecutorBuilder;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.*;
|
||||
import org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME;
|
||||
|
||||
/**
|
||||
* Server服务唯一的配置入口
|
||||
* TODO 按需启用/禁用
|
||||
*/
|
||||
@Slf4j
|
||||
@Configuration
|
||||
@Import({DefaultWebMvcConfig.class,
|
||||
MybatisPlusConfig.class,
|
||||
RocketMQEventConfig.class})
|
||||
public class Config {
|
||||
@Value("${web.debug.host:}")
|
||||
private String debugHost;
|
||||
|
||||
@Bean
|
||||
public ScheduledThreadPoolExecutor scheduledThreadPoolExecutor(AppRuntime appRuntime) {
|
||||
// bfs-client会使用这个scheduler
|
||||
ScheduledThreadPoolExecutor scheduledThreadPoolExecutor =
|
||||
new ScheduledThreadPoolExecutor(1, new ThreadFactoryBuilder()
|
||||
.setNameFormat(appRuntime.getAppName() + "-%d").build());
|
||||
scheduledThreadPoolExecutor.setMaximumPoolSize(8);
|
||||
return scheduledThreadPoolExecutor;
|
||||
}
|
||||
|
||||
/**
|
||||
* XXX Spring默认配置当有Executor的bean后不再装载TaskExecutor, 这里因为手动注册了
|
||||
* {@link #scheduledThreadPoolExecutor}会导致spring不再自动注册TaskExecutor, 因此需要去掉ConditionalOnMissingBean的限制.
|
||||
* 参考{@link TaskExecutionAutoConfiguration#applicationTaskExecutor}
|
||||
*/
|
||||
@Bean(name = {APPLICATION_TASK_EXECUTOR_BEAN_NAME,
|
||||
AsyncAnnotationBeanPostProcessor.DEFAULT_TASK_EXECUTOR_BEAN_NAME})
|
||||
public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) {
|
||||
ThreadPoolTaskExecutor executor = builder.build();
|
||||
executor.setThreadNamePrefix("bfs-task");
|
||||
// prevent interrupting running tasks
|
||||
// https://www.baeldung.com/spring-boot-graceful-shutdown
|
||||
executor.setWaitForTasksToCompleteOnShutdown(true);
|
||||
return executor;
|
||||
}
|
||||
|
||||
@Bean
|
||||
AppRuntime appRuntime(ApplicationContext applicationContext) {
|
||||
return AppRuntime.builder().applicationContext(applicationContext).build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RequestLogAspect requestLogAspect() {
|
||||
return RequestLogAspect.builder().build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
public RpcClient rpcClient() {
|
||||
return RpcClientImpl.builder().build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Profile({"!unittest && !local"})
|
||||
AbstractExceptionHandler.ExceptionHandlerHook exceptionHandlerHook() {
|
||||
return new AbstractExceptionHandler.ExceptionHandlerHook() {
|
||||
@Override
|
||||
public Consumer<AbstractExceptionHandler.ExceptionContext> getExceptionConsumer() {
|
||||
return context -> log.error("未捕获内部异常",
|
||||
"logText: {}", context.dumpRequest(), context.getException());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Bean
|
||||
AppCenter appCenter(ScheduledThreadPoolExecutor scheduledThreadPoolExecutor) {
|
||||
return AppCenterImpl.builder()
|
||||
.executor(scheduledThreadPoolExecutor)
|
||||
.debugHost(debugHost)
|
||||
//本地调试 需要特殊映射的路径 key=服务名 value = host后的映射的服务路径
|
||||
.debugAppRoutes(ImmutableMap.of("data-collection", "dataCollection"))
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,45 @@
|
||||
package cn.axzo.orgmanax.config;
|
||||
|
||||
import cn.axzo.foundation.dao.support.mysql.plugins.LimitInterceptor;
|
||||
import cn.axzo.foundation.web.support.conditional.LocalCondition;
|
||||
import com.baomidou.mybatisplus.annotation.DbType;
|
||||
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.logging.stdout.StdOutImpl;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
@Slf4j
|
||||
@EnableTransactionManagement
|
||||
@MapperScan("cn.axzo.**.mapper")
|
||||
public class MybatisPlusConfig {
|
||||
@Bean
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
|
||||
return interceptor;
|
||||
}
|
||||
@Bean
|
||||
public ConfigurationCustomizer configurationCustomizer() {
|
||||
return configuration -> {
|
||||
LimitInterceptor limitInterceptor = LimitInterceptor.builder()
|
||||
.overflowConsumer(limitContext -> {
|
||||
log.warn("数据库击穿告警, sql = {}, limitSize = {}", limitContext.getSql(), limitContext.getLimitSize());
|
||||
})
|
||||
.build();
|
||||
configuration.addInterceptor(limitInterceptor);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 本地启动默认打印sql日志
|
||||
*/
|
||||
@Bean
|
||||
@LocalCondition.Conditional
|
||||
public ConfigurationCustomizer localConfigurationCustomizer() {
|
||||
return configuration -> configuration.setLogImpl(StdOutImpl.class);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,108 @@
|
||||
package cn.axzo.orgmanax.config;
|
||||
|
||||
import cn.axzo.foundation.event.support.consumer.*;
|
||||
import cn.axzo.foundation.event.support.producer.EventProducer;
|
||||
import cn.axzo.foundation.event.support.producer.RocketMQEventProducer;
|
||||
import cn.axzo.foundation.web.support.AppRuntime;
|
||||
import cn.axzo.foundation.web.support.conditional.NonLocalCondition;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.spring.annotation.ConsumeMode;
|
||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 如果需要使用mq, 则启用该类, 并设置DEFAULT_MODULE为当前服务名称
|
||||
*/
|
||||
@Slf4j
|
||||
public class RocketMQEventConfig {
|
||||
public static final String DEFAULT_MODULE = "archetype-server";
|
||||
|
||||
@Value("topic_${spring.application.name}_${spring.profiles.active}")
|
||||
private String currentTopic;
|
||||
|
||||
@Value("topic_${spring.application.name}_retry_${spring.profiles.active}")
|
||||
private String currentRetryTopic;
|
||||
|
||||
/**
|
||||
* 注意这里不能使用@Configuration,因为会导致该类被spring代理,代理类上注解无法使用 clazz.getAnnotation(RocketMQMessageListener.class)方式获取到注解信息
|
||||
* 而{@link org.apache.rocketmq.spring.autoconfigure.ListenerContainerConfiguration}使用了这种方式,导致启动报错,所以需要在外部import该配置类
|
||||
*/
|
||||
@NonLocalCondition.Conditional
|
||||
@Component
|
||||
// XXX: consumerGroup 必须全局唯一. RocketMQ要求同一个Consumer Group的消费者必须要拥有相同的注册信息,即必须要听一样的topic(并且tag也一样)。
|
||||
// 这里通个添加 topic信息来保证唯一.
|
||||
@RocketMQMessageListener(topic = "topic_${spring.application.name}_${spring.profiles.active}",
|
||||
consumerGroup = "GID_${spring.application.name}_${spring.application.name}_${spring.profiles.active}",
|
||||
consumeMode = ConsumeMode.ORDERLY, enableMsgTrace = false)
|
||||
public static class Listener extends DefaultRocketMQListener {
|
||||
public Listener(EventConsumer eventConsumer) {
|
||||
super(eventConsumer);
|
||||
}
|
||||
}
|
||||
|
||||
@NonLocalCondition.Conditional
|
||||
@Component
|
||||
// XXX: consumerGroup 必须全局唯一. RocketMQ要求同一个Consumer Group的消费者必须要拥有相同的注册信息,即必须要听一样的topic(并且tag也一样)。
|
||||
// 这里通个添加 topic信息来保证唯一.
|
||||
@RocketMQMessageListener(topic = "topic_${spring.application.name}_retry_${spring.profiles.active}",
|
||||
consumerGroup = "GID_${spring.application.name}_retry_${spring.application.name}_${spring.profiles.active}",
|
||||
consumeMode = ConsumeMode.ORDERLY, enableMsgTrace = false)
|
||||
public static class RetryListener extends DefaultRocketMQListener {
|
||||
public RetryListener(RetryableEventConsumer retryableEventConsumer) {
|
||||
super(retryableEventConsumer);
|
||||
}
|
||||
}
|
||||
|
||||
@NonLocalCondition.Conditional
|
||||
@Component
|
||||
// XXX: consumerGroup 必须全局唯一. RocketMQ要求同一个Consumer Group的消费者必须要拥有相同的注册信息,即必须要听一样的topic(并且tag也一样)。
|
||||
// 这里通个添加 topic信息来保证唯一.
|
||||
@RocketMQMessageListener(topic = "topic_workflow_engine_${spring.profiles.active}",
|
||||
consumerGroup = "GID_${spring.application.name}_workflow_engine_${spring.profiles.active}",
|
||||
consumeMode = ConsumeMode.ORDERLY, enableMsgTrace = false)
|
||||
public static class WorkflowListener extends DefaultRocketMQListener {
|
||||
public WorkflowListener(EventConsumer eventConsumer) {
|
||||
super(eventConsumer);
|
||||
}
|
||||
}
|
||||
|
||||
@Bean
|
||||
EventHandlerRepository eventHandlerRepository() {
|
||||
return EventHandlerRepository.builder()
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
EventConsumer eventConsumer(EventHandlerRepository eventHandlerRepository) {
|
||||
return DefaultEventConsumer.builder().handlerRepository(eventHandlerRepository).build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
RetryableEventConsumer retryableEventConsumer(EventConsumer eventConsumer, EventProducer eventProducer) {
|
||||
return RocketRetryableEventConsumer.builder()
|
||||
.eventConsumer(eventConsumer)
|
||||
.eventProducer(eventProducer)
|
||||
.retryTopic(currentRetryTopic)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
EventProducer eventProducer(AppRuntime appRuntime,
|
||||
RocketMQTemplate rocketMQTemplate) {
|
||||
return new RocketMQEventProducer(rocketMQTemplate,
|
||||
appRuntime.getAppName(),
|
||||
appRuntime.getAppName(),
|
||||
EventProducer.Context.<RocketMQEventProducer.RocketMQMessageMeta>builder()
|
||||
.meta(RocketMQEventProducer.RocketMQMessageMeta.builder()
|
||||
.topic(currentTopic)
|
||||
.build())
|
||||
.build(),
|
||||
(event, rocketMQMessageMetaContext) -> {
|
||||
//发送后回调 可以处理事件发送统计
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
package cn.axzo.orgmanax;
|
||||
/**
|
||||
* @(#)package-info.java
|
||||
* 基础设施层
|
||||
* 1.封装外部依赖
|
||||
* 2.封装外部组件
|
||||
*
|
||||
*/
|
||||
38
orgmanax-server/.gitignore
vendored
Normal file
38
orgmanax-server/.gitignore
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
40
orgmanax-server/pom.xml
Normal file
40
orgmanax-server/pom.xml
Normal file
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>orgmanax-server</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax-domain</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax-infra</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-bootstrap</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@ -0,0 +1,38 @@
|
||||
package cn.axzo.orgmanax;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.core.env.Environment;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/11/28 15:54
|
||||
*/
|
||||
@SpringBootApplication
|
||||
@Slf4j
|
||||
public class OrgmanaxApplication {
|
||||
public static void main(String[] args) {
|
||||
ConfigurableApplicationContext run = SpringApplication.run(OrgmanaxApplication.class, args);
|
||||
Environment env = run.getEnvironment();
|
||||
log.info(
|
||||
"--------------------------------------------------------------------------------------------------------------------\n" +
|
||||
"Application 【{}】 is running on 【{}】 environment!\n" +
|
||||
"Api Local: \thttp://127.0.0.1:{}\n" +
|
||||
"Mysql: \t{}\t username:{}\n" +
|
||||
"Redis: \t{}:{}\t database:{}\n" +
|
||||
"RabbitMQ: \t{}\t username:{}",
|
||||
env.getProperty("spring.application.name"),
|
||||
env.getProperty("spring.profiles.active"),
|
||||
env.getProperty("server.port"),
|
||||
env.getProperty("spring.datasource.url"),
|
||||
env.getProperty("spring.datasource.username"),
|
||||
env.getProperty("spring.redis.host"),
|
||||
env.getProperty("spring.redis.port"),
|
||||
env.getProperty("spring.redis.database"),
|
||||
env.getProperty("spring.rabbitmq.addresses"),
|
||||
env.getProperty("spring.rabbitmq.username") +
|
||||
"\n----------------------------------------------------------");
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
/**
|
||||
* @(#)package-info.java
|
||||
* controller层
|
||||
*/
|
||||
@ -0,0 +1,14 @@
|
||||
package cn.axzo.orgmanax.controller.unit;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/2 15:01
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/organizational-unit")
|
||||
public class OrganizationalUnit {
|
||||
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
|
||||
package cn.axzo.orgmanax.service;
|
||||
/**
|
||||
* @(#)service层
|
||||
* 该层为业务实现,但是只关注业务的流程,针对domain或者infra完成整个业务的编排。不包含具体业务逻辑实现。
|
||||
* 依赖domain层或者infra层
|
||||
*
|
||||
*/
|
||||
30
orgmanax-server/src/main/resources/bootstrap.yml
Normal file
30
orgmanax-server/src/main/resources/bootstrap.yml
Normal file
@ -0,0 +1,30 @@
|
||||
spring:
|
||||
application:
|
||||
name: orgmanax
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
serialization:
|
||||
write-dates-as-timestamps: true
|
||||
generator:
|
||||
write-bigdecimal-as-plain: true
|
||||
deserialization:
|
||||
fail-on-unknown-properties: false
|
||||
read-unknown-enum-values-as-null: true
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
#指定激活环境
|
||||
profiles:
|
||||
active: ${NACOS_PROFILES_ACTIVE:dev}
|
||||
cloud:
|
||||
nacos:
|
||||
config:
|
||||
server-addr: ${NACOS_HOST}:${NACOS_PORT}
|
||||
file-extension: yaml
|
||||
namespace: ${NACOS_NAMESPACE_ID}
|
||||
lifecycle:
|
||||
timeout-per-shutdown-phase: 30s
|
||||
|
||||
# 优雅关闭
|
||||
server:
|
||||
shutdown: graceful
|
||||
|
||||
9
orgmanax-server/src/main/resources/logback-spring.xml
Normal file
9
orgmanax-server/src/main/resources/logback-spring.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<!-- 导入安心筑全局日志配置 -->
|
||||
<include resource="logback/logback-axzo.xml"/>
|
||||
<!-- 覆盖开发环境日志配置 -->
|
||||
<springProfile name="local,dev,test">
|
||||
<logger name="cn.axzo" level="DEBUG"/>
|
||||
</springProfile>
|
||||
</configuration>
|
||||
111
pom.xml
Normal file
111
pom.xml
Normal file
@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>cn.axzo.infra</groupId>
|
||||
<artifactId>axzo-parent</artifactId>
|
||||
<version>2.4.13.4</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax</artifactId>
|
||||
<version>${revision}</version>
|
||||
<packaging>pom</packaging>
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<!-- 2nd dependencies -->
|
||||
<foundation-support-lib>2.0.0-SNAPSHOT</foundation-support-lib>
|
||||
<spring-cloud-starter-alibaba-nacos.version>2021.1</spring-cloud-starter-alibaba-nacos.version>
|
||||
<spring-cloud-starter-bootstrap.version>3.0.6</spring-cloud-starter-bootstrap.version>
|
||||
<mybatis-plus.version>3.5.6</mybatis-plus.version>
|
||||
<rocket-mq.version>2.2.3</rocket-mq.version>
|
||||
<revision>2.0.0-SNAPSHOT</revision>
|
||||
</properties>
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
<version>${spring-cloud-starter-alibaba-nacos.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-bootstrap</artifactId>
|
||||
<version>${spring-cloud-starter-bootstrap.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>web-support-lib</artifactId>
|
||||
<version>${foundation-support-lib}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>dao-support-lib</artifactId>
|
||||
<version>${foundation-support-lib}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>event-support-lib</artifactId>
|
||||
<version>${foundation-support-lib}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>redis-support-lib</artifactId>
|
||||
<version>${foundation-support-lib}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>unittest-support-lib</artifactId>
|
||||
<version>${foundation-support-lib}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>${mybatis-plus.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.rocketmq</groupId>
|
||||
<artifactId>rocketmq-spring-boot-starter</artifactId>
|
||||
<version>${rocket-mq.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- maven-compiler-plugin 插件,解决 Lombok 组合 -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.version}</version>
|
||||
</path>
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>axzo</id>
|
||||
<name>axzo repository</name>
|
||||
<url>https://nexus.axzo.cn/repository/axzo/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<modules>
|
||||
<module>orgmanax-api</module>
|
||||
<module>orgmanax-common</module>
|
||||
<module>orgmanax-domain</module>
|
||||
<module>orgmanax-server</module>
|
||||
<module>orgmanax-infra</module>
|
||||
</modules>
|
||||
</project>
|
||||
Loading…
Reference in New Issue
Block a user