常见问题
汇总使用 ContiNew Starter 时最常见的集成、配置与运行问题及排查方法,并说明版本变更记录的查阅方式。
本页汇总集成与使用 ContiNew Starter 时的常见问题与排查思路。遇到问题建议先按本文自查,仍未解决可到 GitHub Issues 搜索或提问。
环境要求
Q:ContiNew Starter 对 JDK 和 Spring Boot 版本有什么要求?
ContiNew Starter 2.x 要求 JDK 17+、Spring Boot 3.x(本仓库源码自身以 JDK 25 构建并发布 Java 17 字节码,使用方运行时仍为 JDK 17+),自动配置基于 Spring Boot 3 的 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 机制注册。Spring Boot 2.x 项目无法直接使用 2.x 版本,请使用 1.x 历史版本或先升级 Spring Boot。
依赖与版本
Q:引入模块后报 Could not find artifact top.continew.starter:continew-starter-xxx 或版本缺失?
通常是只加了 <dependency> 却没有锁定版本。ContiNew Starter 各模块不单独写 <version>,必须由 Parent 或 BOM 统一供给,两种方式任选其一(详见快速开始):
- 将
top.continew.starter:continew-starter作为<parent>; - 或在
<dependencyManagement>中 importtop.continew.starter:continew-starter-dependencies。
排查命令:
mvn dependency:tree -Dincludes=top.continew.starter若输出中模块版本为空白或报 missing,即说明 BOM 未生效,检查 <dependencyManagement> 是否写对了 <type>pom</type> 与 <scope>import</scope>。
Q:Parent 方式与 BOM 方式能同时用吗?
不要同时使用。两者都承担「锁定 Spring Boot 与 ContiNew Starter 版本」的职责,混用容易产生版本冲突。项目已有自定义 Parent 时选 BOM 方式即可。
Q:第三方依赖(MyBatis-Plus、Sa-Token、Redisson 等)版本冲突怎么办?
各第三方依赖版本由 continew-starter-dependencies 统一托管。若项目自身或 Company BOM 中也声明了同一依赖的版本,后声明/就近声明的会生效,可能覆盖 Starter 托管的版本。用以下命令定位冲突来源:
mvn dependency:tree -Dverbose确认后在自己的 <dependencyManagement> 中显式锁定期望版本,或排除掉重复引入的一方。
自动配置与 Bean
Q:引入了某个模块,但功能没有生效?
按以下顺序排查:
-
多数自动配置默认关闭。例如跨域
CorsAutoConfiguration标注了@ConditionalOnProperty(prefix = "continew-starter.web.cors", name = "enabled", havingValue = "true"),必须显式开启:continew-starter: web: cors: enabled: true各模块的开关项详见配置参考。
-
确认依赖真的在 classpath 上:检查
mvn dependency:tree输出,排除被<optional>或<exclusions>意外排除的情况。 -
查看启动日志:自动配置初始化成功时会输出
[ContiNew Starter] - Auto Configuration '...' completed initialization.的 DEBUG 日志,可将top.continew.starter包日志级别调为debug观察。 -
条件不满足:部分自动配置带
@ConditionalOnWebApplication等条件,非 Web 环境下不会生效。
Q:自己定义了同名 Bean 后启动报 Bean 冲突?
Starter 的可覆盖 Bean 大多标注了 @ConditionalOnMissingBean,你自定义的同类型 Bean 会优先生效、自动配置自动退让。如果仍报冲突,说明该 Bean 不属于可覆盖设计,请改用 Starter 提供的扩展点(如 Jackson 模块通过 Jackson2ObjectMapperBuilderCustomizer 扩展,而非直接替换 ObjectMapper)。
Q:Spring Boot 默认时区/日期格式被改了?
json-jackson 模块通过 @PropertySource 加载了内置的 default-json-jackson.yml,默认将 spring.jackson.time-zone 设为 GMT+8、日期格式设为 yyyy-MM-dd HH:mm:ss。如需调整,在你的 application.yml 中显式配置同名项即可覆盖(应用配置优先级高于 Starter 内置默认值)。
序列化与 JSON
Q:Long 类型主键返回给前端后精度丢失(如 173...905 变成 173...900)?
这是 JS Number 精度上限(2^53)导致的经典问题。json-jackson 模块提供 spring.jackson.big-number-serialize-mode 扩展配置(JacksonExtensionProperties,前缀 spring.jackson),支持 FLEXIBLE(超范围才转字符串)、TO_STRING(统一转字符串)、NO_OPERATE(不处理)三种模式,默认为 FLEXIBLE。确认未显式改为 NO_OPERATE 即可。
社区登录(JustAuth)
Q:集成 auth-justauth 后启动报 AuthStateCache 相关的 NoSuchBeanDefinitionException?
JustAuthAutoConfiguration 中的 AuthRequestFactory 依赖 AuthStateCache Bean,默认由 JustAuthStateCacheConfiguration 提供基于本地缓存的实现;若你引入了 Redis 相关模块并自定义了缓存配置,或排除了有状态的默认实现,就会出现该 Bean 缺失。解决方式:保留默认状态缓存配置,或自行声明一个 AuthStateCache 类型的 Bean(如基于 Redis 实现)。
日志与追踪
Q:按文档引入了 trace / log 模块,但响应头没有 Trace ID?
先确认链路配置已开启并检查启动日志中是否有 Trace 相关自动配置初始化记录;再确认请求确实经过了 Web 过滤器(如被上游网关/Nginx 提前转发或过滤链被自定义 FilterRegistrationBean 打乱顺序,也可能导致头信息未写入)。具体配置项见 trace 模块文档。
配置项不生效
Q:改了 application.yml 但配置不生效?
- 检查前缀是否写对。先用配置参考确认这个键的真实前缀:自研能力用
continew-starter.<模块>(如continew-starter.web.cors.enabled,模块名层级不能简写),但对上游框架的扩展沿用对方命名空间,例如application.*、spring.task.*、spring.data.redisson.*、spring.jackson.*、mybatis-plus.extension.*、sa-token.extension.*、server.extension.*。把扩展键写成continew-starter.*时配置会被静默忽略; - YAML 缩进必须严格对齐,
enabled等布尔项不要加引号; - 多环境配置下,确认修改的是当前激活 profile 对应的文件;
- 与 Starter 内置默认值同名的项(如 Jackson 时区),需在你的
application.yml显式声明才能覆盖。
版本变更(Changelog)
各版本的新特性、修复与破坏性变更记录维护在仓库的 CHANGELOG.md 中,按版本号倒序组织,每条变更附对应的 Commit 与 PR 链接;1.x 与 2.0.0–2.12.2 的历史记录分别在 CHANGELOG_1.x.x.md、CHANGELOG_2.0.0-2.12.2.md。
查阅建议:
- 升级前:先看目标版本与你当前版本之间的所有条目,重点关注标注「破坏性变更/Breaking Change」的条目;
- 遇到行为变化:对照 Changelog 确认是否为某版本有意调整,再决定适配还是回退;
- 在线查阅:GitHub Releases 页面 与 CHANGELOG.md 内容一致,按 Tag 浏览更直观。
若上述条目未覆盖你的问题,欢迎到 GitHub Issues 提问,提问时附上 JDK/Spring Boot/ContiNew Starter 版本与最小复现配置,能更快得到答复。