mirror of
https://gitee.com/beecue/fastbee.git
synced 2025-12-19 17:35:54 +08:00
Compare commits
3 Commits
tsdb
...
dev-spring
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9abbecf61c | ||
|
|
efe562f7e6 | ||
|
|
4d8e1c5167 |
144
README.md
144
README.md
@@ -1,95 +1,93 @@
|
||||
[](https://gitee.com/activity/2025opensource?ident=IKKZS9)
|
||||
|
||||
|
||||
FastBee 是一款面向中小企业与个人开发者的**轻量**、**易用**、**全栈**开源物联网平台。
|
||||
|
||||
---
|
||||

|
||||
|
||||
### 一、项目介绍
|
||||
|
||||
FastBee 集设备管理、数据监控、多端应用于一体,支持[一键容器化部署](https://fastbee.cn/doc/install/docker.html),适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业控制等多种场景。平台基于 Spring Boot 开发,<b>内置高性能 MQTT 服务端,无需额外部署 EMQX 或其他 MQTT 服务端</b>,前端采用 Vue 与 ElementUI,移动端支持微信小程序、Android、iOS 及 H5,设备端兼容 ESP32、ESP8266、树莓派、合宙等常见硬件。
|
||||
1. FastBee开源物联网平台,简单易用,更适合中小企业和个人学习使用。适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业控制等。
|
||||
|
||||
2. 系统后端采用Spring boot;前端采用Vue;Mqtt服务端使用netty搭建;移动端支持微信小程序、安卓、苹果和H5采用Uniapp;数据库采用Mysql、TDengine和Redis;设备端支持ESP32、ESP8266、树莓派、合宙等;
|
||||
|
||||
---
|
||||
|
||||
### 二、系统功能
|
||||
|
||||
| 系统功能 | 功能说明 |
|
||||
|----------------|--------------------------------------------------------------------------|
|
||||
| 产品管理 | 创建产品、定义物模型、设置设备认证方式、管理产品分类及固件版本 |
|
||||
| 设备管理 | 设备注册、分组、实时状态监测、远程控制、操作日志追溯及设备分享功能 |
|
||||
| 物模型管理 | 提供标准化的属性、功能和事件定义,实现设备与平台的数据语义统一 |
|
||||
| 规则脚本 | 对设备上报和平台下发的原始数据进行处理,转发后匹配设备交互格式 |
|
||||
| MQTT 接入 | 内置基于 Netty 开发的高性能 MQTT Broker,无需额外部署第三方服务 |
|
||||
| 视频监控接入 | 支持 GB/T 28181 国家标准协议,实现视频直播与设备管理 |
|
||||
| 权限管理 | 基于成熟的若依权限框架,实现用户、角色、部门、岗位及操作日志的精细化管控 |
|
||||
| 多数据源 | 支持 MySQL、PostgreSQL、MSSQL 等关系型数据库 |
|
||||
| 硬件 SDK | 提供 ESP-IDF、Arduino、树莓派、合宙等常见硬件平台的接入示例与 SDK |
|
||||
| 多端应用支持 | 提供 Web 控制台(Vue + ElementUI)、微信小程序、Android/iOS App 及 H5 界面 |
|
||||
| 一键部署 | 推荐使用 Docker 容器化部署,支持[快速搭建](https://fastbee.cn/doc/install/docker.html)完整环境 |
|
||||
| 系统功能 | 功能说明 |
|
||||
|:------------------------:|:-----------------------------------------------:|
|
||||
| 产品管理 | 产品详情、产品物模型、产品分类、设备授权、产品固件 |
|
||||
| 设备管理 | 设备详情、设备分组、设备日志、设备分享、设备实时控制、实时状态、数据监测 |
|
||||
| 物模型管理 | 属性(设备状态和监测数据),功能(执行特定任务),事件(设备主动上报给云端) |
|
||||
| MQTT接入 | emqx开源版、netty版本MqttBroker |
|
||||
| 硬件 SDK | ESP-IDF、Arduino、RaspberryPi、合宙等平台设备接入 |
|
||||
| 视频监控接入 | 基于GB/T28181协议支持主流厂商监控设备接入,直播 |
|
||||
| 权限管理 | 基于若依的权限管理系统,用户、部分、角色、岗位、权限、日志等 |
|
||||
|
||||
|
||||
[](https://gitee.com/beecue/fastbee-sdk/tree/master/Arduino/FastBeeEsp32)
|
||||
|
||||
---
|
||||
|
||||
### 三、快速开始
|
||||
|
||||
1. **环境准备**:确保服务器已安装 `Docker` 和 `Docker Compose`。
|
||||
2. **执行命令**:
|
||||
```bash
|
||||
sudo wget -c https://hub.fastbee.cn/resource/install.sh && bash ./install.sh
|
||||
```
|
||||
根据提示选择“开源版本”,脚本将自动完成所有服务的拉取与启动。
|
||||
3. **访问系统**:部署完成后,通过浏览器访问 `http://你的服务器IP:端口`,默认账号为 `admin`,密码为 `admin123`。
|
||||
4. **详细步骤**:请查阅 [官方安装文档](https://fastbee.cn/doc/install/docker.html)。
|
||||
|
||||
---
|
||||
|
||||
|
||||
### 四、技术栈
|
||||
##### 服务端
|
||||
- 相关技术:Spring boot、MyBatis、Spring Security、Jwt、Mysql、Redis、TDengine、Netty等
|
||||
- 开发工具:IDEA
|
||||
- 源码目录:spring-boot文件夹下
|
||||
|
||||
##### Web端
|
||||
- 相关技术:ES6、Vue、Vuex、Vue-router、Vue-cli、Axios、Element-ui、Echart等
|
||||
- 开发工具:Visual Studio Code
|
||||
- 源码目录:vue文件夹下
|
||||
|
||||
##### 移动端(微信小程序 / Android / Ios / H5)
|
||||
- 相关技术:uniapp、[uView](https://www.uviewui.com/)、[uChart](https://www.ucharts.cn/)
|
||||
- 开发工具:HBuilder
|
||||
- 源码地址:[https://gitee.com/beecue/fastbee-app](https://gitee.com/beecue/fastbee-app)
|
||||
|
||||
##### 硬件端
|
||||
- 相关技术: ESP-IDF、Arduino、FreeRTOS、Python、Lua等
|
||||
- 开发工具:Visual Studio Code 和 Arduino等
|
||||
- 源码地址:[https://gitee.com/beecue/fastbee-sdk](https://gitee.com/beecue/fastbee-sdk)
|
||||
|
||||
##### 部署与运维
|
||||
- 相关技术:docker、docker-compose、shell
|
||||
- [快速部署](https://fastbee.cn/doc/install/docker.html):安装好docker和docker-compose后执行命令 ` sudo wget -c https://hub.fastbee.cn/resource/install.sh && bash ./install.sh ` 然后选择开源版本,等待完成部署
|
||||

|
||||
|
||||
|空气检测仪| 物联网开发板 | Air724开发板 | 智能开关| [查看更多>>](https://fastbee.cn/doc/device/) |
|
||||
| :----: | :----------: |:----------: |:----------: |:----------: |
|
||||
|  |  |  | |  |
|
||||
|
||||
---
|
||||
|
||||
### 五、其他
|
||||
### 三、技术栈
|
||||
* 服务端
|
||||
- 相关技术:Spring boot、MyBatis、Spring Security、Jwt、Mysql、Redis、TDengine、EMQX、Netty等
|
||||
- 开发工具:IDEA
|
||||
* Web端
|
||||
- 相关技术:ES6、Vue、Vuex、Vue-router、Vue-cli、Axios、Element-ui、Echart等
|
||||
- 开发工具:Visual Studio Code
|
||||
* 移动端(微信小程序 / Android / Ios / H5)
|
||||
- 相关技术:uniapp、[uView](https://www.uviewui.com/)、[uChart](https://www.ucharts.cn/)
|
||||
- 开发工具:HBuilder
|
||||
* 硬件端
|
||||
- 相关技术: ESP-IDF、Arduino、FreeRTOS、Python、Lua等
|
||||
- 开发工具:Visual Studio Code 和 Arduino等
|
||||
|
||||
1. **商用授权**:开源版本采用 AGPL3 协议,可用于个人学习和使用,商业用途推荐购买[商业版本授权](https://fastbee.cn/doc/pages/sponsor/)。
|
||||
2. **在线演示**:[商业版本演示地址](https://iot.fastbee.cn/)(开源版本暂仅支持 MQTT 协议)。
|
||||
3. **系统文档**:[https://fastbee.cn/doc/](https://fastbee.cn/doc/)
|
||||
4. **QQ 交流群**:720136372、946029159、1073236354
|
||||
|
||||
---
|
||||
### 四、项目目录
|
||||
app -------------------- 移动端(微信小程序 / Android / Ios / H5) 商业版开源<br/>
|
||||
docker ---------------- docker部署文件<br />
|
||||
spring-boot ---------- 后端<br/>
|
||||
vue -------------------- 前端<br />
|
||||
|
||||
### 六、部分图片
|
||||
|
||||

|
||||

|
||||
### 五、商用授权
|
||||
项目采用AGPL3协议,可用于个人学习和使用,商业用途需要赞助项目,获得授权,并提供商业版本源码、可视化平台和移动端源码。赞助过的用户请下载商业版本源码。
|
||||
- [授权详情>>](https://fastbee.cn/doc/pages/sponsor/) [商业版本源码>>](https://fastbee.cn/doc/pages/sponsor/)
|
||||
- [移动端源码>>](https://gitee.com/beecue/fastbee-app) [可视化平台源码>>](https://fastbee.cn/doc/pages/sponsor/)
|
||||
- [硬件SDK源码>>](https://gitee.com/beecue/fastbee-sdk)
|
||||
- 二开项目同样遵守AGPL3.0协议进行开源,可以向原作者申请授权
|
||||
- 如果商业项目想转闭源,可以向原作者申请或者购买闭源授权
|
||||
|
||||
### 六、贡献代码
|
||||
- [贡献者指南>>](./doc/贡献者指南.md)
|
||||
- [Git提交规范>>](./doc/Git提交规范.md)
|
||||
- [功能规划>>](./RoadMap.md)
|
||||
|
||||
### 七、其他
|
||||
1. QQ交流群:🚀946029159(已满) 🚀1073236354 🚀720136372
|
||||
|
||||
2. 权限管理基于ruoyi-vue系统开发,Mqtt消息服务器使用EMQX5.0开源版
|
||||
|
||||
* [开源版本在线演示](http://101.33.237.12/)
|
||||
* [商业版本在线演示](https://iot.fastbee.cn/)
|
||||
* [项目使用文档](https://fastbee.cn/doc/)
|
||||
* [若依权限管理系统文档](http://doc.ruoyi.vip/ruoyi-vue/)
|
||||
* [EMQX5.0消息服务器文档](https://www.emqx.io/docs/zh/v5.0/)
|
||||
* [uCharts高性能跨平台图表库](https://www.ucharts.cn)
|
||||
|
||||
3. 项目贡献者(如有遗漏请联系作者):
|
||||
- [小驿物联](https://gitee.com/iot-xiaoyi)、[CrazyDull](https://gitee.com/crazyDull)、[YBZX](https://github.com/YBZX)、 [CQAdu](https://gitee.com/iot.adu)、[孙阿龙](https://gitee.com/sunalong)、[xxmfl](https://gitee.com/xxmfl)、[董晓龙-3715687@qq.com](https://fastbee.cn/)
|
||||
- [SXH](https://gitee.com/sixiaohu)、 [Redamancy_zxp](https://gitee.com/redamancy-zxp)、 [LEE](https://gitee.com/yueming188)、 [LemonTree](https://gitee.com/fishhunterplus)、 [Tang](https://gitee.com/mexiaotang)、 [Tang](https://gitee.com/mexiaotang)、[KUN](https://gitee.com/L_KUN_KUN)
|
||||
|
||||
4. 主要参与用户:
|
||||
- [Guanshubiao](https://gitee.com/guanshubiao):熟悉物联网开发,完善和优化系统的网关架构和部分功能等
|
||||
- [帐篷](https://gitee.com/zhuangpengli):熟悉物联网开发,完善视频监控模块和部分协议等
|
||||
- [JaminDeng](https://gitee.com/jamin-deng):熟悉物联网开发,完善平台前端设计可视化等
|
||||
|
||||
### 八、部分图片
|
||||
|
||||

|
||||

|
||||
|
||||
<table>
|
||||
<tr>
|
||||
@@ -114,6 +112,4 @@ FastBee 集设备管理、数据监控、多端应用于一体,支持[一键
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
---
|
||||
|
||||
FastBee 项目代码完全开源,覆盖设备 SDK、后端服务、前端应用和移动端,兼顾成熟度、性能与开发效率,适合中小企业快速构建物联网业务,也便于开发者进行二次开发与学习研究。
|
||||
@@ -1,70 +0,0 @@
|
||||
version: '2'
|
||||
|
||||
networks:
|
||||
network:
|
||||
driver: bridge
|
||||
ipam:
|
||||
driver: default
|
||||
config:
|
||||
- subnet: 177.7.0.0/16
|
||||
|
||||
services:
|
||||
tdengine:
|
||||
image: 'tdengine/tdengine:3.3.5.8'
|
||||
container_name: tdengine
|
||||
privileged: true
|
||||
hostname: fastbee
|
||||
ports:
|
||||
- 6030:6030
|
||||
- 6041:6041
|
||||
- 6043-6049:6043-6049
|
||||
- 6043-6049:6043-6049/udp
|
||||
volumes:
|
||||
- /var/data/tdengine/log:/var/log/taos
|
||||
- /var/data/tdengine/data:/var/lib/taos
|
||||
- /var/data/tdengine/conf:/etc/taos
|
||||
- /etc/localtime:/etc/localtime
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
networks:
|
||||
network:
|
||||
ipv4_address: 177.7.0.30
|
||||
|
||||
influxdb:
|
||||
image: influxdb:2.7.5
|
||||
container_name: influxdb
|
||||
ports:
|
||||
- 8086:8086
|
||||
volumes:
|
||||
- ./influxdb2:/var/lib/influxdb2
|
||||
environment:
|
||||
DOCKER_INFLUXDB_INIT_MODE: "setup"
|
||||
DOCKER_INFLUXDB_INIT_USERNAME: "admin"
|
||||
DOCKER_INFLUXDB_INIT_PASSWORD: "admin123"
|
||||
DOCKER_INFLUXDB_INIT_ORG: "fastbee"
|
||||
DOCKER_INFLUXDB_INIT_BUCKET: "device_log"
|
||||
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: "inX0k-IPfSgKg6AIfoZm6Mv0DQyQOKCkfvs5ZF3a836Yzx2Ew9QgxsHev40_2gztuMn6tofwyS6nfbT4cD-SeA=="
|
||||
networks:
|
||||
network:
|
||||
ipv4_address: 177.7.0.31
|
||||
|
||||
iotdb:
|
||||
image: apache/iotdb:1.3.3-standalone
|
||||
hostname: iotdb
|
||||
container_name: iotdb
|
||||
restart: always
|
||||
ports:
|
||||
- 6667:6667
|
||||
- 5555:5555
|
||||
- 8070:8070
|
||||
- 9003:9003
|
||||
privileged: true
|
||||
volumes:
|
||||
- /var/data/iotdb/data:/iotdb/data
|
||||
- /var/data/iotdb/logs:/iotdb/logs
|
||||
- /var/data/iotdb/conf:/iotdb/conf
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
networks:
|
||||
network:
|
||||
ipv4_address: 177.7.0.32
|
||||
@@ -63,7 +63,6 @@ services:
|
||||
- redis
|
||||
- mysql
|
||||
- zlmedia
|
||||
- tdengine
|
||||
volumes:
|
||||
- /var/data/java/fastbee-admin.jar:/server.jar
|
||||
- /var/data/java/uploadPath:/uploadPath
|
||||
@@ -118,25 +117,5 @@ services:
|
||||
network:
|
||||
ipv4_address: 177.7.0.15
|
||||
|
||||
# tdengine:
|
||||
# image: 'tdengine/tdengine:3.3.5.8'
|
||||
# container_name: tdengine
|
||||
# privileged: true
|
||||
# hostname: fastbee
|
||||
# ports:
|
||||
# - 6030:6030
|
||||
# - 6041:6041
|
||||
# - 6043-6049:6043-6049
|
||||
# - 6043-6049:6043-6049/udp
|
||||
# volumes:
|
||||
# - /var/data/tdengine/log:/var/log/taos
|
||||
# - /var/data/tdengine/data:/var/lib/taos
|
||||
# - /var/data/tdengine/conf:/etc/taos
|
||||
# - /etc/localtime:/etc/localtime
|
||||
# environment:
|
||||
# TZ: Asia/Shanghai
|
||||
# networks:
|
||||
# network:
|
||||
# ipv4_address: 177.7.0.16
|
||||
|
||||
|
||||
|
||||
@@ -1,156 +0,0 @@
|
||||
@REM
|
||||
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||
@REM or more contributor license agreements. See the NOTICE file
|
||||
@REM distributed with this work for additional information
|
||||
@REM regarding copyright ownership. The ASF licenses this file
|
||||
@REM to you under the Apache License, Version 2.0 (the
|
||||
@REM "License"); you may not use this file except in compliance
|
||||
@REM with the License. You may obtain a copy of the License at
|
||||
@REM
|
||||
@REM http://www.apache.org/licenses/LICENSE-2.0
|
||||
@REM
|
||||
@REM Unless required by applicable law or agreed to in writing,
|
||||
@REM software distributed under the License is distributed on an
|
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
@REM KIND, either express or implied. See the License for the
|
||||
@REM specific language governing permissions and limitations
|
||||
@REM under the License.
|
||||
@REM
|
||||
|
||||
@echo off
|
||||
|
||||
@REM You can set datanode memory size, example '2G' or '2048M'
|
||||
set MEMORY_SIZE=
|
||||
|
||||
@REM true or false
|
||||
@REM DO NOT FORGET TO MODIFY THE PASSWORD FOR SECURITY (%CONFIGNODE_CONF%\jmx.password and %{CONFIGNODE_CONF%\jmx.access)
|
||||
set JMX_LOCAL="true"
|
||||
set JMX_PORT="32000"
|
||||
@REM only take effect when the jmx_local=false
|
||||
@REM You need to change this IP as a public IP if you want to remotely connect IoTDB ConfigNode by JMX.
|
||||
@REM 0.0.0.0 is not allowed
|
||||
set JMX_IP="127.0.0.1"
|
||||
|
||||
if %JMX_LOCAL% == "false" (
|
||||
echo "setting remote JMX..."
|
||||
@REM you may have no permission to run chmod. If so, contact your system administrator.
|
||||
set CONFIGNODE_JMX_OPTS=-Dcom.sun.management.jmxremote^
|
||||
-Dcom.sun.management.jmxremote.port=%JMX_PORT%^
|
||||
-Dcom.sun.management.jmxremote.rmi.port=%JMX_PORT%^
|
||||
-Djava.rmi.server.randomIDs=true^
|
||||
-Dcom.sun.management.jmxremote.ssl=false^
|
||||
-Dcom.sun.management.jmxremote.authenticate=false^
|
||||
-Dcom.sun.management.jmxremote.password.file="%CONFIGNODE_CONF%\jmx.password"^
|
||||
-Dcom.sun.management.jmxremote.access.file="%CONFIGNODE_CONF%\jmx.access"^
|
||||
-Djava.rmi.server.hostname=%JMX_IP%
|
||||
) else (
|
||||
echo "setting local JMX..."
|
||||
)
|
||||
|
||||
set CONFIGNODE_JMX_OPTS=%CONFIGNODE_JMX_OPTS% -Diotdb.jmx.local=%JMX_LOCAL%
|
||||
|
||||
for /f %%b in ('wmic cpu get numberofcores ^| findstr "[0-9]"') do (
|
||||
set system_cpu_cores=%%b
|
||||
)
|
||||
|
||||
if %system_cpu_cores% LSS 1 set system_cpu_cores=1
|
||||
|
||||
for /f %%b in ('wmic ComputerSystem get TotalPhysicalMemory ^| findstr "[0-9]"') do (
|
||||
set system_memory=%%b
|
||||
)
|
||||
|
||||
echo wsh.echo FormatNumber(cdbl(%system_memory%)/(1024*1024), 0) > "%CONFIGNODE_HOME%\sbin\tmp.vbs"
|
||||
for /f "tokens=*" %%a in ('cscript //nologo "%CONFIGNODE_HOME%\sbin\tmp.vbs"') do set system_memory_in_mb=%%a
|
||||
del "%CONFIGNODE_HOME%\sbin\tmp.vbs"
|
||||
set system_memory_in_mb=%system_memory_in_mb:,=%
|
||||
|
||||
@REM suggest using memory, system memory 3 / 10
|
||||
set /a suggest_=%system_memory_in_mb%/10*3
|
||||
|
||||
if "%MEMORY_SIZE%"=="" (
|
||||
set /a memory_size_in_mb=%suggest_%
|
||||
) else (
|
||||
if "%MEMORY_SIZE:~-1%"=="M" (
|
||||
set /a memory_size_in_mb=%MEMORY_SIZE:~0,-1%
|
||||
) else if "%MEMORY_SIZE:~-1%"=="G" (
|
||||
set /a memory_size_in_mb=%MEMORY_SIZE:~0,-1%*1024
|
||||
) else (
|
||||
echo "Invalid format of MEMORY_SIZE, please use the format like 2048M or 2G."
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
|
||||
@REM set on heap memory size
|
||||
@REM when memory_size_in_mb is less than 4 * 1024, we will set on heap memory size to memory_size_in_mb / 4 * 3
|
||||
@REM when memory_size_in_mb is greater than 4 * 1024 and less than 16 * 1024, we will set on heap memory size to memory_size_in_mb / 5 * 4
|
||||
@REM when memory_size_in_mb is greater than 16 * 1024 and less than 128 * 1024, we will set on heap memory size to memory_size_in_mb / 8 * 7
|
||||
@REM when memory_size_in_mb is greater than 128 * 1024, we will set on heap memory size to memory_size_in_mb - 16 * 1024
|
||||
if %memory_size_in_mb% LSS 4096 (
|
||||
set /a on_heap_memory_size_in_mb=%memory_size_in_mb%/4*3
|
||||
) else if %memory_size_in_mb% LSS 16384 (
|
||||
set /a on_heap_memory_size_in_mb=%memory_size_in_mb%/5*4
|
||||
) else if %memory_size_in_mb% LSS 131072 (
|
||||
set /a on_heap_memory_size_in_mb=%memory_size_in_mb%/8*7
|
||||
) else (
|
||||
set /a on_heap_memory_size_in_mb=%memory_size_in_mb%-16384
|
||||
)
|
||||
set /a off_heap_memory_size_in_mb=%memory_size_in_mb%-%on_heap_memory_size_in_mb%
|
||||
|
||||
set ON_HEAP_MEMORY=%on_heap_memory_size_in_mb%M
|
||||
set OFF_HEAP_MEMORY=%off_heap_memory_size_in_mb%M
|
||||
|
||||
set IOTDB_ALLOW_HEAP_DUMP="true"
|
||||
|
||||
@REM on heap memory size
|
||||
@REM set ON_HEAP_MEMORY=2G
|
||||
@REM off heap memory size
|
||||
@REM set OFF_HEAP_MEMORY=512M
|
||||
|
||||
if "%OFF_HEAP_MEMORY:~-1%"=="M" (
|
||||
set /a off_heap_memory_size_in_mb=%OFF_HEAP_MEMORY:~0,-1%
|
||||
) else if "%OFF_HEAP_MEMORY:~-1%"=="G" (
|
||||
set /a off_heap_memory_size_in_mb=%OFF_HEAP_MEMORY:~0,-1%*1024
|
||||
)
|
||||
|
||||
@REM threads number of io
|
||||
set IO_THREADS_NUMBER=100
|
||||
@REM Max cached buffer size, Note: unit can only be B!
|
||||
@REM which equals OFF_HEAP_MEMORY / IO_THREADS_NUMBER
|
||||
set /a MAX_CACHED_BUFFER_SIZE=%off_heap_memory_size_in_mb%/%IO_THREADS_NUMBER%*1024*1024
|
||||
|
||||
set CONFIGNODE_HEAP_OPTS=-Xmx%ON_HEAP_MEMORY% -Xms%ON_HEAP_MEMORY%
|
||||
set CONFIGNODE_HEAP_OPTS=%CONFIGNODE_HEAP_OPTS% -XX:MaxDirectMemorySize=%OFF_HEAP_MEMORY%
|
||||
set CONFIGNODE_HEAP_OPTS=%CONFIGNODE_HEAP_OPTS% -Djdk.nio.maxCachedBufferSize=%MAX_CACHED_BUFFER_SIZE%
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:+CrashOnOutOfMemoryError
|
||||
|
||||
@REM if you want to dump the heap memory while OOM happening, you can use the following command, remember to replace /tmp/heapdump.hprof with your own file path and the folder where this file is located needs to be created in advance
|
||||
@REM IOTDB_JMX_OPTS=%IOTDB_HEAP_OPTS% -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\tmp\confignode_heapdump.hprof
|
||||
|
||||
@REM You can put your env variable here
|
||||
@REM set JAVA_HOME=%JAVA_HOME%
|
||||
|
||||
@REM set gc log.
|
||||
IF "%1" equ "printgc" (
|
||||
IF "%JAVA_VERSION%" == "8" (
|
||||
md "%CONFIGNODE_HOME%\logs"
|
||||
set CONFIGNODE_HEAP_OPTS=%CONFIGNODE_HEAP_OPTS% -Xloggc:"%CONFIGNODE_HOME%\logs\gc.log" -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M
|
||||
) ELSE (
|
||||
md "%CONFIGNODE_HOME%\logs"
|
||||
set CONFIGNODE_HEAP_OPTS=%CONFIGNODE_HEAP_OPTS% -Xlog:gc=info,heap*=trace,age*=debug,safepoint=info,promotion*=trace:file="%CONFIGNODE_HOME%\logs\gc.log":time,uptime,pid,tid,level:filecount=10,filesize=10485760
|
||||
)
|
||||
)
|
||||
|
||||
@REM Add args for Java 11 and above, due to [JEP 396: Strongly Encapsulate JDK Internals by Default] (https://openjdk.java.net/jeps/396)
|
||||
IF "%JAVA_VERSION%" == "8" (
|
||||
set ILLEGAL_ACCESS_PARAMS=
|
||||
) ELSE (
|
||||
set ILLEGAL_ACCESS_PARAMS=--add-opens=java.base/java.util.concurrent=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.lang=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.util=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.nio=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.io=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.net=ALL-UNNAMED
|
||||
)
|
||||
|
||||
echo ConfigNode on heap memory size = %ON_HEAP_MEMORY%B, off heap memory size = %OFF_HEAP_MEMORY%B
|
||||
echo If you want to change this configuration, please check conf/confignode-env.bat.
|
||||
@@ -1,314 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
# You can set ConfigNode memory size, example '2G' or '2048M'
|
||||
MEMORY_SIZE=
|
||||
|
||||
# You can put your env variable here
|
||||
# export JAVA_HOME=$JAVA_HOME
|
||||
|
||||
# Set max number of open files
|
||||
max_num=$(ulimit -n)
|
||||
if [ $max_num -le 65535 ]; then
|
||||
ulimit -n 65535
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Warning: Failed to set max number of files to be 65535, maybe you need to use 'sudo ulimit -n 65535' to set it when you use iotdb ConfigNode in production environments."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set somaxconn to a better value to avoid meaningless connection reset issues when the system is under high load.
|
||||
# The original somaxconn will be set back when the system reboots.
|
||||
# For more detail, see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19f92a030ca6d772ab44b22ee6a01378a8cb32d4
|
||||
SOMAXCONN=65535
|
||||
case "$(uname)" in
|
||||
Linux)
|
||||
somaxconn=$(sysctl -n net.core.somaxconn)
|
||||
if [ "$somaxconn" -lt $SOMAXCONN ]; then
|
||||
echo "WARN:"
|
||||
echo "WARN: the value of net.core.somaxconn (=$somaxconn) is too small, please set it to a larger value using the following command."
|
||||
echo "WARN: sudo sysctl -w net.core.somaxconn=$SOMAXCONN"
|
||||
echo "WARN: The original net.core.somaxconn value will be set back when the os reboots."
|
||||
echo "WARN:"
|
||||
fi
|
||||
;;
|
||||
FreeBSD | Darwin)
|
||||
somaxconn=$(sysctl -n kern.ipc.somaxconn)
|
||||
if [ "$somaxconn" -lt $SOMAXCONN ]; then
|
||||
echo "WARN:"
|
||||
echo "WARN: the value of kern.ipc.somaxconn (=$somaxconn) is too small, please set it to a larger value using the following command."
|
||||
echo "WARN: sudo sysctl -w kern.ipc.somaxconn=$SOMAXCONN"
|
||||
echo "WARN: The original kern.ipc.somaxconn value will be set back when the os reboots."
|
||||
echo "WARN:"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# whether we allow enable heap dump files
|
||||
IOTDB_ALLOW_HEAP_DUMP="true"
|
||||
|
||||
calculate_memory_sizes()
|
||||
{
|
||||
case "`uname`" in
|
||||
Linux)
|
||||
system_memory_in_mb=`free -m| sed -n '2p' | awk '{print $2}'`
|
||||
system_cpu_cores=`egrep -c 'processor([[:space:]]+):.*' /proc/cpuinfo`
|
||||
;;
|
||||
FreeBSD)
|
||||
system_memory_in_bytes=`sysctl hw.physmem | awk '{print $2}'`
|
||||
system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
|
||||
system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
|
||||
;;
|
||||
SunOS)
|
||||
system_memory_in_mb=`prtconf | awk '/Memory size:/ {print $3}'`
|
||||
system_cpu_cores=`psrinfo | wc -l`
|
||||
;;
|
||||
Darwin)
|
||||
system_memory_in_bytes=`sysctl hw.memsize | awk '{print $2}'`
|
||||
system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
|
||||
system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
|
||||
;;
|
||||
*)
|
||||
# assume reasonable defaults for e.g. a modern desktop or
|
||||
# cheap server
|
||||
system_memory_in_mb="2048"
|
||||
system_cpu_cores="2"
|
||||
;;
|
||||
esac
|
||||
|
||||
# some systems like the raspberry pi don't report cores, use at least 1
|
||||
if [ "$system_cpu_cores" -lt "1" ]
|
||||
then
|
||||
system_cpu_cores="1"
|
||||
fi
|
||||
|
||||
# suggest using memory, system memory 3 / 10
|
||||
suggest_using_memory_in_mb=`expr $system_memory_in_mb / 10 \* 3`
|
||||
|
||||
if [ -n "$MEMORY_SIZE" ]
|
||||
then
|
||||
if [ "${MEMORY_SIZE%"G"}" != "$MEMORY_SIZE" ] || [ "${MEMORY_SIZE%"M"}" != "$MEMORY_SIZE" ]
|
||||
then
|
||||
if [ "${MEMORY_SIZE%"G"}" != "$MEMORY_SIZE" ]
|
||||
then
|
||||
memory_size_in_mb=`expr ${MEMORY_SIZE%"G"} "*" 1024`
|
||||
else
|
||||
memory_size_in_mb=`expr ${MEMORY_SIZE%"M"}`
|
||||
fi
|
||||
else
|
||||
echo "Invalid format of MEMORY_SIZE, please use the format like 2048M or 2G"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# set memory size to suggest using memory, if suggest using memory is greater than 8GB, set memory size to 8GB
|
||||
if [ "$suggest_using_memory_in_mb" -gt "8192" ]
|
||||
then
|
||||
memory_size_in_mb="8192"
|
||||
else
|
||||
memory_size_in_mb=$suggest_using_memory_in_mb
|
||||
fi
|
||||
fi
|
||||
|
||||
# set on heap memory size
|
||||
# when memory_size_in_mb is less than 4 * 1024, we will set on heap memory size to memory_size_in_mb / 4 * 3
|
||||
# when memory_size_in_mb is greater than 4 * 1024 and less than 16 * 1024, we will set on heap memory size to memory_size_in_mb / 5 * 4
|
||||
# when memory_size_in_mb is greater than 16 * 1024 and less than 128 * 1024, we will set on heap memory size to memory_size_in_mb / 8 * 7
|
||||
# when memory_size_in_mb is greater than 128 * 1024, we will set on heap memory size to memory_size_in_mb - 16 * 1024
|
||||
if [ "$memory_size_in_mb" -lt "4096" ]
|
||||
then
|
||||
on_heap_memory_size_in_mb=`expr $memory_size_in_mb / 4 \* 3`
|
||||
elif [ "$memory_size_in_mb" -lt "16384" ]
|
||||
then
|
||||
on_heap_memory_size_in_mb=`expr $memory_size_in_mb / 5 \* 4`
|
||||
elif [ "$memory_size_in_mb" -lt "131072" ]
|
||||
then
|
||||
on_heap_memory_size_in_mb=`expr $memory_size_in_mb / 8 \* 7`
|
||||
else
|
||||
on_heap_memory_size_in_mb=`expr $memory_size_in_mb - 16384`
|
||||
fi
|
||||
off_heap_memory_size_in_mb=`expr $memory_size_in_mb - $on_heap_memory_size_in_mb`
|
||||
|
||||
ON_HEAP_MEMORY="${on_heap_memory_size_in_mb}M"
|
||||
OFF_HEAP_MEMORY="${off_heap_memory_size_in_mb}M"
|
||||
}
|
||||
|
||||
CONFIGNODE_CONF_DIR="`dirname "$0"`"
|
||||
get_cn_system_dir() {
|
||||
local config_file="$1"
|
||||
local cn_system_dir=""
|
||||
|
||||
cn_system_dir=`sed '/^cn_system_dir=/!d;s/.*=//' ${CONFIGNODE_CONF_DIR}/${config_file} | tail -n 1`
|
||||
|
||||
if [ -z "$cn_system_dir" ]; then
|
||||
echo ""
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "$cn_system_dir" == /* ]]; then
|
||||
echo "$cn_system_dir"
|
||||
else
|
||||
echo "$CONFIGNODE_CONF_DIR/../$cn_system_dir"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -f "${CONFIGNODE_CONF_DIR}/iotdb-system.properties" ]; then
|
||||
heap_dump_dir=$(get_cn_system_dir "iotdb-system.properties")
|
||||
else
|
||||
heap_dump_dir=$(get_cn_system_dir "iotdb-confignode.properties")
|
||||
fi
|
||||
|
||||
if [ -z "$heap_dump_dir" ]; then
|
||||
heap_dump_dir="$(dirname "$0")/../data/confignode/system"
|
||||
fi
|
||||
|
||||
if [ ! -d "$heap_dump_dir" ]; then
|
||||
mkdir -p "$heap_dump_dir"
|
||||
fi
|
||||
|
||||
# find java in JAVA_HOME
|
||||
if [ -n "$JAVA_HOME" ]; then
|
||||
for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
|
||||
if [ -x "$java" ]; then
|
||||
JAVA="$java"
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
JAVA=java
|
||||
fi
|
||||
|
||||
if [ -z $JAVA ] ; then
|
||||
echo Unable to find java executable. Check JAVA_HOME and PATH environment variables. > /dev/stderr
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
# Determine the sort of JVM we'll be running on.
|
||||
java_ver_output=`"$JAVA" -version 2>&1`
|
||||
jvmver=`echo "$java_ver_output" | grep '[openjdk|java] version' | awk -F'"' 'NR==1 {print $2}' | cut -d\- -f1`
|
||||
JVM_VERSION=${jvmver%_*}
|
||||
JVM_PATCH_VERSION=${jvmver#*_}
|
||||
if [ "$JVM_VERSION" \< "1.8" ] ; then
|
||||
echo "IoTDB requires Java 8u92 or later."
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
if [ "$JVM_VERSION" \< "1.8" ] && [ "$JVM_PATCH_VERSION" -lt 92 ] ; then
|
||||
echo "IoTDB requires Java 8u92 or later."
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
version_arr=(${JVM_VERSION//./ })
|
||||
|
||||
illegal_access_params=""
|
||||
#GC log path has to be defined here because it needs to access CONFIGNODE_HOME
|
||||
if [ "${version_arr[0]}" = "1" ] ; then
|
||||
# Java 8
|
||||
MAJOR_VERSION=${version_arr[1]}
|
||||
echo "$CONFIGNODE_JMX_OPTS" | grep -q "^-[X]loggc"
|
||||
if [ "$?" = "1" ] ; then # [X] to prevent ccm from replacing this line
|
||||
# only add -Xlog:gc if it's not mentioned in jvm-server.options file
|
||||
mkdir -p ${CONFIGNODE_HOME}/logs
|
||||
if [ "$#" -ge "1" -a "$1" == "printgc" ]; then
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Xloggc:${CONFIGNODE_HOME}/logs/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
#JDK 11 and others
|
||||
MAJOR_VERSION=${version_arr[0]}
|
||||
# See description of https://bugs.openjdk.java.net/browse/JDK-8046148 for details about the syntax
|
||||
# The following is the equivalent to -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M
|
||||
echo "$CONFIGNODE_JMX_OPTS" | grep -q "^-[X]log:gc"
|
||||
if [ "$?" = "1" ] ; then # [X] to prevent ccm from replacing this line
|
||||
# only add -Xlog:gc if it's not mentioned in jvm-server.options file
|
||||
mkdir -p ${CONFIGNODE_HOME}/logs
|
||||
if [ "$#" -ge "1" -a "$1" == "printgc" ]; then
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Xlog:gc=info,heap*=info,age*=info,safepoint=info,promotion*=info:file=${CONFIGNODE_HOME}/logs/gc.log:time,uptime,pid,tid,level:filecount=10,filesize=10485760"
|
||||
fi
|
||||
fi
|
||||
# Add argLine for Java 11 and above, due to [JEP 396: Strongly Encapsulate JDK Internals by Default] (https://openjdk.java.net/jeps/396)
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.util.concurrent=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.lang=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.util=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.nio=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.io=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.net=ALL-UNNAMED"
|
||||
fi
|
||||
|
||||
|
||||
calculate_memory_sizes
|
||||
|
||||
# on heap memory size
|
||||
#ON_HEAP_MEMORY="2G"
|
||||
# off heap memory size
|
||||
#OFF_HEAP_MEMORY="512M"
|
||||
|
||||
if [ "${OFF_HEAP_MEMORY%"G"}" != "$OFF_HEAP_MEMORY" ]
|
||||
then
|
||||
off_heap_memory_size_in_mb=`expr ${OFF_HEAP_MEMORY%"G"} "*" 1024`
|
||||
else
|
||||
off_heap_memory_size_in_mb=`expr ${OFF_HEAP_MEMORY%"M"}`
|
||||
fi
|
||||
|
||||
# threads number of io
|
||||
IO_THREADS_NUMBER="100"
|
||||
# Max cached buffer size, Note: unit can only be B!
|
||||
# which equals OFF_HEAP_MEMORY / IO_THREADS_NUMBER
|
||||
MAX_CACHED_BUFFER_SIZE=`expr $off_heap_memory_size_in_mb \* 1024 \* 1024 / $IO_THREADS_NUMBER`
|
||||
|
||||
#true or false
|
||||
#DO NOT FORGET TO MODIFY THE PASSWORD FOR SECURITY (${CONFIGNODE_CONF}/jmx.password and ${CONFIGNODE_CONF}/jmx.access)
|
||||
#If you want to connect JMX Service by network in local machine, such as nodeTool.sh will try to connect 127.0.0.1:31999, please set JMX_LOCAL to false.
|
||||
JMX_LOCAL="true"
|
||||
|
||||
JMX_PORT="32000"
|
||||
#only take effect when the jmx_local=false
|
||||
#You need to change this IP as a public IP if you want to remotely connect IoTDB ConfigNode by JMX.
|
||||
# 0.0.0.0 is not allowed
|
||||
JMX_IP="127.0.0.1"
|
||||
|
||||
if [ ${JMX_LOCAL} = "false" ]; then
|
||||
echo "setting remote JMX..."
|
||||
#you may have no permission to run chmod. If so, contact your system administrator.
|
||||
chmod 600 ${CONFIGNODE_CONF}/jmx.password
|
||||
chmod 600 ${CONFIGNODE_CONF}/jmx.access
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Dcom.sun.management.jmxremote"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Djava.rmi.server.randomIDs=true"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Dcom.sun.management.jmxremote.ssl=false"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Dcom.sun.management.jmxremote.password.file=${CONFIGNODE_CONF}/jmx.password"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Dcom.sun.management.jmxremote.access.file=${CONFIGNODE_CONF}/jmx.access"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Djava.rmi.server.hostname=$JMX_IP"
|
||||
else
|
||||
echo "setting local JMX..."
|
||||
fi
|
||||
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Diotdb.jmx.local=$JMX_LOCAL"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Xms${ON_HEAP_MEMORY}"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Xmx${ON_HEAP_MEMORY}"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -XX:MaxDirectMemorySize=${OFF_HEAP_MEMORY}"
|
||||
CONFIGNODE_JMX_OPTS="$CONFIGNODE_JMX_OPTS -Djdk.nio.maxCachedBufferSize=${MAX_CACHED_BUFFER_SIZE}"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+CrashOnOutOfMemoryError"
|
||||
# if you want to dump the heap memory while OOM happening, you can use the following command, remember to replace /tmp/heapdump.hprof with your own file path and the folder where this file is located needs to be created in advance
|
||||
#IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${heap_dump_dir}/confignode_heapdump.hprof"
|
||||
|
||||
echo "ConfigNode on heap memory size = ${ON_HEAP_MEMORY}B, off heap memory size = ${OFF_HEAP_MEMORY}B"
|
||||
echo "If you want to change this configuration, please check conf/confignode-env.sh."
|
||||
|
||||
@@ -1,187 +0,0 @@
|
||||
@REM
|
||||
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||
@REM or more contributor license agreements. See the NOTICE file
|
||||
@REM distributed with this work for additional information
|
||||
@REM regarding copyright ownership. The ASF licenses this file
|
||||
@REM to you under the Apache License, Version 2.0 (the
|
||||
@REM "License"); you may not use this file except in compliance
|
||||
@REM with the License. You may obtain a copy of the License at
|
||||
@REM
|
||||
@REM http://www.apache.org/licenses/LICENSE-2.0
|
||||
@REM
|
||||
@REM Unless required by applicable law or agreed to in writing,
|
||||
@REM software distributed under the License is distributed on an
|
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
@REM KIND, either express or implied. See the License for the
|
||||
@REM specific language governing permissions and limitations
|
||||
@REM under the License.
|
||||
@REM
|
||||
|
||||
@echo off
|
||||
|
||||
@REM You can set datanode memory size, example '2G' or '2048M'
|
||||
set MEMORY_SIZE=
|
||||
|
||||
@REM true or false
|
||||
@REM DO NOT FORGET TO MODIFY THE PASSWORD FOR SECURITY (%IOTDB_CONF%\jmx.password and %{IOTDB_CONF%\jmx.access)
|
||||
set JMX_LOCAL="true"
|
||||
set JMX_PORT="31999"
|
||||
@REM only take effect when the jmx_local=false
|
||||
@REM You need to change this IP as a public IP if you want to remotely connect IoTDB by JMX.
|
||||
@REM 0.0.0.0 is not allowed
|
||||
set JMX_IP="127.0.0.1"
|
||||
|
||||
if %JMX_LOCAL% == "false" (
|
||||
echo "setting remote JMX..."
|
||||
@REM you may have no permission to run chmod. If so, contact your system administrator.
|
||||
set IOTDB_JMX_OPTS=-Dcom.sun.management.jmxremote^
|
||||
-Dcom.sun.management.jmxremote.port=%JMX_PORT%^
|
||||
-Dcom.sun.management.jmxremote.rmi.port=%JMX_PORT%^
|
||||
-Djava.rmi.server.randomIDs=true^
|
||||
-Dcom.sun.management.jmxremote.ssl=false^
|
||||
-Dcom.sun.management.jmxremote.authenticate=false^
|
||||
-Dcom.sun.management.jmxremote.password.file="%IOTDB_CONF%\jmx.password"^
|
||||
-Dcom.sun.management.jmxremote.access.file="%IOTDB_CONF%\jmx.acces"s^
|
||||
-Djava.rmi.server.hostname=%JMX_IP%
|
||||
) else (
|
||||
echo "setting local JMX..."
|
||||
)
|
||||
|
||||
set IOTDB_JMX_OPTS=%IOTDB_JMX_OPTS% -Diotdb.jmx.local=%JMX_LOCAL%
|
||||
|
||||
for /f %%b in ('wmic cpu get numberofcores ^| findstr "[0-9]"') do (
|
||||
set system_cpu_cores=%%b
|
||||
)
|
||||
|
||||
if %system_cpu_cores% LSS 1 set system_cpu_cores=1
|
||||
|
||||
for /f %%b in ('wmic ComputerSystem get TotalPhysicalMemory ^| findstr "[0-9]"') do (
|
||||
set system_memory=%%b
|
||||
)
|
||||
|
||||
echo wsh.echo FormatNumber(cdbl(%system_memory%)/(1024*1024), 0) > "%IOTDB_HOME%\sbin\tmp.vbs"
|
||||
for /f "tokens=*" %%a in ('cscript //nologo "%IOTDB_HOME%\sbin\tmp.vbs"') do set system_memory_in_mb=%%a
|
||||
del "%IOTDB_HOME%\sbin\tmp.vbs"
|
||||
set system_memory_in_mb=%system_memory_in_mb:,=%
|
||||
|
||||
set /a suggest_=%system_memory_in_mb%/2
|
||||
|
||||
if "%MEMORY_SIZE%"=="" (
|
||||
set /a memory_size_in_mb=%suggest_%
|
||||
) else (
|
||||
if "%MEMORY_SIZE:~-1%"=="M" (
|
||||
set /a memory_size_in_mb=%MEMORY_SIZE:~0,-1%
|
||||
) else if "%MEMORY_SIZE:~-1%"=="G" (
|
||||
set /a memory_size_in_mb=%MEMORY_SIZE:~0,-1%*1024
|
||||
) else (
|
||||
echo "Invalid format of MEMORY_SIZE, please use the format like 2048M or 2G."
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
|
||||
@REM set on heap memory size
|
||||
@REM when memory_size_in_mb is less than 4 * 1024, we will set on heap memory size to memory_size_in_mb / 4 * 3
|
||||
@REM when memory_size_in_mb is greater than 4 * 1024 and less than 16 * 1024, we will set on heap memory size to memory_size_in_mb / 5 * 4
|
||||
@REM when memory_size_in_mb is greater than 16 * 1024 and less than 128 * 1024, we will set on heap memory size to memory_size_in_mb / 8 * 7
|
||||
@REM when memory_size_in_mb is greater than 128 * 1024, we will set on heap memory size to memory_size_in_mb - 16 * 1024
|
||||
if %memory_size_in_mb% LSS 4096 (
|
||||
set /a on_heap_memory_size_in_mb=%memory_size_in_mb%/4*3
|
||||
) else if %memory_size_in_mb% LSS 16384 (
|
||||
set /a on_heap_memory_size_in_mb=%memory_size_in_mb%/5*4
|
||||
) else if %memory_size_in_mb% LSS 131072 (
|
||||
set /a on_heap_memory_size_in_mb=%memory_size_in_mb%/8*7
|
||||
) else (
|
||||
set /a on_heap_memory_size_in_mb=%memory_size_in_mb%-16384
|
||||
)
|
||||
set /a off_heap_memory_size_in_mb=%memory_size_in_mb%-%on_heap_memory_size_in_mb%
|
||||
|
||||
set ON_HEAP_MEMORY=%on_heap_memory_size_in_mb%M
|
||||
set OFF_HEAP_MEMORY=%off_heap_memory_size_in_mb%M
|
||||
|
||||
set IOTDB_ALLOW_HEAP_DUMP="true"
|
||||
|
||||
@REM on heap memory size
|
||||
@REM set ON_HEAP_MEMORY=2G
|
||||
@REM off heap memory size
|
||||
@REM set OFF_HEAP_MEMORY=512M
|
||||
|
||||
if "%OFF_HEAP_MEMORY:~-1%"=="M" (
|
||||
set /a off_heap_memory_size_in_mb=%OFF_HEAP_MEMORY:~0,-1%
|
||||
) else if "%OFF_HEAP_MEMORY:~-1%"=="G" (
|
||||
set /a off_heap_memory_size_in_mb=%OFF_HEAP_MEMORY:~0,-1%*1024
|
||||
)
|
||||
|
||||
@REM threads number of io
|
||||
set IO_THREADS_NUMBER=1000
|
||||
@REM Max cached buffer size, Note: unit can only be B!
|
||||
@REM which equals OFF_HEAP_MEMORY / IO_THREADS_NUMBER
|
||||
set /a MAX_CACHED_BUFFER_SIZE=%off_heap_memory_size_in_mb%/%IO_THREADS_NUMBER%*1024*1024
|
||||
|
||||
set IOTDB_HEAP_OPTS=-Xmx%ON_HEAP_MEMORY% -Xms%ON_HEAP_MEMORY%
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:MaxDirectMemorySize=%OFF_HEAP_MEMORY%
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -Djdk.nio.maxCachedBufferSize=%MAX_CACHED_BUFFER_SIZE%
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:+CrashOnOutOfMemoryError
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:+UseAdaptiveSizePolicy
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -Xss512k
|
||||
@REM options below try to optimize safepoint stw time.
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:+UnlockDiagnosticVMOptions
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:GuaranteedSafepointInterval=0
|
||||
@REM these two options print safepoints with pauses longer than 1000ms to the standard output. You can see these logs via redirection when starting in the background like "start-datanode.sh > log_datanode_safepoint.txt"
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:SafepointTimeoutDelay=1000
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:+SafepointTimeout
|
||||
|
||||
@REM option below tries to optimize safepoint stw time for large counted loop.
|
||||
@REM NOTE: it may have an impact on JIT's black-box optimization.
|
||||
@REM set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:+UseCountedLoopSafepoints
|
||||
|
||||
@REM When the GC time is too long, if there are remaining CPU resources, you can try to turn on and increase options below.
|
||||
@REM for /F "tokens=2 delims==" %%I in ('wmic cpu get NumberOfCores /value') do (
|
||||
@REM set "CPU_PROCESSOR_NUM=%%I"
|
||||
@REM )
|
||||
@REM set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:ParallelGCThreads=%CPU_PROCESSOR_NUM%
|
||||
|
||||
@REM if there are much of stw time of reference process in GC log, you can turn on option below.
|
||||
@REM NOTE: it may have an impact on application's throughput.
|
||||
@REM set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:+ParallelRefProcEnabled
|
||||
|
||||
@REM this option can reduce the overhead caused by memory allocation, page fault interrupts, etc. during JVM operation.
|
||||
@REM NOTE: it may reduce memory utilization and trigger OOM killer when memory is tight.
|
||||
@REM set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -XX:+AlwaysPreTouch
|
||||
|
||||
@REM if you want to dump the heap memory while OOM happening, you can use the following command, remember to replace /tmp/heapdump.hprof with your own file path and the folder where this file is located needs to be created in advance
|
||||
@REM set IOTDB_JMX_OPTS=%IOTDB_HEAP_OPTS% -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\tmp\datanode_heapdump.hprof
|
||||
|
||||
@REM You can put your env variable here
|
||||
@REM set JAVA_HOME=%JAVA_HOME%
|
||||
|
||||
@REM set gc log.
|
||||
IF "%1" equ "printgc" (
|
||||
IF "%JAVA_VERSION%" == "8" (
|
||||
md "%IOTDB_HOME%\logs"
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -Xloggc:"%IOTDB_HOME%\logs\gc.log" -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M
|
||||
@REM For more detailed GC information, you can uncomment option below.
|
||||
@REM NOTE: more detailed GC information may bring larger GC log files.
|
||||
@REM set IOTDB_JMX_OPTS=%IOTDB_JMX_OPTS% -Xloggc:"%IOTDB_HOME%\logs\gc.log" -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintReferenceGC -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M
|
||||
) ELSE (
|
||||
md "%IOTDB_HOME%\logs"
|
||||
set IOTDB_HEAP_OPTS=%IOTDB_HEAP_OPTS% -Xlog:gc=info,heap*=trace,age*=debug,safepoint=info,promotion*=trace:file="%IOTDB_HOME%\logs\gc.log":time,uptime,pid,tid,level:filecount=10,filesize=10485760
|
||||
@REM For more detailed GC information, you can uncomment option below.
|
||||
@REM NOTE: more detailed GC information may bring larger GC log files.
|
||||
@REM set IOTDB_JMX_OPTS=%IOTDB_JMX_OPTS% -Xlog:gc*=debug,heap*=debug,age*=trace,metaspace*=info,safepoint*=debug,promotion*=info:file="%IOTDB_HOME%\logs\gc.log":time,uptime,pid,tid,level,tags:filecount=10,filesize=100M
|
||||
)
|
||||
)
|
||||
|
||||
@REM Add args for Java 11 and above, due to [JEP 396: Strongly Encapsulate JDK Internals by Default] (https://openjdk.java.net/jeps/396)
|
||||
IF "%JAVA_VERSION%" == "8" (
|
||||
set ILLEGAL_ACCESS_PARAMS=
|
||||
) ELSE (
|
||||
set ILLEGAL_ACCESS_PARAMS=--add-opens=java.base/java.util.concurrent=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.lang=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.util=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.nio=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.io=ALL-UNNAMED^
|
||||
--add-opens=java.base/java.net=ALL-UNNAMED
|
||||
)
|
||||
|
||||
echo DataNode on heap memory size = %ON_HEAP_MEMORY%B, off heap memory size = %OFF_HEAP_MEMORY%B
|
||||
echo If you want to change this configuration, please check conf\datanode-env.bat.
|
||||
@@ -1,351 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
# You can set DataNode memory size, example '2G' or '2048M'
|
||||
MEMORY_SIZE=
|
||||
|
||||
# You can put your env variable here
|
||||
# export JAVA_HOME=$JAVA_HOME
|
||||
|
||||
# Set max number of open files
|
||||
max_num=$(ulimit -n)
|
||||
if [ $max_num -le 65535 ]; then
|
||||
ulimit -n 65535
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Warning: Failed to set max number of files to be 65535, maybe you need to use 'sudo ulimit -n 65535' to set it when you use iotdb in production environments."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set somaxconn to a better value to avoid meaningless connection reset issues when the system is under high load.
|
||||
# The original somaxconn will be set back when the system reboots.
|
||||
# For more detail, see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19f92a030ca6d772ab44b22ee6a01378a8cb32d4
|
||||
SOMAXCONN=65535
|
||||
case "$(uname)" in
|
||||
Linux)
|
||||
somaxconn=$(sysctl -n net.core.somaxconn)
|
||||
if [ "$somaxconn" -lt $SOMAXCONN ]; then
|
||||
echo "WARN:"
|
||||
echo "WARN: the value of net.core.somaxconn (=$somaxconn) is too small, please set it to a larger value using the following command."
|
||||
echo "WARN: sudo sysctl -w net.core.somaxconn=$SOMAXCONN"
|
||||
echo "WARN: The original net.core.somaxconn value will be set back when the os reboots."
|
||||
echo "WARN:"
|
||||
fi
|
||||
;;
|
||||
FreeBSD | Darwin)
|
||||
somaxconn=$(sysctl -n kern.ipc.somaxconn)
|
||||
if [ "$somaxconn" -lt $SOMAXCONN ]; then
|
||||
echo "WARN:"
|
||||
echo "WARN: the value of kern.ipc.somaxconn (=$somaxconn) is too small, please set it to a larger value using the following command."
|
||||
echo "WARN: sudo sysctl -w kern.ipc.somaxconn=$SOMAXCONN"
|
||||
echo "WARN: The original kern.ipc.somaxconn value will be set back when the os reboots."
|
||||
echo "WARN:"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# whether we allow enable heap dump files
|
||||
IOTDB_ALLOW_HEAP_DUMP="true"
|
||||
|
||||
calculate_memory_sizes()
|
||||
{
|
||||
case "`uname`" in
|
||||
Linux)
|
||||
system_memory_in_mb=`free -m| sed -n '2p' | awk '{print $2}'`
|
||||
system_cpu_cores=`egrep -c 'processor([[:space:]]+):.*' /proc/cpuinfo`
|
||||
;;
|
||||
FreeBSD)
|
||||
system_memory_in_bytes=`sysctl hw.physmem | awk '{print $2}'`
|
||||
system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
|
||||
system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
|
||||
;;
|
||||
SunOS)
|
||||
system_memory_in_mb=`prtconf | awk '/Memory size:/ {print $3}'`
|
||||
system_cpu_cores=`psrinfo | wc -l`
|
||||
;;
|
||||
Darwin)
|
||||
system_memory_in_bytes=`sysctl hw.memsize | awk '{print $2}'`
|
||||
system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
|
||||
system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
|
||||
;;
|
||||
*)
|
||||
# assume reasonable defaults for e.g. a modern desktop or
|
||||
# cheap server
|
||||
system_memory_in_mb="2048"
|
||||
system_cpu_cores="2"
|
||||
;;
|
||||
esac
|
||||
|
||||
# some systems like the raspberry pi don't report cores, use at least 1
|
||||
if [ "$system_cpu_cores" -lt "1" ]
|
||||
then
|
||||
system_cpu_cores="1"
|
||||
fi
|
||||
|
||||
# suggest using memory, system memory 1 / 2
|
||||
suggest_using_memory_in_mb=`expr $system_memory_in_mb / 2`
|
||||
|
||||
if [ -n "$MEMORY_SIZE" ]
|
||||
then
|
||||
if [ "${MEMORY_SIZE%"G"}" != "$MEMORY_SIZE" ] || [ "${MEMORY_SIZE%"M"}" != "$MEMORY_SIZE" ]
|
||||
then
|
||||
if [ "${MEMORY_SIZE%"G"}" != "$MEMORY_SIZE" ]
|
||||
then
|
||||
memory_size_in_mb=`expr ${MEMORY_SIZE%"G"} "*" 1024`
|
||||
else
|
||||
memory_size_in_mb=`expr ${MEMORY_SIZE%"M"}`
|
||||
fi
|
||||
else
|
||||
echo "Invalid format of MEMORY_SIZE, please use the format like 2048M or 2G"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
memory_size_in_mb=$suggest_using_memory_in_mb
|
||||
fi
|
||||
|
||||
# set on heap memory size
|
||||
# when memory_size_in_mb is less than 4 * 1024, we will set on heap memory size to memory_size_in_mb / 4 * 3
|
||||
# when memory_size_in_mb is greater than 4 * 1024 and less than 16 * 1024, we will set on heap memory size to memory_size_in_mb / 5 * 4
|
||||
# when memory_size_in_mb is greater than 16 * 1024 and less than 128 * 1024, we will set on heap memory size to memory_size_in_mb / 8 * 7
|
||||
# when memory_size_in_mb is greater than 128 * 1024, we will set on heap memory size to memory_size_in_mb - 16 * 1024
|
||||
if [ "$memory_size_in_mb" -lt "4096" ]
|
||||
then
|
||||
on_heap_memory_size_in_mb=`expr $memory_size_in_mb / 4 \* 3`
|
||||
elif [ "$memory_size_in_mb" -lt "16384" ]
|
||||
then
|
||||
on_heap_memory_size_in_mb=`expr $memory_size_in_mb / 5 \* 4`
|
||||
elif [ "$memory_size_in_mb" -lt "131072" ]
|
||||
then
|
||||
on_heap_memory_size_in_mb=`expr $memory_size_in_mb / 8 \* 7`
|
||||
else
|
||||
on_heap_memory_size_in_mb=`expr $memory_size_in_mb - 16384`
|
||||
fi
|
||||
off_heap_memory_size_in_mb=`expr $memory_size_in_mb - $on_heap_memory_size_in_mb`
|
||||
|
||||
ON_HEAP_MEMORY="${on_heap_memory_size_in_mb}M"
|
||||
OFF_HEAP_MEMORY="${off_heap_memory_size_in_mb}M"
|
||||
}
|
||||
|
||||
|
||||
DATANODE_CONF_DIR="`dirname "$0"`"
|
||||
# find first dir of dn_data_dirs from properties file
|
||||
get_first_data_dir() {
|
||||
local config_file="$1"
|
||||
local data_dir_value=""
|
||||
|
||||
data_dir_value=`sed '/^dn_data_dirs=/!d;s/.*=//' ${DATANODE_CONF_DIR}/${config_file} | tail -n 1`
|
||||
|
||||
if [ -z "$data_dir_value" ]; then
|
||||
echo ""
|
||||
return 0
|
||||
fi
|
||||
|
||||
local first_dir=""
|
||||
|
||||
if [[ "$data_dir_value" == *";"* ]]; then
|
||||
first_dir=$(echo "$data_dir_value" | cut -d';' -f1)
|
||||
fi
|
||||
if [[ "$first_dir" == *","* ]]; then
|
||||
first_dir=$(echo "$first_dir" | cut -d',' -f1)
|
||||
fi
|
||||
|
||||
if [[ "$first_dir" == /* ]]; then
|
||||
echo "$first_dir"
|
||||
else
|
||||
echo "$DATANODE_CONF_DIR/../$first_dir"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -f "${DATANODE_CONF_DIR}/iotdb-system.properties" ]; then
|
||||
heap_dump_dir=$(get_first_data_dir "iotdb-system.properties")
|
||||
else
|
||||
heap_dump_dir=$(get_first_data_dir "iotdb-datanode.properties")
|
||||
fi
|
||||
|
||||
if [ -z "$heap_dump_dir" ]; then
|
||||
heap_dump_dir="$(dirname "$0")/../data/datanode/data"
|
||||
fi
|
||||
if [ ! -d "$heap_dump_dir" ]; then
|
||||
mkdir -p "$heap_dump_dir"
|
||||
fi
|
||||
|
||||
# find java in JAVA_HOME
|
||||
if [ -n "$JAVA_HOME" ]; then
|
||||
for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
|
||||
if [ -x "$java" ]; then
|
||||
JAVA="$java"
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
JAVA=java
|
||||
fi
|
||||
|
||||
if [ -z $JAVA ] ; then
|
||||
echo Unable to find java executable. Check JAVA_HOME and PATH environment variables. > /dev/stderr
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
# Determine the sort of JVM we'll be running on.
|
||||
java_ver_output=`"$JAVA" -version 2>&1`
|
||||
jvmver=`echo "$java_ver_output" | grep '[openjdk|java] version' | awk -F'"' 'NR==1 {print $2}' | cut -d\- -f1`
|
||||
JVM_VERSION=${jvmver%_*}
|
||||
JVM_PATCH_VERSION=${jvmver#*_}
|
||||
if [ "$JVM_VERSION" \< "1.8" ] ; then
|
||||
echo "IoTDB requires Java 8u92 or later."
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
if [ "$JVM_VERSION" \< "1.8" ] && [ "$JVM_PATCH_VERSION" -lt 92 ] ; then
|
||||
echo "IoTDB requires Java 8u92 or later."
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
version_arr=(${JVM_VERSION//./ })
|
||||
|
||||
illegal_access_params=""
|
||||
#GC log path has to be defined here because it needs to access IOTDB_HOME
|
||||
if [ "${version_arr[0]}" = "1" ] ; then
|
||||
# Java 8
|
||||
MAJOR_VERSION=${version_arr[1]}
|
||||
echo "$IOTDB_JMX_OPTS" | grep -q "^-[X]loggc"
|
||||
if [ "$?" = "1" ] ; then # [X] to prevent ccm from replacing this line
|
||||
# only add -Xlog:gc if it's not mentioned in jvm-server.options file
|
||||
mkdir -p ${IOTDB_HOME}/logs
|
||||
if [ "$#" -ge "1" -a "$1" == "printgc" ]; then
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Xloggc:${IOTDB_HOME}/logs/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M"
|
||||
# For more detailed GC information, you can uncomment option below.
|
||||
# NOTE: more detailed GC information may bring larger GC log files.
|
||||
# IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Xloggc:${IOTDB_HOME}/logs/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+UseGCLogFileRotation -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintReferenceGC -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
#JDK 11 and others
|
||||
MAJOR_VERSION=${version_arr[0]}
|
||||
# See description of https://bugs.openjdk.java.net/browse/JDK-8046148 for details about the syntax
|
||||
# The following is the equivalent to -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M
|
||||
echo "$IOTDB_JMX_OPTS" | grep -q "^-[X]log:gc"
|
||||
if [ "$?" = "1" ] ; then # [X] to prevent ccm from replacing this line
|
||||
# only add -Xlog:gc if it's not mentioned in jvm-server.options file
|
||||
mkdir -p ${IOTDB_HOME}/logs
|
||||
if [ "$#" -ge "1" -a "$1" == "printgc" ]; then
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Xlog:gc=info,heap*=info,age*=info,safepoint=info,promotion*=info:file=${IOTDB_HOME}/logs/gc.log:time,uptime,pid,tid,level:filecount=10,filesize=10485760"
|
||||
# For more detailed GC information, you can uncomment option below.
|
||||
# NOTE: more detailed GC information may bring larger GC log files.
|
||||
# IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Xlog:gc*=debug,heap*=debug,age*=trace,metaspace*=info,safepoint*=debug,promotion*=info:file=${IOTDB_HOME}/logs/gc.log:time,uptime,pid,tid,level,tags:filecount=10,filesize=100M"
|
||||
fi
|
||||
fi
|
||||
# Add argLine for Java 11 and above, due to [JEP 396: Strongly Encapsulate JDK Internals by Default] (https://openjdk.java.net/jeps/396)
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.util.concurrent=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.lang=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.util=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.nio=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.io=ALL-UNNAMED"
|
||||
illegal_access_params="$illegal_access_params --add-opens=java.base/java.net=ALL-UNNAMED"
|
||||
fi
|
||||
|
||||
|
||||
calculate_memory_sizes
|
||||
|
||||
# on heap memory size
|
||||
#ON_HEAP_MEMORY="2G"
|
||||
# off heap memory size
|
||||
#OFF_HEAP_MEMORY="512M"
|
||||
|
||||
|
||||
if [ "${OFF_HEAP_MEMORY%"G"}" != "$OFF_HEAP_MEMORY" ]
|
||||
then
|
||||
off_heap_memory_size_in_mb=`expr ${OFF_HEAP_MEMORY%"G"} "*" 1024`
|
||||
else
|
||||
off_heap_memory_size_in_mb=`expr ${OFF_HEAP_MEMORY%"M"}`
|
||||
fi
|
||||
|
||||
# threads number for io
|
||||
IO_THREADS_NUMBER="1000"
|
||||
# Max cached buffer size, Note: unit can only be B!
|
||||
# which equals OFF_HEAP_MEMORY / IO_THREADS_NUMBER
|
||||
MAX_CACHED_BUFFER_SIZE=`expr $off_heap_memory_size_in_mb \* 1024 \* 1024 / $IO_THREADS_NUMBER`
|
||||
|
||||
#true or false
|
||||
#DO NOT FORGET TO MODIFY THE PASSWORD FOR SECURITY (${IOTDB_CONF}/jmx.password and ${IOTDB_CONF}/jmx.access)
|
||||
#If you want to connect JMX Service by network in local machine, such as nodeTool.sh will try to connect 127.0.0.1:31999, please set JMX_LOCAL to false.
|
||||
JMX_LOCAL="true"
|
||||
|
||||
JMX_PORT="31999"
|
||||
#only take effect when the jmx_local=false
|
||||
#You need to change this IP as a public IP if you want to remotely connect IoTDB by JMX.
|
||||
# 0.0.0.0 is not allowed
|
||||
JMX_IP="127.0.0.1"
|
||||
|
||||
if [ ${JMX_LOCAL} = "false" ]; then
|
||||
echo "setting remote JMX..."
|
||||
#you may have no permission to run chmod. If so, contact your system administrator.
|
||||
chmod 600 ${IOTDB_CONF}/jmx.password
|
||||
chmod 600 ${IOTDB_CONF}/jmx.access
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Dcom.sun.management.jmxremote"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Djava.rmi.server.randomIDs=true"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Dcom.sun.management.jmxremote.ssl=false"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Dcom.sun.management.jmxremote.password.file=${IOTDB_CONF}/jmx.password"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Dcom.sun.management.jmxremote.access.file=${IOTDB_CONF}/jmx.access"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Djava.rmi.server.hostname=$JMX_IP"
|
||||
else
|
||||
echo "setting local JMX..."
|
||||
fi
|
||||
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Diotdb.jmx.local=$JMX_LOCAL"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Xms${ON_HEAP_MEMORY}"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Xmx${ON_HEAP_MEMORY}"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:MaxDirectMemorySize=${OFF_HEAP_MEMORY}"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Djdk.nio.maxCachedBufferSize=${MAX_CACHED_BUFFER_SIZE}"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+CrashOnOutOfMemoryError"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+UseAdaptiveSizePolicy"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Xss512k"
|
||||
# these two options print safepoints with pauses longer than 1000ms to the standard output. You can see these logs via redirection when starting in the background like "start-datanode.sh > log_datanode_safepoint.log"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:SafepointTimeoutDelay=1000"
|
||||
IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+SafepointTimeout"
|
||||
|
||||
# option below tries to optimize safepoint stw time for large counted loop.
|
||||
# NOTE: it may have an impact on JIT's black-box optimization.
|
||||
# IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+UseCountedLoopSafepoints"
|
||||
|
||||
# when the GC time is too long, if there are remaining CPU resources, you can try to turn on and increase options below.
|
||||
# for Linux:
|
||||
# CPU_PROCESSOR_NUM=$(nproc)
|
||||
# for MacOS:
|
||||
# CPU_PROCESSOR_NUM=$(sysctl -n hw.ncpu)
|
||||
# IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:ParallelGCThreads=${CPU_PROCESSOR_NUM}"
|
||||
|
||||
# if there are much of stw time of reference process in GC log, you can turn on option below.
|
||||
# NOTE: it may have an impact on application's throughput.
|
||||
# IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+ParallelRefProcEnabled"
|
||||
|
||||
# this option can reduce the overhead caused by memory allocation, page fault interrupts, etc. during JVM operation.
|
||||
# NOTE: it may reduce memory utilization and trigger OOM killer when memory is tight.
|
||||
# IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+AlwaysPreTouch"
|
||||
|
||||
# if you want to dump the heap memory while OOM happening, you can use the following command, remember to replace /tmp/heapdump.hprof with your own file path and the folder where this file is located needs to be created in advance
|
||||
# IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${heap_dump_dir}/datanode_heapdump.hprof"
|
||||
|
||||
|
||||
echo "DataNode on heap memory size = ${ON_HEAP_MEMORY}B, off heap memory size = ${OFF_HEAP_MEMORY}B"
|
||||
echo "If you want to change this configuration, please check conf/datanode-env.sh."
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
# This configuration file needs to be configured only when the start-all.sh,stop-all.sh, and destroy.sh scripts are required.
|
||||
# You also need to modify this configuration file when the cluster nodes change
|
||||
|
||||
# Configure ConfigNodes machine addresses separated by ,
|
||||
confignode_address_list=
|
||||
# Configure DataNodes machine addresses separated by ,
|
||||
datanode_address_list=
|
||||
# User name for logging in to the deployment machine using ssh
|
||||
ssh_account=root
|
||||
# ssh login port
|
||||
ssh_port=22
|
||||
# iotdb deployment directory (iotdb should be deployed to the following folders in all machines)
|
||||
confignode_deploy_path=
|
||||
datanode_deploy_path=
|
||||
@@ -1,72 +0,0 @@
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
####################
|
||||
### Cluster Configuration
|
||||
####################
|
||||
|
||||
cluster_name=defaultCluster
|
||||
|
||||
####################
|
||||
### Seed ConfigNode
|
||||
####################
|
||||
|
||||
cn_seed_config_node=127.0.0.1:10710
|
||||
|
||||
dn_seed_config_node=127.0.0.1:10710
|
||||
|
||||
####################
|
||||
### Node RPC Configuration
|
||||
####################
|
||||
|
||||
cn_internal_address=127.0.0.1
|
||||
cn_internal_port=10710
|
||||
cn_consensus_port=10720
|
||||
|
||||
dn_rpc_address=0.0.0.0
|
||||
dn_rpc_port=6667
|
||||
dn_internal_address=127.0.0.1
|
||||
dn_internal_port=10730
|
||||
dn_mpp_data_exchange_port=10740
|
||||
dn_schema_region_consensus_port=10750
|
||||
dn_data_region_consensus_port=10760
|
||||
|
||||
####################
|
||||
### Replication configuration
|
||||
####################
|
||||
|
||||
schema_replication_factor=1
|
||||
data_replication_factor=1
|
||||
|
||||
####################
|
||||
### Directory Configuration
|
||||
####################
|
||||
|
||||
# dn_data_dirs=data/datanode/data
|
||||
# dn_wal_dirs=data/datanode/wal
|
||||
|
||||
####################
|
||||
### Metric Configuration
|
||||
####################
|
||||
|
||||
# cn_metric_reporter_list=
|
||||
cn_metric_prometheus_reporter_port=9091
|
||||
|
||||
# dn_metric_reporter_list=
|
||||
dn_metric_prometheus_reporter_port=9092
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,22 +0,0 @@
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
# see https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html#gdeup
|
||||
iotdb readonly
|
||||
root readwrite
|
||||
@@ -1,22 +0,0 @@
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
# see https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html#gdeup
|
||||
iotdb passw!d
|
||||
root passw!d
|
||||
@@ -1,49 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
<configuration scan="true" scanPeriod="60 seconds">
|
||||
<appender class="ch.qos.logback.core.ConsoleAppender" name="stdout">
|
||||
<Target>System.out</Target>
|
||||
<encoder>
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>ERROR</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="backup">
|
||||
<Encoding>UTF-8</Encoding>
|
||||
<file>${IOTDB_HOME}/logs/log_backup.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-backup-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<root level="all">
|
||||
<appender-ref ref="stdout"/>
|
||||
<appender-ref ref="backup"/>
|
||||
</root>
|
||||
</configuration>
|
||||
@@ -1,112 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
-->
|
||||
<configuration scan="true" scanPeriod="60 seconds">
|
||||
<jmxConfigurator/>
|
||||
<!-- prevent logback from outputting its own status at the start of every log -->
|
||||
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILEERROR">
|
||||
<file>${CONFIGNODE_HOME}/logs/log_confignode_error.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${CONFIGNODE_HOME}/logs/log-confignode-error-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>error</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILEWARN">
|
||||
<file>${CONFIGNODE_HOME}/logs/log_confignode_warn.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${CONFIGNODE_HOME}/logs/log-confignode-warn-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>WARN</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILEDEBUG">
|
||||
<file>${CONFIGNODE_HOME}/logs/log_confignode_debug.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${CONFIGNODE_HOME}/logs/log-confignode-debug-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>DEBUG</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.ConsoleAppender" name="stdout">
|
||||
<Target>System.out</Target>
|
||||
<encoder>
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>${CONSOLE_LOG_LEVEL:-DEBUG}</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<!-- a log appender that collect all log records whose level is greater than debug-->
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILEALL">
|
||||
<file>${CONFIGNODE_HOME}/logs/log_confignode_all.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${CONFIGNODE_HOME}/logs/log-confignode-all-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<root level="info">
|
||||
<appender-ref ref="FILEDEBUG"/>
|
||||
<appender-ref ref="FILEWARN"/>
|
||||
<appender-ref ref="FILEERROR"/>
|
||||
<appender-ref ref="FILEALL"/>
|
||||
<appender-ref ref="stdout"/>
|
||||
</root>
|
||||
<logger level="info" name="org.apache.iotdb.confignode"/>
|
||||
<logger level="info" name="org.apache.ratis"/>
|
||||
</configuration>
|
||||
@@ -1,267 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
-->
|
||||
<configuration scan="true" scanPeriod="60 seconds">
|
||||
<jmxConfigurator/>
|
||||
<!-- prevent logback from outputting its own status at the start of every log -->
|
||||
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILEERROR">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_error.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-error-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>error</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILEWARN">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_warn.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-warn-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>WARN</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILEDEBUG">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_debug.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-debug-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>DEBUG</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILETRACE">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_trace.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-trace-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>TRACE</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.ConsoleAppender" name="stdout">
|
||||
<Target>System.out</Target>
|
||||
<encoder>
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>${CONSOLE_LOG_LEVEL:-DEBUG}</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<!-- a log appender that collect all log records whose level is greater than debug-->
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILEALL">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_all.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-all-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE_COST_MEASURE">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_measure.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-measure-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="AUDIT">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_audit.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-audit-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="QUERY_DEBUG">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_query_debug.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-query-debug-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="SLOW_SQL">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_slow_sql.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-slow-sql-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="COMPACTION">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_compaction.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-compaction-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="PIPE">
|
||||
<file>${IOTDB_HOME}/logs/log_datanode_pipe.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-pipe-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="EXPLAIN_ANALYZE">
|
||||
<file>${IOTDB_HOME}/logs/log_explain_analyze.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${IOTDB_HOME}/logs/log-datanode-explain-%d{yyyyMMdd}.log.gz</fileNamePattern>
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<append>true</append>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<root level="info">
|
||||
<appender-ref ref="FILETRACE"/>
|
||||
<appender-ref ref="FILEDEBUG"/>
|
||||
<appender-ref ref="FILEWARN"/>
|
||||
<appender-ref ref="FILEERROR"/>
|
||||
<appender-ref ref="FILEALL"/>
|
||||
<appender-ref ref="stdout"/>
|
||||
</root>
|
||||
<logger level="OFF" name="io.moquette.broker.metrics.MQTTMessageLogger"/>
|
||||
<logger level="info" name="org.apache.iotdb.db.service"/>
|
||||
<logger level="info" name="org.apache.iotdb.db.conf"/>
|
||||
<logger level="info" name="org.apache.iotdb.db.cost.statistic">
|
||||
<appender-ref ref="FILE_COST_MEASURE"/>
|
||||
</logger>
|
||||
<logger level="info" name="IoTDB_AUDIT_LOGGER">
|
||||
<appender-ref ref="AUDIT"/>
|
||||
</logger>
|
||||
<logger level="info" name="QUERY_DEBUG">
|
||||
<appender-ref ref="QUERY_DEBUG"/>
|
||||
</logger>
|
||||
<logger level="info" name="SLOW_SQL">
|
||||
<appender-ref ref="SLOW_SQL"/>
|
||||
</logger>
|
||||
<logger level="info" name="QUERY_FREQUENCY">
|
||||
<appender-ref ref="QUERY_FREQUENCY"/>
|
||||
</logger>
|
||||
<logger level="info" name="DETAILED_FAILURE_QUERY_TRACE"/>
|
||||
<logger level="info" name="COMPACTION">
|
||||
<appender-ref ref="COMPACTION"/>
|
||||
</logger>
|
||||
<logger level="info" name="org.apache.iotdb.pipe.api">
|
||||
<appender-ref ref="PIPE"/>
|
||||
</logger>
|
||||
<logger level="info" name="org.apache.iotdb.db.pipe">
|
||||
<appender-ref ref="PIPE"/>
|
||||
</logger>
|
||||
<logger level="info" name="org.apache.iotdb.commons.pipe">
|
||||
<appender-ref ref="PIPE"/>
|
||||
</logger>
|
||||
<logger level="info" name="EXPLAIN_ANALYZE">
|
||||
<appender-ref ref="EXPLAIN_ANALYZE"/>
|
||||
</logger>
|
||||
</configuration>
|
||||
@@ -1,36 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
-->
|
||||
<configuration scan="true" scanPeriod="60 seconds">
|
||||
<appender class="ch.qos.logback.core.ConsoleAppender" name="stdout">
|
||||
<Target>System.out</Target>
|
||||
<encoder>
|
||||
<pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>ERROR</level>
|
||||
</filter>
|
||||
</appender>
|
||||
<root level="error">
|
||||
<appender-ref ref="stdout"/>
|
||||
</root>
|
||||
</configuration>
|
||||
Binary file not shown.
@@ -24,7 +24,6 @@ DROP TABLE IF EXISTS `gen_table`;
|
||||
CREATE TABLE `gen_table` (
|
||||
`table_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
|
||||
`table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '表名称',
|
||||
`data_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '数据源名称',
|
||||
`table_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '表描述',
|
||||
`sub_table_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联子表的表名',
|
||||
`sub_table_fk_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '子表关联的外键名',
|
||||
@@ -231,7 +230,7 @@ INSERT INTO `iot_device_job` VALUES (5, '告警定时触发', 'DEFAULT', '0 13 1
|
||||
DROP TABLE IF EXISTS `iot_device_log`;
|
||||
CREATE TABLE `iot_device_log` (
|
||||
`log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '设备监测信息ID',
|
||||
`identify` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标识符',
|
||||
`identity` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标识符',
|
||||
`model_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '物模型名称',
|
||||
`log_type` tinyint(1) NOT NULL COMMENT '类型(1=属性上报,2=调用功能,3=事件上报,4=设备升级,5=设备上线,6=设备离线)',
|
||||
`log_value` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '日志值',
|
||||
@@ -328,7 +327,7 @@ INSERT INTO `iot_device_user` VALUES (140, 1, 1, 'admin', '¥视频监控', '15
|
||||
DROP TABLE IF EXISTS `iot_event_log`;
|
||||
CREATE TABLE `iot_event_log` (
|
||||
`log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '设备事件日志ID',
|
||||
`identify` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标识符',
|
||||
`identity` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '标识符',
|
||||
`model_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '物模型名称',
|
||||
`log_type` tinyint(1) NOT NULL COMMENT '类型(3=事件上报,5=设备上线,6=设备离线)',
|
||||
`log_value` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '日志值',
|
||||
@@ -1531,7 +1530,7 @@ CREATE TABLE `sip_config` (
|
||||
`enabled` tinyint(1) NULL DEFAULT NULL COMMENT '使能开关',
|
||||
`isdefault` tinyint(1) NULL DEFAULT NULL COMMENT '系统默认配置',
|
||||
`seniorSdp` tinyint(1) NULL DEFAULT NULL COMMENT '拓展sdp',
|
||||
`domain_alias` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '服务器域',
|
||||
`domain` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '服务器域',
|
||||
`server_sipid` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '服务器sipid',
|
||||
`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'sip认证密码',
|
||||
`ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'sip接入IP',
|
||||
@@ -1567,14 +1566,14 @@ CREATE TABLE `sip_device` (
|
||||
`model` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '产品型号',
|
||||
`firmware` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '固件版本',
|
||||
`transport` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'UDP' COMMENT '传输模式',
|
||||
`stream_mode` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'UDP' COMMENT '流模式',
|
||||
`streamMode` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'UDP' COMMENT '流模式',
|
||||
`online` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '在线状态',
|
||||
`register_time` datetime NOT NULL COMMENT '注册时间',
|
||||
`last_connect_time` datetime NULL DEFAULT NULL COMMENT '最后上线时间',
|
||||
`registerTime` datetime NOT NULL COMMENT '注册时间',
|
||||
`lastConnectTime` datetime NULL DEFAULT NULL COMMENT '最后上线时间',
|
||||
`active_time` datetime NULL DEFAULT NULL COMMENT '激活时间',
|
||||
`ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备入网IP',
|
||||
`port` bigint(10) NULL DEFAULT NULL COMMENT '设备接入端口号',
|
||||
`host_address` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备地址',
|
||||
`hostAddress` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备地址',
|
||||
`del_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
|
||||
`create_by` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
@@ -2437,11 +2436,7 @@ CREATE TABLE `sys_oper_log` (
|
||||
`status` int(1) NULL DEFAULT 0 COMMENT '操作状态(0正常 1异常)',
|
||||
`error_msg` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '错误消息',
|
||||
`oper_time` datetime NULL DEFAULT NULL COMMENT '操作时间',
|
||||
`cost_time` bigint(20) DEFAULT 0 COMMENT '消耗时间',
|
||||
PRIMARY KEY (`oper_id`) USING BTREE,
|
||||
KEY idx_sys_oper_log_bt (business_type),
|
||||
KEY idx_sys_oper_log_s (status),
|
||||
KEY idx_sys_oper_log_ot (oper_time)
|
||||
PRIMARY KEY (`oper_id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志记录' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
# This is a automacically generated configuration file for Explorer in [TOML](https://toml.io/) format.
|
||||
#
|
||||
# Here is a full list of available options.
|
||||
|
||||
# Explorer server port to listen on.
|
||||
# Default is 6060.
|
||||
#
|
||||
port = 6060
|
||||
|
||||
# IPv4 listen address.
|
||||
# Default is 0.0.0.0
|
||||
addr = "0.0.0.0"
|
||||
|
||||
# IPv6 listen address.
|
||||
|
||||
# ipv6 = "::1"
|
||||
|
||||
# Explorer server log level.
|
||||
# Default is "info"
|
||||
#
|
||||
log_level = "info"
|
||||
|
||||
# REST API endpoint to connect to the cluster.
|
||||
# This configuration is also the target for data migration tasks.
|
||||
#
|
||||
# Default is "http://buildkitsandbox:6041" - the default endpoint for REST API.
|
||||
#
|
||||
cluster = "http://fastbee:6041"
|
||||
|
||||
# native endpoint to connect to the cluster.
|
||||
# Default is disabled. To enable it, set it to the native API URL like "taos://buildkitsandbox:6030" and uncomment it.
|
||||
# If you enable it, you will get more performance for data migration tasks.
|
||||
#
|
||||
# cluster_native = "taos://buildkitsandbox:6030"
|
||||
|
||||
# API endpoint for data replication/backup/data sources. No default option.
|
||||
# Set it to API URL like "http://buildkitsandbox:6050".
|
||||
#
|
||||
x_api ="http://fastbee:6050"
|
||||
|
||||
# GRPC endpoint for "Agent"s.
|
||||
# Default is "http://buildkitsandbox:6055" - the default endpoint for taosX grpc API.
|
||||
# You should set it to public IP or FQDN name like:
|
||||
# "http://192.168.111.111:6055" or "http://node1.company.domain:6055" and
|
||||
# ensure to add the port to the exception list of the firewall if it enabled.
|
||||
grpc = "http://fastbee:6055"
|
||||
|
||||
# CORS configuration switch, it allows cross-origin access
|
||||
cors = true
|
||||
|
||||
# cloud open api.
|
||||
# cloud_open_api = "https://pre.ali.cloud.taosdata.com/openapi"
|
||||
|
||||
# Enable ssl
|
||||
# If the following two files exist, enable ssl protocol
|
||||
#
|
||||
[ssl]
|
||||
|
||||
# SSL certificate
|
||||
#
|
||||
# certificate = "/path/to/ca.file" # on linux/macOS
|
||||
# certificate = "C:\\path\\to\\ca.file" # on windows
|
||||
|
||||
# SSL certificate key
|
||||
#
|
||||
# certificate_key = "/path/to/key.file" # on linux/macOS
|
||||
# certificate_key = "C:\\path\\to\\key.file" # on windows
|
||||
@@ -1,193 +0,0 @@
|
||||
########################################################
|
||||
# #
|
||||
# Configuration #
|
||||
# #
|
||||
########################################################
|
||||
|
||||
######### 0. Client only configurations #############
|
||||
|
||||
# The interval for CLI to send heartbeat to mnode
|
||||
# shellActivityTimer 3
|
||||
|
||||
|
||||
############### 1. Cluster End point ############################
|
||||
|
||||
# The end point of the first dnode in the cluster to be connected to when this dnode or the CLI utility is started
|
||||
# firstEp hostname:6030
|
||||
|
||||
# The end point of the second dnode to be connected to if the firstEp is not available
|
||||
# secondEp
|
||||
|
||||
|
||||
############### 2. Configuration Parameters of current dnode #####
|
||||
|
||||
# The FQDN of the host on which this dnode will be started. It can be IP address
|
||||
fqdn fastbee
|
||||
|
||||
# The port for external access after this dnode is started
|
||||
# serverPort 6030
|
||||
|
||||
# The maximum number of connections a dnode can accept
|
||||
# maxShellConns 5000
|
||||
|
||||
# The directory for writing log files, if you are using Windows platform please change to Windows path
|
||||
# logDir /var/log/taos
|
||||
|
||||
# All data files are stored in this directory, if you are using Windows platform please change to Windows path
|
||||
# dataDir /var/lib/taos
|
||||
|
||||
# temporary file's directory, if you are using Windows platform please change to Windows path
|
||||
# tempDir /tmp/
|
||||
|
||||
# Switch for allowing to collect and report service usage information
|
||||
# telemetryReporting 1
|
||||
|
||||
# Switch for allowing to collect and report crash information
|
||||
# crashReporting 1
|
||||
|
||||
# The maximum number of vnodes supported by this dnode
|
||||
# supportVnodes 0
|
||||
|
||||
# The interval of this dnode reporting status to mnode, [1..10] seconds
|
||||
# statusInterval 1
|
||||
|
||||
# The minimum sliding window time, milli-second
|
||||
# minSlidingTime 10
|
||||
|
||||
# The minimum time window, milli-second
|
||||
# minIntervalTime 10
|
||||
|
||||
# The maximum allowed query buffer size in MB during query processing for each data node
|
||||
# -1 no limit (default)
|
||||
# 0 no query allowed, queries are disabled
|
||||
# queryBufferSize -1
|
||||
|
||||
# The compressed rpc message, option:
|
||||
# -1 (no compression)
|
||||
# 0 (all message compressed),
|
||||
# > 0 (rpc message body which larger than this value will be compressed)
|
||||
# compressMsgSize -1
|
||||
|
||||
# query retrieved column data compression option:
|
||||
# -1 (no compression)
|
||||
# 0 (all retrieved column data compressed),
|
||||
# > 0 (any retrieved column size greater than this value all data will be compressed.)
|
||||
# compressColData -1
|
||||
|
||||
# system time zone
|
||||
# timezone UTC-8
|
||||
|
||||
# system time zone (for windows 10)
|
||||
# timezone Asia/Shanghai (CST, +0800)
|
||||
|
||||
# system locale
|
||||
# locale en_US.UTF-8
|
||||
|
||||
# system charset
|
||||
# charset UTF-8
|
||||
|
||||
# stop writing logs when the disk size of the log folder is less than this value
|
||||
# minimalLogDirGB 1.0
|
||||
|
||||
# stop writing temporary files when the disk size of the tmp folder is less than this value
|
||||
# minimalTmpDirGB 1.0
|
||||
|
||||
# if free disk space is less than this value, this dnode will fail to start
|
||||
# minimalDataDirGB 2.0
|
||||
|
||||
# enable/disable system monitor
|
||||
# monitor 1
|
||||
|
||||
# enable/disable audit log
|
||||
# audit 1
|
||||
|
||||
# enable/disable audit create table
|
||||
# auditCreateTable 1
|
||||
|
||||
# The following parameter is used to limit the maximum number of lines in log files.
|
||||
# max number of lines per log filters
|
||||
# numOfLogLines 10000000
|
||||
|
||||
# write log in async way: 1 - async, 0 - sync
|
||||
# asyncLog 1
|
||||
|
||||
# time period of keeping log files, in days
|
||||
# logKeepDays 0
|
||||
|
||||
|
||||
############ 3. Debug Flag and levels #############################################
|
||||
|
||||
# The following parameters are used for debug purpose only by this dnode.
|
||||
# debugFlag is a 8 bits mask: FILE-SCREEN-UNUSED-HeartBeat-DUMP-TRACE_WARN-ERROR
|
||||
# Available debug levels are:
|
||||
# 131: output warning and error
|
||||
# 135: output debug, warning and error
|
||||
# 143: output trace, debug, warning and error to log
|
||||
# 199: output debug, warning and error to both screen and file
|
||||
# 207: output trace, debug, warning and error to both screen and file
|
||||
|
||||
# debug flag for all log type, take effect when non-zero value
|
||||
# debugFlag 0
|
||||
|
||||
# debug flag for timer
|
||||
# tmrDebugFlag 131
|
||||
|
||||
# debug flag for util
|
||||
# uDebugFlag 131
|
||||
|
||||
# debug flag for rpc
|
||||
# rpcDebugFlag 131
|
||||
|
||||
# debug flag for jni
|
||||
# jniDebugFlag 131
|
||||
|
||||
# debug flag for query
|
||||
# qDebugFlag 131
|
||||
|
||||
# debug flag for client driver
|
||||
# cDebugFlag 131
|
||||
|
||||
# debug flag for dnode messages
|
||||
# dDebugFlag 135
|
||||
|
||||
# debug flag for vnode
|
||||
# vDebugFlag 131
|
||||
|
||||
# debug flag for meta management messages
|
||||
# mDebugFlag 135
|
||||
|
||||
# debug flag for wal
|
||||
# wDebugFlag 135
|
||||
|
||||
# debug flag for sync module
|
||||
# sDebugFlag 135
|
||||
|
||||
# debug flag for tsdb
|
||||
# tsdbDebugFlag 131
|
||||
|
||||
# debug flag for tq
|
||||
# tqDebugFlag 131
|
||||
|
||||
# debug flag for fs
|
||||
# fsDebugFlag 131
|
||||
|
||||
# debug flag for udf
|
||||
# udfDebugFlag 131
|
||||
|
||||
# debug flag for sma
|
||||
# smaDebugFlag 131
|
||||
|
||||
# debug flag for index
|
||||
# idxDebugFlag 131
|
||||
|
||||
# debug flag for tdb
|
||||
# tdbDebugFlag 131
|
||||
|
||||
# debug flag for meta
|
||||
# metaDebugFlag 131
|
||||
|
||||
# generate core file when service crash
|
||||
# enableCoreFile 1
|
||||
monitor 1
|
||||
monitorFQDN fastbee
|
||||
audit 1
|
||||
@@ -1,110 +0,0 @@
|
||||
debug = true
|
||||
taosConfigDir = ""
|
||||
port = 6041
|
||||
logLevel = "info"
|
||||
httpCodeServerError = false
|
||||
SMLAutoCreateDB = false
|
||||
|
||||
[cors]
|
||||
allowAllOrigins = true
|
||||
|
||||
#[pool]
|
||||
#maxConnect = 0
|
||||
#maxIdle = 0
|
||||
#idleTimeout = 0
|
||||
|
||||
[ssl]
|
||||
enable = false
|
||||
certFile = ""
|
||||
keyFile = ""
|
||||
|
||||
[log]
|
||||
#path = "/var/log/taos"
|
||||
rotationCount = 30
|
||||
rotationTime = "24h"
|
||||
rotationSize = "1GB"
|
||||
enableRecordHttpSql = false
|
||||
sqlRotationCount = 2
|
||||
sqlRotationTime = "24h"
|
||||
sqlRotationSize = "1GB"
|
||||
|
||||
[monitor]
|
||||
disable = true
|
||||
collectDuration = "3s"
|
||||
incgroup = false
|
||||
pauseQueryMemoryThreshold = 70
|
||||
pauseAllMemoryThreshold = 80
|
||||
identity = ""
|
||||
|
||||
[uploadKeeper]
|
||||
enable = true
|
||||
url = "http://127.0.0.1:6043/adapter_report"
|
||||
interval = "15s"
|
||||
timeout = "5s"
|
||||
retryTimes = 3
|
||||
retryInterval = "5s"
|
||||
|
||||
[opentsdb]
|
||||
enable = true
|
||||
|
||||
[influxdb]
|
||||
enable = true
|
||||
|
||||
[statsd]
|
||||
enable = false
|
||||
port = 6044
|
||||
db = "statsd"
|
||||
user = "root"
|
||||
password = "taosdata"
|
||||
worker = 10
|
||||
gatherInterval = "5s"
|
||||
protocol = "udp4"
|
||||
maxTCPConnections = 250
|
||||
tcpKeepAlive = false
|
||||
allowPendingMessages = 50000
|
||||
deleteCounters = true
|
||||
deleteGauges = true
|
||||
deleteSets = true
|
||||
deleteTimings = true
|
||||
|
||||
[collectd]
|
||||
enable = false
|
||||
port = 6045
|
||||
db = "collectd"
|
||||
user = "root"
|
||||
password = "taosdata"
|
||||
worker = 10
|
||||
|
||||
|
||||
[opentsdb_telnet]
|
||||
enable = false
|
||||
maxTCPConnections = 250
|
||||
tcpKeepAlive = false
|
||||
dbs = ["opentsdb_telnet", "collectd", "icinga2", "tcollector"]
|
||||
ports = [6046, 6047, 6048, 6049]
|
||||
user = "root"
|
||||
password = "taosdata"
|
||||
batchSize = 1
|
||||
flushInterval = "0s"
|
||||
|
||||
[node_exporter]
|
||||
enable = false
|
||||
db = "node_exporter"
|
||||
user = "root"
|
||||
password = "taosdata"
|
||||
urls = ["http://fastbee:9100"]
|
||||
responseTimeout = "5s"
|
||||
httpUsername = ""
|
||||
httpPassword = ""
|
||||
httpBearerTokenString = ""
|
||||
caCertFile = ""
|
||||
certFile = ""
|
||||
keyFile = ""
|
||||
insecureSkipVerify = true
|
||||
gatherDuration = "5s"
|
||||
|
||||
[prometheus]
|
||||
enable = true
|
||||
|
||||
[tmq]
|
||||
releaseIntervalMultiplierForAutocommit = 2
|
||||
@@ -1,48 +0,0 @@
|
||||
# Start with debug middleware for gin
|
||||
debug = false
|
||||
|
||||
# Listen port, default is 6043
|
||||
port = 6043
|
||||
|
||||
# log level
|
||||
loglevel = "info"
|
||||
|
||||
# go pool size
|
||||
gopoolsize = 50000
|
||||
|
||||
# interval for metrics
|
||||
RotationInterval = "15s"
|
||||
|
||||
[tdengine]
|
||||
host = "fastbee"
|
||||
port = 6041
|
||||
username = "root"
|
||||
password = "taosdata"
|
||||
usessl = false
|
||||
|
||||
[metrics]
|
||||
# metrics prefix in metrics names.
|
||||
prefix = "taos"
|
||||
|
||||
# export some tables that are not super table
|
||||
tables = []
|
||||
|
||||
# database for storing metrics data
|
||||
[metrics.database]
|
||||
name = "log"
|
||||
# database options for db storing metrics data
|
||||
[metrics.database.options]
|
||||
vgroups = 1
|
||||
buffer = 64
|
||||
KEEP = 90
|
||||
cachemodel = "both"
|
||||
|
||||
[environment]
|
||||
# Whether running in cgroup.
|
||||
incgroup = false
|
||||
|
||||
[log]
|
||||
#path = "/var/log/taos"
|
||||
rotationCount = 5
|
||||
rotationTime = "24h"
|
||||
rotationSize = 100000000
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 114 KiB |
@@ -39,8 +39,9 @@
|
||||
|
||||
<!-- Mysql驱动包 -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
<version>${mysql.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 核心模块-->
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.fastbee;
|
||||
|
||||
import com.dtflys.forest.springboot.annotation.ForestScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
|
||||
@@ -3,9 +3,9 @@ package com.fastbee.web.controller.common;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.annotation.Resource;
|
||||
import jakarta.annotation.Resource;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -25,7 +25,7 @@ import com.fastbee.system.service.ISysConfigService;
|
||||
|
||||
/**
|
||||
* 验证码操作处理
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Api(tags = "验证码操作")
|
||||
@@ -40,7 +40,7 @@ public class CaptchaController
|
||||
|
||||
@Autowired
|
||||
private RedisCache redisCache;
|
||||
|
||||
|
||||
@Autowired
|
||||
private ISysConfigService configService;
|
||||
/**
|
||||
|
||||
@@ -2,8 +2,8 @@ package com.fastbee.web.controller.common;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -26,7 +26,7 @@ import com.fastbee.framework.config.ServerConfig;
|
||||
|
||||
/**
|
||||
* 通用请求处理
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Api(tags = "通用请求处理")
|
||||
@@ -43,7 +43,7 @@ public class CommonController
|
||||
|
||||
/**
|
||||
* 通用下载请求
|
||||
*
|
||||
*
|
||||
* @param fileName 文件名称
|
||||
* @param delete 是否删除
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.fastbee.web.controller.monitor;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -25,7 +25,7 @@ import com.fastbee.system.service.ISysLogininforService;
|
||||
|
||||
/**
|
||||
* 系统访问记录
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Api(tags = "日志管理:登录日志")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.fastbee.web.controller.monitor;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -24,7 +24,7 @@ import com.fastbee.system.service.ISysOperLogService;
|
||||
|
||||
/**
|
||||
* 操作日志记录
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Api(tags = "日志管理:操作日志")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.fastbee.web.controller.system;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.fastbee.web.controller.system;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -27,7 +27,7 @@ import com.fastbee.system.service.ISysDictTypeService;
|
||||
|
||||
/**
|
||||
* 数据字典信息
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@RestController
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.fastbee.web.controller.system;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.fastbee.web.controller.system;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.fastbee.web.controller.system;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
@@ -22,7 +22,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
/**
|
||||
* swagger 用户测试方法
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import jakarta.annotation.Resource;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -30,14 +30,6 @@ spring:
|
||||
merge-sql: true
|
||||
wall:
|
||||
none-base-statement-allow: true
|
||||
taos: # 配置 taos 数据源
|
||||
enabled: false
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
||||
url: jdbc:TAOS-RS://fastbee:6041/fastbee_log?timezone=UTC-8&charset=utf-8
|
||||
username: root
|
||||
password: taosdata
|
||||
dbName: fastbee_log
|
||||
# slave:
|
||||
# type: com.alibaba.druid.pool.DruidDataSource
|
||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
@@ -47,11 +39,12 @@ spring:
|
||||
|
||||
|
||||
|
||||
# redis 配置
|
||||
# redis 配置
|
||||
spring.data:
|
||||
redis:
|
||||
host: localhost # 地址
|
||||
port: 6379 # 端口,默认为6379
|
||||
database: 0 # 数据库索引
|
||||
database: 10 # 数据库索引
|
||||
password: fastbee # 密码
|
||||
timeout: 10s # 连接超时时间
|
||||
lettuce:
|
||||
|
||||
@@ -30,14 +30,6 @@ spring:
|
||||
merge-sql: true
|
||||
wall:
|
||||
none-base-statement-allow: true
|
||||
taos: # 配置 taos 数据源
|
||||
enabled: false
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
||||
url: jdbc:TAOS-RS://fastbee:6041/fastbee_log?timezone=UTC-8&charset=utf-8
|
||||
username: root
|
||||
password: taosdata
|
||||
dbName: fastbee_log
|
||||
# slave:
|
||||
# type: com.alibaba.druid.pool.DruidDataSource
|
||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
@@ -46,6 +38,7 @@ spring:
|
||||
# password: fastbee
|
||||
|
||||
# redis 配置
|
||||
spring.data:
|
||||
redis:
|
||||
host: 177.7.0.10 # 地址
|
||||
port: 6379 # 端口,默认为6379
|
||||
|
||||
@@ -30,34 +30,6 @@ spring:
|
||||
merge-sql: true
|
||||
wall:
|
||||
none-base-statement-allow: true
|
||||
taos: # 配置 taos 数据源
|
||||
enabled: false
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
||||
url: jdbc:TAOS-RS://fastbee:6041/fastbee_log?timezone=UTC-8&charset=utf-8
|
||||
# driver-class-name: com.taosdata.jdbc.TSDBDriver
|
||||
# url: jdbc:TAOS://fastbee:6030/fastbee_log?timezone=UTC-8&charset=utf-8
|
||||
# driver-class-name: com.taosdata.jdbc.ws.WebSocketDriver
|
||||
# url: jdbc:TAOS-WS://fastbee:6041/fastbee_log?timezone=UTC-8&charset=utf-8
|
||||
username: root
|
||||
password: taosdata
|
||||
dbName: fastbee_log
|
||||
# influx: # 配置 influx 数据源
|
||||
# enabled: false
|
||||
# url: http://81.71.97.58:8086
|
||||
# token: inX0k-IPfSgKg6AIfoZm6Mv0DQyQOKCkfvs5ZF3a836Yzx2Ew9QgxsHev40_2gztuMn6tofwyS6nfbT4cD-SeA==
|
||||
# bucket: device_log
|
||||
# org: fastbee
|
||||
# measurement: device_log
|
||||
# iotdb:
|
||||
# enabled: false
|
||||
# driver-class-name: org.apache.iotdb.jdbc.IoTDBDriver
|
||||
# url: jdbc:iotdb://81.71.97.58:6667/
|
||||
# username: root
|
||||
# password: root
|
||||
# dbName: root.ln
|
||||
# druid:
|
||||
# validation-query: ''
|
||||
# sqlServer: # 配置 SQLServer 数据源
|
||||
# type: com.alibaba.druid.pool.DruidDataSource
|
||||
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
|
||||
@@ -94,10 +66,11 @@ spring:
|
||||
|
||||
|
||||
# redis 配置
|
||||
spring.data:
|
||||
redis:
|
||||
host: 81.71.97.58 # 地址
|
||||
host: 192.168.5.12 # 地址
|
||||
port: 6379 # 端口,默认为6379
|
||||
database: 11 # 数据库索引
|
||||
database: 11 # 数据库索引
|
||||
password: fastbee # 密码
|
||||
timeout: 10s # 连接超时时间
|
||||
lettuce:
|
||||
@@ -113,7 +86,7 @@ sip:
|
||||
## 本地调试时,绑定网卡局域网IP,设备在同一局域网,设备接入IP填写绑定IP
|
||||
## 部署服务端时,默认绑定容器IP,设备接入IP填写服务器公网IP
|
||||
#ip: 177.7.0.13
|
||||
ip: 192.168.5.27
|
||||
ip: 192.168.5.12
|
||||
port: 5061 # SIP端口(保持默认)
|
||||
domain: 3402000000 # 由省级、市级、区级、基层编号组成
|
||||
id: 34020000002000000001 # 同上,另外增加编号,(可保持默认)
|
||||
|
||||
@@ -5,7 +5,7 @@ fastbee:
|
||||
copyrightYear: 2024 # 版权年份
|
||||
demoEnabled: true # 实例演示开关
|
||||
# 文件路径,以uploadPath结尾 示例( Windows配置 D:/uploadPath,Linux配置 /uploadPath)
|
||||
profile: D:/uploadPath
|
||||
profile: /uploadPath
|
||||
addressEnabled: true # 获取ip地址开关
|
||||
captchaType: math # 验证码类型 math 数组计算 char 字符验证
|
||||
|
||||
@@ -22,17 +22,24 @@ server:
|
||||
min-spare: 100 # Tomcat启动初始化的线程数,默认值10
|
||||
# 基于netty的服务器
|
||||
broker:
|
||||
must-pass: false # 客户端连接是否需要密码
|
||||
enabled: true # 需要配置为true
|
||||
broker-node: node1
|
||||
port: 1883
|
||||
websocket-port: 8083
|
||||
websocket-path: /mqtt
|
||||
keep-alive: 70 # 默认的全部客户端心跳上传时间
|
||||
keep-alive: 30 # 默认的全部客户端心跳上传时间
|
||||
|
||||
# Spring配置
|
||||
spring:
|
||||
# 环境配置,dev=开发环境,prod=生产环境
|
||||
profiles:
|
||||
active: dev # 环境配置,dev=开发环境,prod=生产环境
|
||||
active: prod # 环境配置,dev=开发环境,prod=生产环境
|
||||
main:
|
||||
allow-circular-references: true
|
||||
mvc:
|
||||
pathmatch:
|
||||
matching-strategy: ant_path_matcher
|
||||
# 资源信息
|
||||
messages:
|
||||
# 国际化资源文件路径
|
||||
@@ -68,6 +75,12 @@ spring:
|
||||
strict: false
|
||||
lazy: true
|
||||
|
||||
#集群配置
|
||||
cluster:
|
||||
enable: true
|
||||
type: redis
|
||||
|
||||
|
||||
# 用户配置
|
||||
user:
|
||||
password:
|
||||
@@ -82,11 +95,16 @@ token:
|
||||
|
||||
# mybatis-plus配置
|
||||
mybatis-plus:
|
||||
typeAliasesPackage: com.fastbee.**.domain # 搜索指定包别名
|
||||
mapperLocations: classpath*:mapper/**/*Mapper.xml # 配置mapper的扫描,找到所有的mapper.xml映射文件
|
||||
# 搜索指定包别名
|
||||
typeAliasesPackage: com.fastbee.**.domain
|
||||
# 配置mapper的扫描,找到所有的mapper.xml映射文件
|
||||
mapperLocations: classpath*:mapper/**/*Mapper.xml
|
||||
configLocation: classpath:mybatis/mybatis-config.xml # 加载全局的配置文件
|
||||
global-config:
|
||||
db-config:
|
||||
dbConfig:
|
||||
# 主键类型
|
||||
# AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
|
||||
# 如需改为自增 需要将数据库表全部设置为自增
|
||||
id-type: AUTO # 自增 ID
|
||||
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
|
||||
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
|
||||
@@ -102,3 +120,8 @@ xss:
|
||||
enabled: true # 过滤开关
|
||||
excludes: /system/notice # 排除链接(多个用逗号分隔)
|
||||
urlPatterns: /system/*,/monitor/*,/tool/* # 匹配链接
|
||||
|
||||
forest:
|
||||
max-connections: 1000 # 连接池最大连接数
|
||||
connect-timeout: 3000 # 连接超时时间,单位为毫秒
|
||||
read-timeout: 3000 # 数据读取超时时间,单位为毫秒
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<!-- mybatis-plus -->
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -74,7 +74,7 @@
|
||||
<!-- 动态数据源 -->
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
|
||||
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 阿里JSON解析器 -->
|
||||
@@ -139,9 +139,10 @@
|
||||
|
||||
<!-- servlet包 -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<groupId>jakarta.servlet</groupId>
|
||||
<artifactId>jakarta.servlet-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
@@ -173,16 +174,16 @@
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.redisson</groupId>-->
|
||||
<!-- <artifactId>redisson-spring-boot-starter</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>easyexcel-core</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
package com.fastbee.common.annotation;
|
||||
|
||||
import com.fastbee.common.utils.poi.ExcelHandlerAdapter;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import java.math.BigDecimal;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||
import com.fastbee.common.utils.poi.ExcelHandlerAdapter;
|
||||
|
||||
/**
|
||||
* 自定义导出Excel数据注解
|
||||
@@ -57,6 +56,7 @@ public @interface Excel
|
||||
/**
|
||||
* BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,12 +15,13 @@ import com.fastbee.common.utils.StringUtils;
|
||||
import com.fastbee.common.utils.sql.SqlUtil;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.bind.WebDataBinder;
|
||||
import org.springframework.web.bind.annotation.InitBinder;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.beans.PropertyEditorSupport;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package com.fastbee.common.core.domain;
|
||||
|
||||
import jakarta.validation.constraints.Max;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Max;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
|
||||
@@ -4,12 +4,14 @@ import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fastbee.common.constant.UserConstants;
|
||||
import com.fastbee.common.core.domain.entity.SysDept;
|
||||
import com.fastbee.common.core.domain.entity.SysMenu;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* Treeselect树结构实体类
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class TreeSelect implements Serializable
|
||||
@@ -22,6 +24,9 @@ public class TreeSelect implements Serializable
|
||||
/** 节点名称 */
|
||||
private String label;
|
||||
|
||||
/** 节点禁用 */
|
||||
private boolean disabled = false;
|
||||
|
||||
/** 子节点 */
|
||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||
private List<TreeSelect> children;
|
||||
@@ -35,6 +40,7 @@ public class TreeSelect implements Serializable
|
||||
{
|
||||
this.id = dept.getDeptId();
|
||||
this.label = dept.getDeptName();
|
||||
this.disabled = StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus());
|
||||
this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@@ -65,6 +71,16 @@ public class TreeSelect implements Serializable
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
public boolean isDisabled()
|
||||
{
|
||||
return disabled;
|
||||
}
|
||||
|
||||
public void setDisabled(boolean disabled)
|
||||
{
|
||||
this.disabled = disabled;
|
||||
}
|
||||
|
||||
public List<TreeSelect> getChildren()
|
||||
{
|
||||
return children;
|
||||
|
||||
@@ -2,20 +2,20 @@ package com.fastbee.common.core.domain.entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.validation.constraints.Email;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
import com.fastbee.common.core.domain.BaseEntity;
|
||||
|
||||
/**
|
||||
* 部门表 sys_dept
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@ApiModel(value = "SysDept", description = "部门表 sys_dept")
|
||||
@@ -66,7 +66,7 @@ public class SysDept extends BaseEntity
|
||||
/** 父部门名称 */
|
||||
@ApiModelProperty("父部门名称")
|
||||
private String parentName;
|
||||
|
||||
|
||||
/** 子部门 */
|
||||
@ApiModelProperty("子部门")
|
||||
private List<SysDept> children = new ArrayList<SysDept>();
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package com.fastbee.common.core.domain.entity;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
@@ -14,7 +13,7 @@ import com.fastbee.common.core.domain.BaseEntity;
|
||||
|
||||
/**
|
||||
* 字典数据表 sys_dict_data
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@ApiModel(value = "SysDictData", description = "字典数据表 sys_dict_data")
|
||||
@@ -166,7 +165,7 @@ public class SysDictData extends BaseEntity
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package com.fastbee.common.core.domain.entity;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@@ -14,7 +15,7 @@ import com.fastbee.common.core.domain.BaseEntity;
|
||||
|
||||
/**
|
||||
* 字典类型表 sys_dict_type
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@ApiModel(value = "SysDictType", description = "字典类型表 sys_dict_type")
|
||||
@@ -86,7 +87,7 @@ public class SysDictType extends BaseEntity
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
|
||||
@@ -2,9 +2,9 @@ package com.fastbee.common.core.domain.entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.fastbee.common.core.domain.entity;
|
||||
|
||||
import java.util.Set;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
import com.fastbee.common.annotation.Excel;
|
||||
@@ -15,7 +16,7 @@ import com.fastbee.common.core.domain.BaseEntity;
|
||||
|
||||
/**
|
||||
* 角色表 sys_role
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@ApiModel(value = "SysRole", description = "角色表 sys_role")
|
||||
|
||||
@@ -2,7 +2,9 @@ package com.fastbee.common.core.domain.entity;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import javax.validation.constraints.*;
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.fastbee.common.utils.DateUtils;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* OTA远程升级
|
||||
|
||||
@@ -627,7 +627,7 @@ public class RedisCache {
|
||||
public List<Object> scan(String query) {
|
||||
Set<String> keys = (Set<String>) redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
|
||||
Set<String> keysTmp = new HashSet<>();
|
||||
Cursor<byte[]> cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(query).count(1000).build());
|
||||
Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().match(query).count(1000).build());
|
||||
while (cursor.hasNext()) {
|
||||
keysTmp.add(new String(cursor.next()));
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package com.fastbee.common.core.text;
|
||||
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.math.RoundingMode;
|
||||
@@ -9,6 +7,7 @@ import java.nio.ByteBuffer;
|
||||
import java.nio.charset.Charset;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.Set;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* 类型转换器
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package com.fastbee.common.enums;
|
||||
|
||||
import com.fastbee.common.utils.DesensitizedUtil;
|
||||
|
||||
import java.util.function.Function;
|
||||
import com.fastbee.common.utils.DesensitizedUtil;
|
||||
|
||||
/**
|
||||
* 脱敏类型
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
package com.fastbee.common.filter;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.FilterConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.Filter;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.FilterConfig;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.ServletRequest;
|
||||
import jakarta.servlet.ServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.springframework.http.MediaType;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* Repeatable 过滤器
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class RepeatableFilter implements Filter
|
||||
|
||||
@@ -4,17 +4,17 @@ import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import javax.servlet.ReadListener;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
import jakarta.servlet.ReadListener;
|
||||
import jakarta.servlet.ServletInputStream;
|
||||
import jakarta.servlet.ServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequestWrapper;
|
||||
import com.fastbee.common.utils.http.HttpHelper;
|
||||
import com.fastbee.common.constant.Constants;
|
||||
|
||||
/**
|
||||
* 构建可重复读取inputStream的request
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
|
||||
|
||||
@@ -3,14 +3,14 @@ package com.fastbee.common.filter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.FilterConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.Filter;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.FilterConfig;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.ServletRequest;
|
||||
import jakarta.servlet.ServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
import com.fastbee.common.enums.HttpMethod;
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@ package com.fastbee.common.filter;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ReadListener;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
import jakarta.servlet.ReadListener;
|
||||
import jakarta.servlet.ServletInputStream;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequestWrapper;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
@@ -14,7 +14,7 @@ import com.fastbee.common.utils.html.EscapeUtil;
|
||||
|
||||
/**
|
||||
* XSS过滤处理
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
|
||||
@@ -100,7 +100,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
|
||||
|
||||
/**
|
||||
* 是否是Json请求
|
||||
*
|
||||
*
|
||||
* @param request
|
||||
*/
|
||||
public boolean isJsonRequest()
|
||||
@@ -108,4 +108,4 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
|
||||
String header = super.getHeader(HttpHeaders.CONTENT_TYPE);
|
||||
return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
package com.fastbee.common.utils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.fastbee.common.constant.CacheConstants;
|
||||
import com.fastbee.common.core.domain.entity.SysDictData;
|
||||
import com.fastbee.common.core.redis.RedisCache;
|
||||
import com.fastbee.common.utils.spring.SpringUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 字典工具类
|
||||
*
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.fastbee.common.utils;
|
||||
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
|
||||
@@ -7,12 +7,10 @@ import java.net.URLEncoder;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import cn.hutool.extra.servlet.ServletUtil;
|
||||
import jakarta.servlet.ServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpSession;
|
||||
import org.springframework.web.context.request.RequestAttributes;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
@@ -217,12 +215,4 @@ public class ServletUtils
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getClientIP() {
|
||||
HttpServletRequest request = getRequest();
|
||||
if (request == null) {
|
||||
return null;
|
||||
}
|
||||
return ServletUtil.getClientIP(request);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,10 +4,10 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import javax.validation.Validation;
|
||||
import javax.validation.Validator;
|
||||
import jakarta.validation.ConstraintViolation;
|
||||
import jakarta.validation.ConstraintViolationException;
|
||||
import jakarta.validation.Validation;
|
||||
import jakarta.validation.Validator;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.fastbee.common.utils.bean;
|
||||
|
||||
import java.util.Set;
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import javax.validation.Validator;
|
||||
import jakarta.validation.ConstraintViolation;
|
||||
import jakarta.validation.ConstraintViolationException;
|
||||
import jakarta.validation.Validator;
|
||||
|
||||
/**
|
||||
* bean对象属性验证
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class BeanValidators
|
||||
|
||||
@@ -9,8 +9,8 @@ import java.io.OutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
|
||||
@@ -24,7 +24,8 @@ import java.util.*;
|
||||
@Component
|
||||
public class TopicsUtils {
|
||||
|
||||
private Boolean enabled = true;
|
||||
@Value("${server.broker.enabled}")
|
||||
private Boolean enabled;
|
||||
|
||||
/**
|
||||
* 拼接topic
|
||||
|
||||
@@ -5,14 +5,14 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import javax.servlet.ServletRequest;
|
||||
import jakarta.servlet.ServletRequest;
|
||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* 通用http工具封装
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class HttpHelper
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package com.fastbee.common.utils.ip;
|
||||
|
||||
import com.fastbee.common.utils.ServletUtils;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import com.fastbee.common.utils.ServletUtils;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* 获取IP方法
|
||||
|
||||
@@ -30,7 +30,7 @@ import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.fastbee.common.xss;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import jakarta.validation.Constraint;
|
||||
import jakarta.validation.Payload;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
@@ -9,7 +9,7 @@ import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 自定义xss校验注解
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.fastbee.common.xss;
|
||||
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
import jakarta.validation.ConstraintValidator;
|
||||
import jakarta.validation.ConstraintValidatorContext;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<!-- 阿里数据库连接池 -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>druid-spring-boot-starter</artifactId>
|
||||
<artifactId>druid-spring-boot-3-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 验证码 -->
|
||||
@@ -66,10 +66,15 @@
|
||||
<!-- 动态数据源 -->
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
|
||||
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
|
||||
<version>${dynamic-datasource.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-jsqlparser</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -29,8 +29,8 @@ import org.springframework.stereotype.Component;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.fastbee.framework.config;
|
||||
|
||||
import java.util.TimeZone;
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -14,6 +16,7 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
||||
@Configuration
|
||||
// 表示通过aop框架暴露该代理对象,AopContext能够访问
|
||||
@EnableAspectJAutoProxy(exposeProxy = true)
|
||||
@MapperScan("com.fastbee.**.mapper")
|
||||
public class ApplicationConfig
|
||||
{
|
||||
/**
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
package com.fastbee.framework.config;
|
||||
|
||||
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
|
||||
import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties;
|
||||
import com.alibaba.druid.util.Utils;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import javax.servlet.*;
|
||||
import jakarta.servlet.Filter;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.ServletRequest;
|
||||
import jakarta.servlet.ServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
@Configuration
|
||||
@@ -30,7 +33,7 @@ public class DruidConfig {
|
||||
Filter filter = new Filter()
|
||||
{
|
||||
@Override
|
||||
public void init(javax.servlet.FilterConfig filterConfig) throws ServletException
|
||||
public void init(jakarta.servlet.FilterConfig filterConfig) throws ServletException
|
||||
{
|
||||
}
|
||||
@Override
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
package com.fastbee.framework.config;
|
||||
|
||||
import com.fastbee.common.filter.RepeatableFilter;
|
||||
import com.fastbee.common.filter.XssFilter;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import jakarta.servlet.DispatcherType;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import javax.servlet.DispatcherType;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import com.fastbee.common.filter.RepeatableFilter;
|
||||
import com.fastbee.common.filter.XssFilter;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* Filter配置
|
||||
|
||||
@@ -99,40 +99,38 @@ public class SecurityConfig
|
||||
protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception
|
||||
{
|
||||
return httpSecurity
|
||||
// CSRF禁用,因为不使用session
|
||||
.csrf(csrf -> csrf.disable())
|
||||
// 禁用HTTP响应标头
|
||||
.headers((headersCustomizer) -> {
|
||||
headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin());
|
||||
})
|
||||
// 认证失败处理类
|
||||
.exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler))
|
||||
// 基于token,所以不需要session
|
||||
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
|
||||
// 注解标记允许匿名访问的url
|
||||
.authorizeHttpRequests((requests) -> {
|
||||
permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
|
||||
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
|
||||
// 静态资源,可匿名访问
|
||||
requests.antMatchers("/login", "/register", "/captchaImage","/iot/tool/register","/iot/tool/ntp","/iot/tool/download",
|
||||
"/iot/tool/mqtt/auth","/iot/tool/mqtt/authv5","/iot/tool/mqtt/webhook","/iot/tool/mqtt/webhookv5","/auth/**/**",
|
||||
"/wechat/mobileLogin", "/wechat/miniLogin", "/wechat/wxBind/callback").permitAll()
|
||||
.antMatchers("/zlmhook/**").permitAll()
|
||||
.antMatchers("/goview/sys/login","/goview/project/getData").permitAll()
|
||||
// 静态资源,可匿名访问
|
||||
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
|
||||
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
|
||||
// 除上面外的所有请求全部需要鉴权认证
|
||||
.anyRequest().authenticated();
|
||||
})
|
||||
// 添加Logout filter
|
||||
.logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler))
|
||||
// 添加JWT filter
|
||||
.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)
|
||||
// 添加CORS filter
|
||||
.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class)
|
||||
.addFilterBefore(corsFilter, LogoutFilter.class)
|
||||
.build();
|
||||
// CSRF禁用,因为不使用session
|
||||
.csrf(csrf -> csrf.disable())
|
||||
// 禁用HTTP响应标头
|
||||
.headers((headersCustomizer) -> {
|
||||
headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin());
|
||||
})
|
||||
// 认证失败处理类
|
||||
.exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler))
|
||||
// 基于token,所以不需要session
|
||||
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
|
||||
// 注解标记允许匿名访问的url
|
||||
.authorizeHttpRequests((requests) -> {
|
||||
permitAllUrl.getUrls().forEach(url -> requests.requestMatchers(url).permitAll());
|
||||
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
|
||||
requests.requestMatchers("/login", "/register", "/captchaImage","/iot/tool/register","/iot/tool/ntp","/iot/tool/download",
|
||||
"/iot/tool/mqtt/auth","/iot/tool/mqtt/authv5","/iot/tool/mqtt/webhook","/iot/tool/mqtt/webhookv5","/auth/**/**",
|
||||
"/wechat/mobileLogin", "/wechat/miniLogin", "/wechat/wxBind/callback").permitAll()
|
||||
.requestMatchers("/zlmhook/**","/goview/sys/login","/goview/project/getData").permitAll()
|
||||
// 静态资源,可匿名访问
|
||||
.requestMatchers(HttpMethod.GET, "/", "/*.html", "/**.html", "/**.css", "/**.js", "/profile/**").permitAll()
|
||||
.requestMatchers("/swagger-ui.html", "/v3/api-docs/**", "/swagger-ui/**", "/druid/**").permitAll()
|
||||
// 除上面外的所有请求全部需要鉴权认证
|
||||
.anyRequest().authenticated();
|
||||
})
|
||||
// 添加Logout filter
|
||||
.logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler))
|
||||
// 添加JWT filter
|
||||
.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)
|
||||
// 添加CORS filter
|
||||
.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class)
|
||||
.addFilterBefore(corsFilter, LogoutFilter.class)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.fastbee.framework.config;
|
||||
import com.fastbee.common.utils.ServletUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* 服务相关配置
|
||||
|
||||
@@ -10,7 +10,7 @@ import org.springframework.web.context.request.NativeWebRequest;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
import org.springframework.web.method.support.ModelAndViewContainer;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.fastbee.framework.interceptor;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.method.HandlerMethod;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.fastbee.framework.interceptor.impl;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -19,7 +19,7 @@ import com.fastbee.framework.interceptor.RepeatSubmitInterceptor;
|
||||
/**
|
||||
* 判断请求url和数据是否和上一次相同,
|
||||
* 如果和上次相同,则是重复提交表单。 有效时间为10秒内。
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Component
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.fastbee.framework.manager;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import javax.annotation.PreDestroy;
|
||||
import jakarta.annotation.PreDestroy;
|
||||
|
||||
/**
|
||||
* 确保应用退出时能关闭后台线程
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.fastbee.framework.mybatis.config;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
|
||||
|
||||
@@ -4,9 +4,9 @@ import cn.hutool.core.net.NetUtil;
|
||||
import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
|
||||
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import com.fastbee.framework.config.SqlFilterArgumentResolver;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
@@ -18,7 +18,6 @@ import java.util.List;
|
||||
* @author admin
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@MapperScan("com.fastbee.**.mapper")
|
||||
public class MybatisPlusConfig implements WebMvcConfigurer {
|
||||
|
||||
/**
|
||||
@@ -30,13 +29,6 @@ public class MybatisPlusConfig implements WebMvcConfigurer {
|
||||
argumentResolvers.add(new SqlFilterArgumentResolver());
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||
interceptor.addInnerInterceptor(paginationInnerInterceptor());
|
||||
return interceptor;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页插件,自动识别数据库类型
|
||||
*/
|
||||
@@ -63,5 +55,22 @@ public class MybatisPlusConfig implements WebMvcConfigurer {
|
||||
public MybatisPlusMetaObjectHandler mybatisPlusMetaObjectHandler() {
|
||||
return new MybatisPlusMetaObjectHandler();
|
||||
}
|
||||
/**
|
||||
* 乐观锁插件
|
||||
*/
|
||||
public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
|
||||
return new OptimisticLockerInnerInterceptor();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||
// 数据权限处理
|
||||
// interceptor.addInnerInterceptor(dataPermissionInterceptor());
|
||||
// 分页插件
|
||||
interceptor.addInnerInterceptor(paginationInnerInterceptor());
|
||||
// 乐观锁插件
|
||||
interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
|
||||
return interceptor;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.fastbee.framework.security.filter;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
@@ -18,7 +18,7 @@ import com.fastbee.framework.web.service.TokenService;
|
||||
|
||||
/**
|
||||
* token过滤器 验证token有效性
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Component
|
||||
|
||||
@@ -2,8 +2,8 @@ package com.fastbee.framework.security.handle;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
import org.springframework.security.web.AuthenticationEntryPoint;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -15,7 +15,7 @@ import com.fastbee.common.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* 认证失败处理类 返回未授权
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Component
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
package com.fastbee.framework.security.handle;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.fastbee.common.utils.MessageUtils;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.core.Authentication;
|
||||
@@ -14,6 +12,7 @@ import com.alibaba.fastjson2.JSON;
|
||||
import com.fastbee.common.constant.Constants;
|
||||
import com.fastbee.common.core.domain.AjaxResult;
|
||||
import com.fastbee.common.core.domain.model.LoginUser;
|
||||
import com.fastbee.common.utils.MessageUtils;
|
||||
import com.fastbee.common.utils.ServletUtils;
|
||||
import com.fastbee.common.utils.StringUtils;
|
||||
import com.fastbee.framework.manager.AsyncManager;
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
package com.fastbee.framework.web.domain;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import com.fastbee.common.utils.Arith;
|
||||
import com.fastbee.common.utils.ip.IpUtils;
|
||||
import com.fastbee.framework.web.domain.server.*;
|
||||
import com.fastbee.framework.web.domain.server.Cpu;
|
||||
import com.fastbee.framework.web.domain.server.Jvm;
|
||||
import com.fastbee.framework.web.domain.server.Mem;
|
||||
import com.fastbee.framework.web.domain.server.Sys;
|
||||
import com.fastbee.framework.web.domain.server.SysFile;
|
||||
import oshi.SystemInfo;
|
||||
import oshi.hardware.CentralProcessor;
|
||||
import oshi.hardware.CentralProcessor.TickType;
|
||||
@@ -13,11 +21,6 @@ import oshi.software.os.OSFileStore;
|
||||
import oshi.software.os.OperatingSystem;
|
||||
import oshi.util.Util;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* 服务器相关信息
|
||||
*
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
package com.fastbee.framework.web.domain.server;
|
||||
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
import com.fastbee.common.utils.Arith;
|
||||
import com.fastbee.common.utils.DateUtils;
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
|
||||
/**
|
||||
* JVM相关信息
|
||||
*
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.fastbee.framework.web.domain.server;
|
||||
|
||||
|
||||
import com.fastbee.common.utils.Arith;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.fastbee.framework.web.exception;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 登录校验方法
|
||||
|
||||
@@ -1,8 +1,21 @@
|
||||
package com.fastbee.framework.web.service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.fastbee.common.core.domain.entity.SysUser;
|
||||
import com.fastbee.system.domain.SysClient;
|
||||
import com.fastbee.system.service.ISysClientService;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.stereotype.Component;
|
||||
import com.fastbee.common.constant.CacheConstants;
|
||||
import com.fastbee.common.constant.Constants;
|
||||
import com.fastbee.common.core.domain.entity.SysUser;
|
||||
import com.fastbee.common.core.domain.model.LoginUser;
|
||||
import com.fastbee.common.core.redis.RedisCache;
|
||||
import com.fastbee.common.utils.ServletUtils;
|
||||
@@ -10,24 +23,10 @@ import com.fastbee.common.utils.StringUtils;
|
||||
import com.fastbee.common.utils.ip.AddressUtils;
|
||||
import com.fastbee.common.utils.ip.IpUtils;
|
||||
import com.fastbee.common.utils.uuid.IdUtils;
|
||||
import com.fastbee.system.domain.SysClient;
|
||||
import com.fastbee.system.service.ISysClientService;
|
||||
import eu.bitwalker.useragentutils.UserAgent;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
/**
|
||||
* token验证处理
|
||||
|
||||
@@ -8,7 +8,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author gsb
|
||||
|
||||
@@ -8,7 +8,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author gsb
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user