diff --git a/eladmin-base/pom.xml b/eladmin-base/pom.xml
new file mode 100644
index 00000000..36197931
--- /dev/null
+++ b/eladmin-base/pom.xml
@@ -0,0 +1,120 @@
+
+
+
+ eladmin
+ me.zhengjie
+ 2.7
+
+ 4.0.0
+
+ eladmin-base
+ 核心模块
+
+
+ 0.11.5
+
+ 5.8.0
+ 2.2.5
+ 0.5.5
+
+
+
+
+ com.alipay.sofa.serverless
+ sofa-serverless-base-starter
+ ${sofa.serverless.version}
+
+
+ com.alipay.sofa
+ netty-ark-plugin
+ ${sofa.ark.version}
+
+
+
+ me.zhengjie
+ eladmin-generator
+ 2.7
+
+
+ me.zhengjie
+ eladmin-common
+
+
+
+
+
+
+ me.zhengjie
+ eladmin-tools
+ 2.7
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+
+
+ io.jsonwebtoken
+ jjwt-api
+ ${jjwt.version}
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ ${jjwt.version}
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ ${jjwt.version}
+
+
+
+
+ org.quartz-scheduler
+ quartz
+
+
+
+
+ ch.ethz.ganymed
+ ganymed-ssh2
+ build210
+
+
+ com.jcraft
+ jsch
+ 0.1.55
+
+
+
+
+ com.github.oshi
+ oshi-core
+ 6.1.4
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+
+
diff --git a/eladmin-base/src/main/java/me/zhengjie/BaseAppRun.java b/eladmin-base/src/main/java/me/zhengjie/BaseAppRun.java
new file mode 100644
index 00000000..5e35d523
--- /dev/null
+++ b/eladmin-base/src/main/java/me/zhengjie/BaseAppRun.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2019-2020 Zheng Jie
+ *
+ * Licensed 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 me.zhengjie;
+
+import io.swagger.annotations.Api;
+import me.zhengjie.annotation.rest.AnonymousGetMapping;
+import me.zhengjie.utils.SpringContextHolder;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.ApplicationPidFileWriter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+
+/**
+ * 开启审计功能 -> @EnableJpaAuditing
+ *
+ * @author Zheng Jie
+ * @date 2018/11/15 9:20:19
+ */
+@EnableAsync
+@RestController
+@Api(hidden = true)
+@SpringBootApplication
+@EnableTransactionManagement
+@EnableJpaAuditing(auditorAwareRef = "auditorAware")
+public class BaseAppRun {
+
+ public static void main(String[] args) {
+ SpringApplication springApplication = new SpringApplication(BaseAppRun.class);
+ // 监控应用的PID,启动时可指定PID路径:--spring.pid.file=/home/eladmin/app.pid
+ // 或者在 application.yml 添加文件路径,方便 kill,kill `cat /home/eladmin/app.pid`
+ springApplication.addListeners(new ApplicationPidFileWriter());
+ springApplication.run(args);
+ }
+
+ @Bean
+ public SpringContextHolder springContextHolder() {
+ return new SpringContextHolder();
+ }
+
+ /**
+ * 访问首页提示
+ *
+ * @return /
+ */
+ @AnonymousGetMapping("/")
+ public String index() {
+ return "Backend service started successfully";
+ }
+}
diff --git a/eladmin-base/src/main/resources/banner.txt b/eladmin-base/src/main/resources/banner.txt
new file mode 100644
index 00000000..cc460ce3
--- /dev/null
+++ b/eladmin-base/src/main/resources/banner.txt
@@ -0,0 +1,8 @@
+ _ _ _
+ | | | | (_)
+ ___| |______ __ _ __| |_ __ ___ _ _ __
+ / _ | |______/ _` |/ _` | '_ ` _ \| | '_ \
+ | __| | | (_| | (_| | | | | | | | | | |
+ \___|_| \__,_|\__,_|_| |_| |_|_|_| |_|
+
+ :: Spring Boot :: (v2.6.4)
\ No newline at end of file
diff --git a/eladmin-base/src/main/resources/config/application-dev.yml b/eladmin-base/src/main/resources/config/application-dev.yml
new file mode 100644
index 00000000..6c5c47bb
--- /dev/null
+++ b/eladmin-base/src/main/resources/config/application-dev.yml
@@ -0,0 +1,116 @@
+#配置数据源
+spring:
+ datasource:
+ druid:
+ db-type: com.alibaba.druid.pool.DruidDataSource
+ driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
+ url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:eladmin}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
+ username: ${DB_USER:root}
+ password: ${DB_PWD:123456}
+ # 初始连接数
+ initial-size: 5
+ # 最小连接数
+ min-idle: 15
+ # 最大连接数
+ max-active: 30
+ # 超时时间(以秒数为单位)
+ remove-abandoned-timeout: 180
+ # 获取连接超时时间
+ max-wait: 3000
+ # 连接有效性检测时间
+ time-between-eviction-runs-millis: 60000
+ # 连接在池中最小生存的时间
+ min-evictable-idle-time-millis: 300000
+ # 连接在池中最大生存的时间
+ max-evictable-idle-time-millis: 900000
+ # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除
+ test-while-idle: true
+ # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个
+ test-on-borrow: true
+ # 是否在归还到池中前进行检验
+ test-on-return: false
+ # 检测连接是否有效
+ validation-query: select 1
+ # 配置监控统计
+ webStatFilter:
+ enabled: true
+ stat-view-servlet:
+ enabled: true
+ url-pattern: /druid/*
+ reset-enable: false
+ filter:
+ stat:
+ enabled: true
+ # 记录慢SQL
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
+
+# 登录相关配置
+login:
+ # 是否限制单用户登录
+ single-login: false
+ # Redis用户登录缓存配置
+ user-cache:
+ # 存活时间/秒
+ idle-time: 21600
+ # 验证码
+ login-code:
+ # 验证码类型配置 查看 LoginProperties 类
+ code-type: arithmetic
+ # 登录图形验证码有效时间/分钟
+ expiration: 2
+ # 验证码高度
+ width: 111
+ # 验证码宽度
+ height: 36
+ # 内容长度
+ length: 2
+ # 字体名称,为空则使用默认字体
+ font-name:
+ # 字体大小
+ font-size: 25
+
+#jwt
+jwt:
+ header: Authorization
+ # 令牌前缀
+ token-start-with: Bearer
+ # 必须使用最少88位的Base64对该令牌进行编码
+ base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI=
+ # 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
+ token-validity-in-seconds: 14400000
+ # 在线用户key
+ online-key: "online-token:"
+ # 验证码
+ code-key: "captcha-code:"
+ # token 续期检查时间范围(默认30分钟,单位毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期
+ detect: 1800000
+ # 续期时间范围,默认1小时,单位毫秒
+ renew: 3600000
+
+#是否允许生成代码,生产环境设置为false
+generator:
+ enabled: true
+
+#是否开启 swagger-ui
+swagger:
+ enabled: true
+
+# 文件存储路径
+file:
+ mac:
+ path: ~/file/
+ avatar: ~/avatar/
+ linux:
+ path: /home/eladmin/file/
+ avatar: /home/eladmin/avatar/
+ windows:
+ path: C:\eladmin\file\
+ avatar: C:\eladmin\avatar\
+ # 文件大小 /M
+ maxSize: 100
+ avatarMaxSize: 5
diff --git a/eladmin-base/src/main/resources/config/application-prod.yml b/eladmin-base/src/main/resources/config/application-prod.yml
new file mode 100644
index 00000000..39d6a11f
--- /dev/null
+++ b/eladmin-base/src/main/resources/config/application-prod.yml
@@ -0,0 +1,125 @@
+#配置数据源
+spring:
+ datasource:
+ druid:
+ db-type: com.alibaba.druid.pool.DruidDataSource
+ driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
+ url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:eladmin}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
+ username: ${DB_USER:root}
+ password: ${DB_PWD:123456}
+ # 初始连接数
+ initial-size: 5
+ # 最小连接数
+ min-idle: 15
+ # 最大连接数
+ max-active: 30
+ # 获取连接超时时间
+ max-wait: 5000
+ # 连接有效性检测时间
+ time-between-eviction-runs-millis: 60000
+ # 连接在池中最小生存的时间
+ min-evictable-idle-time-millis: 300000
+ # 连接在池中最大生存的时间
+ max-evictable-idle-time-millis: 900000
+ # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除
+ test-while-idle: true
+ # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个
+ test-on-borrow: true
+ # 是否在归还到池中前进行检验
+ test-on-return: false
+ # 检测连接是否有效
+ validation-query: select 1
+ # 配置监控统计
+ webStatFilter:
+ enabled: true
+ stat-view-servlet:
+ allow:
+ enabled: true
+ # 控制台管理用户名和密码
+ url-pattern: /druid/*
+ reset-enable: false
+ login-username: admin
+ login-password: 123456
+ filter:
+ stat:
+ enabled: true
+ # 记录慢SQL
+ log-slow-sql: true
+ slow-sql-millis: 1000
+ merge-sql: true
+ wall:
+ config:
+ multi-statement-allow: true
+
+# 登录相关配置
+login:
+ # 是否限制单用户登录
+ single-login: false
+ # Redis用户登录缓存配置
+ user-cache:
+ # 存活时间/秒
+ idle-time: 21600
+ # 验证码
+ login-code:
+ # 验证码类型配置 查看 LoginProperties 类
+ code-type: arithmetic
+ # 登录图形验证码有效时间/分钟
+ expiration: 2
+ # 验证码高度
+ width: 111
+ # 验证码宽度
+ height: 36
+ # 内容长度
+ length: 2
+ # 字体名称,为空则使用默认字体,如遇到线上乱码,设置其他字体即可
+ font-name:
+ # 字体大小
+ font-size: 25
+
+#jwt
+jwt:
+ header: Authorization
+ # 令牌前缀
+ token-start-with: Bearer
+ # 必须使用最少88位的Base64对该令牌进行编码
+ base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI=
+ # 令牌过期时间 此处单位/毫秒 ,默认2小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html
+ token-validity-in-seconds: 7200000
+ # 在线用户key
+ online-key: "online-token:"
+ # 验证码
+ code-key: "captcha-code:"
+ # token 续期检查时间范围(默认30分钟,单位默认毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期
+ detect: 1800000
+ # 续期时间范围,默认 1小时,这里单位毫秒
+ renew: 3600000
+
+#是否允许生成代码,生产环境设置为false
+generator:
+ enabled: false
+
+#如果生产环境要开启swagger,需要配置请求地址
+#springfox:
+# documentation:
+# swagger:
+# v2:
+# host: # 接口域名或外网ip
+
+#是否开启 swagger-ui
+swagger:
+ enabled: false
+
+# 文件存储路径
+file:
+ mac:
+ path: ~/file/
+ avatar: ~/avatar/
+ linux:
+ path: /home/eladmin/file/
+ avatar: /home/eladmin/avatar/
+ windows:
+ path: C:\eladmin\file\
+ avatar: C:\eladmin\avatar\
+ # 文件大小 /M
+ maxSize: 100
+ avatarMaxSize: 5
diff --git a/eladmin-base/src/main/resources/config/application.yml b/eladmin-base/src/main/resources/config/application.yml
new file mode 100644
index 00000000..427c4476
--- /dev/null
+++ b/eladmin-base/src/main/resources/config/application.yml
@@ -0,0 +1,62 @@
+server:
+ port: 8000
+ compression:
+ enabled: true
+ mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
+
+spring:
+ freemarker:
+ check-template-location: false
+ profiles:
+ active: dev
+ data:
+ redis:
+ repositories:
+ enabled: false
+# pid:
+# file: /自行指定位置/eladmin.pid
+
+ #配置 Jpa
+ jpa:
+ hibernate:
+ ddl-auto: none
+ open-in-view: true
+ properties:
+ hibernate:
+ dialect: org.hibernate.dialect.MySQL5InnoDBDialect
+
+ redis:
+ #数据库索引
+ database: ${REDIS_DB:0}
+ host: ${REDIS_HOST:127.0.0.1}
+ port: ${REDIS_PORT:6379}
+ password: ${REDIS_PWD:}
+ #连接超时时间
+ timeout: 5000
+ mvc:
+ pathmatch:
+ matching-strategy: ANT_PATH_MATCHER
+
+task:
+ pool:
+ # 核心线程池大小
+ core-pool-size: 10
+ # 最大线程数
+ max-pool-size: 30
+ # 活跃时间
+ keep-alive-seconds: 60
+ # 队列容量
+ queue-capacity: 50
+
+#七牛云
+qiniu:
+ # 文件大小 /M
+ max-size: 15
+
+#邮箱验证码有效时间/秒
+code:
+ expiration: 300
+
+#密码加密传输,前端公钥加密,后端私钥解密
+rsa:
+ private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
\ No newline at end of file
diff --git a/eladmin-base/src/main/resources/log4jdbc.log4j2.properties b/eladmin-base/src/main/resources/log4jdbc.log4j2.properties
new file mode 100644
index 00000000..302525ff
--- /dev/null
+++ b/eladmin-base/src/main/resources/log4jdbc.log4j2.properties
@@ -0,0 +1,4 @@
+# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger
+log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
+log4jdbc.auto.load.popular.drivers=false
+log4jdbc.drivers=com.mysql.cj.jdbc.Driver
\ No newline at end of file
diff --git a/eladmin-base/src/main/resources/logback.xml b/eladmin-base/src/main/resources/logback.xml
new file mode 100644
index 00000000..3f8f9d8f
--- /dev/null
+++ b/eladmin-base/src/main/resources/logback.xml
@@ -0,0 +1,45 @@
+
+
+ elAdmin
+
+
+
+
+
+
+ ${log.pattern}
+ ${log.charset}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/eladmin-base/src/main/resources/template/email.ftl b/eladmin-base/src/main/resources/template/email.ftl
new file mode 100644
index 00000000..606d490e
--- /dev/null
+++ b/eladmin-base/src/main/resources/template/email.ftl
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
尊敬的用户,您好:
+
您正在申请邮箱验证,您的验证码为:
+
${code}
+
+
+ Copyright ©${.now?string("yyyy")}
ELADMIN 后台管理系统 All Rights Reserved.
+
+
+
+
+
+
diff --git a/eladmin-base/src/main/resources/template/taskAlarm.ftl b/eladmin-base/src/main/resources/template/taskAlarm.ftl
new file mode 100644
index 00000000..a29b0780
--- /dev/null
+++ b/eladmin-base/src/main/resources/template/taskAlarm.ftl
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
任务信息:
+
+
+ 任务名称 |
+ Bean名称 |
+ 执行方法 |
+ 参数内容 |
+ Cron表达式 |
+ 描述内容 |
+
+
+ ${task.jobName} |
+ ${task.beanName} |
+ ${task.methodName} |
+ ${(task.params)!""} |
+ ${task.cronExpression} |
+ ${(task.description)!""} |
+
+
+
+
+
+
+ Copyright ©${.now?string("yyyy")}
ELADMIN 后台管理系统 All Rights Reserved.
+
+
+
+
+
+
diff --git a/eladmin-base/src/test/java/me/zhengjie/EladminBaseApplicationTests.java b/eladmin-base/src/test/java/me/zhengjie/EladminBaseApplicationTests.java
new file mode 100644
index 00000000..1323eed0
--- /dev/null
+++ b/eladmin-base/src/test/java/me/zhengjie/EladminBaseApplicationTests.java
@@ -0,0 +1,16 @@
+package me.zhengjie;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class EladminBaseApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+ public static void main(String[] args) {
+ }
+}
+