搜索 K
Appearance
Appearance
forge-ddl 默认扫描启动类所在包及其子包,无需任何额外配置。这一行为由 Spring Boot 的 AutoConfigurationPackages 决定,详见 设计文档 · 扫描根的解析。
如果实体类不在启动类同一根包,可使用 Spring Boot 自带的 @AutoConfigurationPackage 注解显式扩充:
@SpringBootApplication
@AutoConfigurationPackage(basePackages = {
"com.demo.app", // 原启动包
"com.demo.shared.model" // 额外的模型包
})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}不要试图通过 @SpringBootApplication.scanBasePackages 控制
scanBasePackages 控制的是 Spring Component 扫描范围,与 AutoConfigurationPackages 是两个独立机制。本框架走的是后者,所以只有 @AutoConfigurationPackage 或同等机制能影响扫描根。
通过 @Model.Advanced(type = ...) 声明:
| 取值 | 含义 | 阶段① 行为 |
|---|---|---|
STORE(默认) | 持久化存储模型 | ✅ 参与扫描与注册 |
TRANSIENT | 传输模型,不落库 | ⏸ 当前仍会注册,但后续阶段不为其生成 DDL |
ABSTRACT | 抽象模型,仅供继承 | ⏸ 阶段①暂不处理,需结合阶段④继承能力 |
PROXY | 代理模型 | ⏸ 阶段④ 启用 |
阶段①只承诺 STORE 模型的扫描注册结果可用,其它取值预留语义。
@Model(name = "userBase")
@Model.Advanced(type = ModelTypeEnum.ABSTRACT)
public abstract class UserBase { ... }通过 @Field.Advanced(store = false) 声明某字段不落库:
@Field
@Field.Advanced(store = false)
private transient String runtimeToken;store 默认 true。注意:Java 关键字 transient 是序列化语义,不影响本框架行为,建议两者并用以提升可读性。
| 注解 | 字段 | 优先级 |
|---|---|---|
@Model.Advanced(table = "...") | 显式表名 | 高于 camelToUnderscore(modelName) |
@Field.Advanced(column = "...") | 显式列名 | 高于 camelToUnderscore(fieldName) |
留空时走 NamingUtils.camelToUnderscore,详见 设计文档 · 命名转换。
forge-ddl 内部使用 SLF4J。常用日志器:
| Logger | 日志内容 | 推荐生产级别 |
|---|---|---|
cn.cvking.forge.ddl.runner.DdlInitializer | 扫描开始/结束、每个模型的注册详情 | INFO |
cn.cvking.forge.ddl.scanner.ClazzScanner | 类加载失败、空扫描包警告 | WARN |
cn.cvking.forge.ddl.registry.ModelRegistry | 重复注册警告 | WARN |
调试阶段可以临时把 DdlInitializer 调到 DEBUG,便于定位“为什么某个类没被扫到”等问题。
logging:
level:
cn.cvking.forge.ddl: INFOforge-ddl 本身不读取任何 application.yml 配置项。阶段②(SQL 生成)后会引入 forge.ddl.* 命名空间下的可选配置(如方言、是否自动执行、是否打印 SQL 等),届时通过 @ConfigurationProperties 暴露。