# abacus.base.demo

是前后端分离的基于 Spring Boot 的基础项目，作为使用 agent 应用开发前后端项目的**基础模板**。本项目自身不包含业务 Java 代码，业务能力由 abacus 框架（`abacus.config`、`abacus.commons`、`abacus.fundation`、`abacus.business.service` 等）提供，开发者/agent 在本模板上添加业务模块即可。



## 技术栈

| 项 | 说明 |
| --- | --- |
| 构建 | Maven，父工程 `abacus.framework:abacus.springcloud.pom:1.5.0` |
| 框架 | Spring Boot + abacus 系列框架（配置、通用、基础、业务服务） |
| 注册/配置中心 | Nacos（见 `bootstrap.yml`） |
| 数据库 | MySQL / SQL Server / Oracle / 达梦，Druid 连接池 + JPA |
| 定时任务 | XXL-JOB（`application-xxljob.yml`） |
| 消息队列 | Kafka |
| 接口文档 | springdoc（OpenAPI） |
| 监控 | Spring Actuator + Prometheus |

## 目录结构

```
abacus.base.demo/
├── pom.xml                        # Maven 构建配置：依赖、多环境 profile(dev/test/prod)、打包插件
├── assembly.xml                   # Maven 发布包(zip)打包规则：jar + doc + sql + html
├── .project / .classpath          # Eclipse IDE 工程配置（Java + Maven 项目）
├── .settings/                     # Eclipse 偏好配置（编码、JDK、m2e）
├── src/
│   └── main/
│       ├── java/                  # 【业务代码目录】Java 源码（当前为空，新增业务代码放这里）
│       ├── resources/
│       │   ├── config/
│       │   │   ├── dev/           # dev 环境配置（Maven profile 默认激活）
│       │   │   │   ├── application.yml          # 主配置：端口、数据源、JPA、Druid、Kafka、springdoc、abacus 扫描路径等
│       │   │   │   ├── bootstrap.yml            # 启动引导配置：应用名、Nacos 注册中心/配置中心
│       │   │   │   ├── application-xxljob.yml   # XXL-JOB 调度中心与执行器配置
│       │   │   │   ├── logback-spring.xml       # 应用日志配置
│       │   │   │   └── logback-access.xml       # 访问日志配置
│       │   │   ├── test/          # test 环境配置（与 dev 文件同名同结构）
│       │   │   └── prod/          # prod 环境配置（与 dev 文件同名同结构）
│       │   ├── doc/
│       │   │   └── 升级日志.md     # 版本升级日志，按版本记录更新说明
│       │   ├── sql/
│       │   │   ├── table/
│       │   │   │   ├── mysql.sql         # MySQL 建表 DDL（示例表 example_category）
│       │   │   │   └── sqlserver.sql     # SQL Server 建表 DDL（与 mysql.sql 对应）
│       │   │   ├── data/
│       │   │   │   └── sqlserver.sql     # 初始化数据（acas 子系统/菜单/模块注册）
│       │   │   └── upgrade.xml           # 数据库版本升级 SQL 配置（按版本号执行，支持多库语法翻译）
│       │   ├── vue/              # 【Vue 项目源码目录】存放 vue 项目，映射过来的，前后端分离（当前为空）
│       │   └── html/             # 【前端构建产物目录】存放 vue 项目编译后的 html 等静态资源（当前为空，由 assembly.xml 打入发布包）
│       └── (META-INF)            # 若存在，会按 pom.xml 配置打入发布包
└── target/                       # Maven 构建输出目录（编译产物、打包 zip，可忽略/删除）
```

## 关键配置说明（agent 开发时必须了解）

### 1. pom.xml
- 多环境 profile：`dev`（默认）/ `test` / `prod`，通过 `-P` 指定，决定加载 `src/main/resources/config/<env>/` 下的配置。
- 打包资源：仅打包 `META-INF`、当前环境 config 目录、`sql/**` 到 jar 内；`doc`、`sql`、`html` 通过 `assembly.xml` 额外打入 zip 发布包。
- 发布包：`mvn package` 生成 `${artifactId}-${version}-bin.zip`（含 jar + doc + sql + html）。

### 2. application.yml（以 dev 为例，三个环境结构一致）
- `server.port`：服务端口（示例 9003）。
- `spring.datasource`：Druid 数据源；`enableMultiSource` 可开启多数据源（`multidb0~multidb9` 预设 10 个），含 `defaultDB` 默认库、`readDB` 读库、`dynamicRelation` 业务路由配置。
- `spring.jpa`：JPA/Hibernate 配置，命名策略使用框架的 `LowercaseNamingStrategyStandardImpl`。
- `spring.kafka`：Kafka 生产/消费配置。
- `springdoc.packages-to-scan`：在线接口文档扫描的包路径。
- `abacus.controllerPackages` / `abacus.entitypackages`：**框架扫描 Controller 与实体的包路径，新增业务代码必须将包名加入此配置**（示例包前缀 `abacus.springboot.example`）。
- `abacus.responseExcludePath`：不被统一响应体包装器拦截的 URI。
- `management.endpoints.web.base-path`：Actuator 端点基础路径（`/services/actuator`）。

### 3. bootstrap.yml
- `spring.application.name`：应用名（示例 `example`），Nacos 中需唯一。
- `spring.cloud.nacos`：Nacos 服务地址、账号、命名空间；通过 `extension-configs` 引入公共配置（`abacus-discovery.yml`、`abacus-acas.yml`、`abacus-redis.yml` 等）。

### 4. sql/ 目录
- `table/`：建表 DDL，按数据库分文件（mysql.sql / sqlserver.sql），新建业务表需同步维护两个文件。
- `data/`：初始化数据（子系统、菜单、模块注册，依赖 acas 框架）。
- `upgrade.xml`：版本化升级 SQL，`<upgrade version="yyyy-MM-dd[.count]">` 按版本升序执行；`translator="true"` 时以 SQL Server 语法编写，由框架翻译到各数据库。

## 给 agent 的开发约定

1. **新增 Java 代码**：放入 `src/main/java`，包名建议以 `abacus.springboot.应用名.*` 为前缀（保持框架扫描配置一致，或同步修改 `application.yml` 中 `abacus.controllerPackages` / `springdoc.packages-to-scan` / `abacus.entitypackages`）。
2. **新增前端 Vue 项目**：Vue 源码放在 `src/main/resources/vue/`，构建（编译）产物输出到 `src/main/resources/html/`，由 `assembly.xml` 自动打入发布包。
3. **新增配置项**：优先写入 `src/main/resources/config/<env>/application.yml` 对应环境，环境间保持字段一致。
4. **数据库变更**：建表写 `sql/table/`，历史变更写 `sql/upgrade.xml`，初始化数据写 `sql/data/`。
5. **文档与日志**：功能更新记录到 `src/main/resources/doc/升级日志.md`。
6. **打包产物**：`target/` 目录为构建输出，无需维护；发布包为 `target/*-bin.zip`。
7. **多环境配置**：修改配置时需同步 `dev` / `test` / `prod` 三个目录（或按需仅改某环境）。
8. **pom.xml**：`<artifactId></artifactId>`建议以`abacus.springboot.应用名`设置









