ContiNew

配置约定

ContiNew Starter 的配置前缀约定、自动配置注册机制、条件装配与覆盖默认 Bean 的方式。

本文是 2.x 的归档文档(冻结于 v2.17.0)。该分支只接收勘误修正, 内容基本不再变动;文中的源码路径、配置项与版本号均以 2.17.x 为准,不建议用于新项目。

新项目请查看 3.x 最新文档。已在 2.17.x 上运行的项目,本文仍是可靠依据。

本页只讲三件事:配置键的前缀怎么定、自动配置怎么被 Spring Boot 发现、想改默认行为时从哪下手。各模块的具体配置项与默认值见配置参考,不在这里罗列。

配置前缀

自研能力统一使用 continew-starter 前缀,格式为 continew-starter.<module>[.<sub-feature>],每个前缀常量定义在 continew-starter-core 的 PropertiesConstants 类中。

continew-starter:
  web:
    cors:
      enabled: true          # continew-starter.web.cors
  encrypt:
    field:
      enabled: true          # continew-starter.encrypt.field

这条约定只覆盖 Starter 自己定义的配置。对上游框架的扩展会沿用对方的命名空间,不要写成 continew-starter.*:

场景实际前缀例子
应用信息applicationapplication.name、application.url
线程池扩展spring.taskspring.task.execution.rejected-policy
异步/调度线程池开关spring.taskspring.task.execution.extension.enabled
Redis 客户端spring.data.redissonspring.data.redisson.mode
邮件spring.mailspring.mail.host
ORM 扩展mybatis-plus.extension / mybatis-flex.extensionmybatis-plus.extension.enabled
鉴权扩展sa-token.extensionsa-token.extension.dao.type
服务器增强server.extensionserver.extension.disallowed-methods

判断某个键该用哪个前缀,直接看它绑定的是哪个 @ConfigurationProperties 类;拿不准时查配置参考,它按前缀分组列出全部真实存在的键。

多数配置项都有合理默认值,引入模块后零配置即可用;只有默认关闭的能力(如跨域)或要改默认行为时才需要显式配置。

自动配置机制

每个 Starter 模块通过 Spring Boot 3 的 AutoConfiguration.imports 机制注册自动配置(不是旧版 spring.factories),文件位于各模块:

src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

引入依赖后自动配置即生效,无需手写 @Configuration。要排除某个自动配置,用 Spring Boot 的 spring.autoconfigure.exclude,填注册表中真实存在的类名,而不是想当然的模块名。以 Web 模块为例,AutoConfiguration.imports 里注册的是:

top.continew.starter.web.autoconfigure.mvc.WebMvcAutoConfiguration
top.continew.starter.web.autoconfigure.cors.CorsAutoConfiguration
top.continew.starter.web.autoconfigure.server.UndertowAutoConfiguration
spring:
  autoconfigure:
    exclude: top.continew.starter.web.autoconfigure.cors.CorsAutoConfiguration

排除前先确认目标类确实在该模块的 AutoConfiguration.imports 文件中;填了不存在的类名时 Spring Boot 会按无效排除处理,达不到禁用效果。

条件化装配

多数自动配置类带 @ConditionalOnProperty,只有设置了对应属性(通常是 enabled: true)才装配 Bean。默认开关因模块而异,例如 continew-starter.web.cors.enabled 默认 false、continew-starter.trace.enabled 默认 false、continew-starter.log.enabled 默认 true。是否默认启用以各模块文档与配置参考为准,不要凭经验推断。

覆盖默认 Bean

多数模块的关键 Bean 标注了 @ConditionalOnMissingBean,声明同类型 Bean 即可覆盖默认实现。

@Configuration
public class CustomConfig {

    @Bean
    public MyService myService() {
        // 将覆盖 Starter 的默认 Bean
        return new MyServiceImpl();
    }
}

少数模块按 Bean 名精确装配(例如部分缓存服务),此时需要按文档要求指定 Bean 名,只声明同类型 Bean 不会被注入。这类约束在各模块页中单独说明。

下一步

目录