中文 &nbsp; | &nbsp; [English](./README.md)
<p align="center"><img src="https://s3.ax1x.com/2021/01/16/srNEa6.png" height="200" alt="logo"/></p>
<h1 align="center"> Jiscuss </h1>
<h3 align="center">基于java的简单论坛系统，Jiscuss = Java + Discuss。</h3>

---

<p align="center">
    <a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue" alt="License MIT"></a>
</p>

<p align="center">
    <a href="https://github.com/chuyaoyuan/Jiscuss">Github 仓库</a> &nbsp; | &nbsp; 
    <a href="https://gitee.com/chuyaoyuan/Jiscuss">Gitee 仓库</a> &nbsp; | &nbsp; 
    <a href="http://demo.jiscuss.com/" target="_blank">在线体验</a>
</p>




# 预览
[![sykhy4.md.png](https://s3.ax1x.com/2021/01/17/sykhy4.md.png)](https://imgchr.com/i/sykhy4)


# 简介
基于JAVA，使用SpringBoot + H2 Database + Semantic-UI + Freemarker 构建，官网：[[www.jiscuss.com]](http://www.jiscuss.com/)

# 在线体验

-   [[DEMO地址]](http://demo.jiscuss.com/)

# 部署
## [一]、开发环境配置

```
// 需jdk 1.8以上，maven3以上。
```

## [二]、下载代码

```
// Github - https://gitee.com/chuyaoyuan/Jiscuss.git
// Gitee - https://github.com/Chuyaoyuan/Jiscuss.git
```


## [三]、运行启动(默认使用H2数据库，可以在配置文件切换MYSQL)

```
// 1、代码导入IDE


// 2、启动服务


// 4、访问地址
http://localhost
```

> 说明：以上为原始快速启动说明。当前升级后的 v2.0 分支已迁移到 Spring Boot 3，推荐使用 JDK 17 运行；旧版本中的 JDK 1.8 说明仅适用于早期分支。


## 当前升级版本说明

当前代码已完成 Spring Boot 3 兼容升级，主要技术栈如下：

- Java 17
- Spring Boot 3.3.5
- Spring Security 6
- Spring Data JPA / Hibernate 6
- FreeMarker
- H2 Database（开发环境默认）
- MySQL 8（生产/外部数据库环境）
- Flyway（数据库版本迁移）
- SpringDoc OpenAPI（替代 Springfox Swagger）
- Ehcache 3 + JCache
- Druid Spring Boot 3 Starter
- MapStruct


## 环境要求

- JDK：17+
- Maven：3.8+
- MySQL：8.x（仅 mysql profile 需要）

检查本地环境：

```
java -version
javac -version
mvn -version
```


## 构建与启动

### 使用默认 H2 开发环境

项目默认激活 `h2` profile：

```
mvn spring-boot:run
```

访问：

```
http://localhost
```

如果本机 Linux 普通用户无法绑定 80 端口，可以临时指定其他端口：

```
mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8080"
```

然后访问：

```
http://localhost:8080
```


### 使用 MySQL 环境

1. 创建数据库：

```
CREATE DATABASE jiscuss DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

2. 修改配置文件：

```
src/main/resources/application-mysql.yml
```

根据实际环境修改：

- `spring.datasource.url`
- `spring.datasource.username`
- `spring.datasource.password`

3. 启动 mysql profile：

```
mvn spring-boot:run -Dspring-boot.run.profiles=mysql
```


## 数据库迁移说明

项目已使用 Flyway 接管数据库初始化和后续变更，迁移脚本位于：

```
src/main/resources/db/migration/
```

当前迁移文件：

- `V1__init_schema.sql`：初始化表结构和基础数据
- `V2__security_updates.sql`：安全相关字段/数据升级

注意：旧的 `schema.sql` 和 `data.sql` 已不再使用，避免与 Flyway 重复初始化。


## 安全与管理端点

- 登录认证已迁移到 Spring Security 6 配置方式。
- `/admin/**`、`/actuator/**`、`/druid/**` 需要管理员角色访问。
- H2 Console 默认关闭；如需开发调试，可显式开启：

```
mvn spring-boot:run -Dspring-boot.run.arguments="--spring.h2.console.enabled=true"
```

- OpenAPI 文档地址：

```
http://localhost/swagger-ui.html
http://localhost/v3/api-docs
```


## 网络不佳时的构建建议

如果依赖已经下载到本地 Maven 仓库，可以使用离线模式：

```
mvn -o -DskipTests compile
```

如果首次构建尚未下载 Spring Boot 3.3.5 等依赖，离线模式会失败，需要在网络可用时先执行一次：

```
mvn -DskipTests compile
```

国内网络环境可配置 Maven 镜像源后再构建。依赖下载完成后，后续即可使用 `mvn -o` 离线构建。


## 常用检查命令

编译检查：

```
mvn -DskipTests compile
```

打包：

```
mvn -DskipTests package
```

运行 jar：

```
java -jar target/jiscuss-0.0.1-SNAPSHOT.jar
```


## 升级注意事项

- Spring Boot 3 使用 `jakarta.*` 命名空间，旧的 `javax.servlet`、`javax.persistence`、`javax.validation` 不再使用。
- Hibernate 6 可自动识别数据库方言，配置中无需手动指定 `database-platform`。
- MySQL 连接已移除不推荐的 `autoReconnect=true`。
- JSON 响应优先使用 Spring MVC + Jackson 自动序列化，不再依赖 `org.json`。
- WebSocket starter 已移除；如后续确实需要实时通信，再按功能重新引入。


## [四]、开源协议

[MIT](https://opensource.org/licenses/MIT)



