Application Construction Platform 应用构建平台。该项目是用Kotlin和Java语言混编封装的脚手架。本人会密切关注业界最新动态,并使用最新技术持续更新优化。使用该脚手架可快速搭建基于Kotlin或Java语言的普通应用、SpringBoot应用和SpringCloud应用。
APACHE-2.0 License
此项目已不再更新,由于某些不可抗因素,已转移至https://gitee.com/zhangbinhub/acp
javaVersion
-jdk8
定义外部依赖版本号
定义项目/模块结构
gradle全局参数:
groupid.acp.core
公共构建脚本
单个模块特有的构建脚本
gradlew project:release -Pactive=test
mavenUploadUrlRelease=https://maven.com/repositories/releases/
mavenUploadUrlSnapshot=https://maven.com/repositories/snapshot/
mavenUserName=username
mavenPassword=password
mavenUploadUrlRelease=https://maven.com/repositories/releases/
mavenUploadUrlSnapshot=https://maven.com/repositories/snapshot/
mavenUserName=username
mavenPassword=password
signing.keyId=shortId
signing.password=keyPassword
signing.secretKeyRingFile=keyFile
gradlew wrapper --gradle-version=7.4 --distribution-type=all
引入 acp 下相应模块包,使用 acp-dependency 进行版本管理,例如:
dependencyManagement {
imports {
mavenBom("io.github.zhangbinhub.acp.dependency:acp-dependency:2021.0.2")
}
}
springboot 应用扩展组件
依赖 acp-client
在 springboot 基础上整合大量底层功能,扩展支持 tcp、udp 等协议服务端配置;同时封装定时任务
提供一个 Spring Boot 的InfoContributor
,例如:
curl http://localhost:8080/actuator/info
{
"acp": {
"version": "2021.0.2"
}
}
acp:
swagger:
enabled: true
acp:
schedule:
cron:
task1: 0 0/1 * * * ?
key-value 形式(可配置多个),其中 task1 为任务的 beanName;0 0/1 * * * ? 为定时执行规则cron表达式。
acp:
controller-log:
enabled: true #是否开启controller日志输出,默认true
no-log-uri-regular:
- /oauth/.* #不进行日志输出的 url 正则表达式,可配置多个
acp:
tcp-server:
listeners:
- name: testSocket #监听服务名称
enabled: true #是否启用,默认false
keepAlive: false #是否为长连接,默认false;TCP服务有效
idletime: 10000 #连接进入空闲状态的等待时间单位毫秒,默认10000;TCP服务有效
messageDecoder: "" #粘包拆包解码器 Bean 的类名,默认不设置;TCP服务有效
threadNumber: 100 #接收报文处理的最大线程数,为0或不设置则使用系统默认线程数;TCP服务有效
hex: false #接收报文是否是十六进制机器码,默认false
port: 9999 #监听端口号
handleBean: io.github.zhangbinhub.acp.test.application.test.TestTcpHandle #报文接收处理 Bean 的类名
responsable: true #报文是否需要进行原路响应,默认true
charset: gbk #服务使用字符集,为空或不设置则系统默认字符集
acp:
udp-server:
listeners:
- name: testSocket #监听服务名称
enabled: true #是否启用,默认false
hex: false #接收报文是否是十六进制机器码,默认false
port: 9999 #监听端口号
handleBean: io.github.zhangbinhub.acp.test.application.test.TestTcpHandle #报文接收处理 Bean 的类名
responsable: true #报文是否需要进行原路响应,默认true
charset: gbk
acp:
ftp-server:
listeners:
- name: "测试ftp服务器" #服务名车鞥
enabled: true #可空,是否启用,默认false
port: 221 #服务端口号
pwd-encrypt-mode: MD5 #可空,用户密码加密方式(支持MD5、SHA1、SHA256),默认MD5
login-failure-delay: 30 #可空,默认30
max-login-failures: 20 #可空,默认20
max-logins: 10 #可空,默认10
max-anonymous-logins: 20 #可空,默认20
max-threads: 10 #可空,默认10
default-home-directory: "abs:D:\\个人\\测试ftp" #默认根路径
anonymous-login-enabled: false #可空,是否允许匿名用户登录,默认false
anonymous-write-permission: false #可空,是否允许匿名用户写操作,默认false
user-factory-class: io.github.zhangbinhub.acp.test.application.test.TestUserFactory #用户工厂类
acp:
sftp-server:
listeners:
- name: "测试sftp服务器" #服务名称
enabled: true #可空,是否启用,默认false
port: 4221 #服务端口号
host-key-path: "files/resource/key/hostkey" #服务器密钥文件路径
password-auth: true #可空,是否进行密码登录,默认true
public-key-auth: false #可空,是否进行证书登录(开启后仅支持证书验证),用户证书只支持openssh生成的密钥,默认false
key-auth-type: pem #可空,证书类型(der/pem/ssh),默认pem
key-auth-mode: RSA #可空,证书验证模式(RSA/DSA),默认RSA
default-home-directory: "abs:D:\\个人\\测试ftp" #默认根路径
user-factory-class: io.github.zhangbinhub.acp.test.application.test.TestUserFactory #用户工厂类
命令 | 描述 |
---|---|
./server.sh | 查看可用参数 |
./server.sh status | 查看系统运行状态 |
./server.sh start | 启动应用 |
./server.sh stop | 停止应用 |
./server.sh restart | 重启应用 |
引入 cloud 下相应模块包,demo 位于 cloud 下,使用 acp-dependency 进行版本管理,例如:
dependencyManagement {
imports {
mavenBom("io.github.zhangbinhub.acp.dependency:acp-dependency:2021.0.0-M4")
}
}
原子服务公共模块:
监控界面
网关服务
统一认证服务:token 存储于 Redis,user 及 client 信息可扩展配置
url | 描述 |
---|---|
/oauth/authorize | 申请授权,basic认证保护 |
/oauth/token | 获取token的服务,url中没有client_id和client_secret的,走basic认证保护 |
/oauth/check_token | 资源服务器用来校验token,basic认证保护 |
/oauth/confirm_access | 授权确认,basic认证保护 |
/oauth/error | 认证失败,无认证保护 |
test☁️oauth-server 中增加 authorization_code 方式配置,详见 io.github.zhangbinhub.acp.cloud.oauth.conf.WebSecurityConfiguration 注释
注:使用 authorization_code 方式时,认证请求时需要直接访问 oauth-server 不能通过 gateway
日志服务,使用 kafka 作为日志消息队列
原子服务,分别调用 hello 和 world
原子服务
原子服务
基础中间件包括:redis、zookeeper、kafka、kafka-manager、elasticsearch、kibana、logstash、zoonavigator-api、zoonavigator-web、prometheus、grafana、setup_grafana_datasource
命令模式进入dockerfile目录,执行启动命令
docker-compose -f docker-compose-base.yaml up -d
命令模式进入dockerfile目录,执行启动命令
docker-compose -f docker-compose-base.yaml stop
命令模式进入dockerfile目录,执行启动命令
docker-compose -f docker-compose-base.yaml down
acp:
cloud:
oauth:
oauth-server: true
a. 配置两个 appender(一个输出到本地文件,一个输出到logstash;单独配置的目的是为了将不同类型的日志写入不同名称的文件并在elasticsearch中创建不同的索引)
b. 之后再配置一个 logger (name属性为某个日志类型),包含之前配置的两个 appender
c. 强烈建议 logback-spring.xml 中配置的本地日志文件路径需与 yml 中的 logging.file.path 一致,方便统一管理
acp:
cloud:
log-server:
enabled: true #是否开启日志服务
acp:
cloud:
log-server:
client:
enabled: true #是否启用日志服务
log-type: ALL #当前服务的日志类型,默认ALL,也自定义;自定义的类型需要在日志服务中参照ALL配置appender和logger
exclude group: 'org.springframework.cloud', module: 'spring-cloud-starter-stream-kafka'
acp:
cloud:
oauth:
auth-exception-entry-point: AuthExceptionEntryPoint #自定义 token 异常 bean 名称
access-denied-handler: CustomAccessDeniedHandler #自定义权限异常 bean 名称
acp:
cloud:
oauth:
resource-server-permit-all-path:
- /customer
resource-server-security-path:
- /customer2
acp:
cloud:
oauth:
resource-server: false #是否是资源服务器
security:
oauth2:
resource:
token-info-uri: http://server-oauth2/open/inner/check-token
自行编写 Dockerfile,使用命令单独执行或使用 docker-compose 批量执行,请自行百度