news 2026/4/24 14:15:31

springboot初步1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
springboot初步1

SpringBoot 是基于 Spring 框架的快速开发脚手架,可以帮开发者更简单、高效地搭建 Java 后端项目。它把 Spring 框架里复杂的配置(比如 XML 配置、依赖管理)了可以自动配置,让你不用写一堆配置就能快速跑起一个后端服务。

一、快速入门springboot

二、配置文件

注解类:

@SpringBootConfiguration : springboot的配置

@Configuration: spring配置类

@Component: 说明这也是一个spring的组件

@EnableAutoConfiguration : 自动配置

@AutoConfigurationPackage : 自动配置包

@Import(AutoConfigurationPackages.Registrar.class) : 自动配置`包注册` @Import(AutoConfigurationImportSelector.class): 自动配置导入选择

1.YAML:数据格式

对象 (map):键值对的集合。

person: name: zhangsan 行内写法 person: {name: zhangsan}

数组:一组按次序排列的值

address: -beijing -shanghai 行内写法 address: [beijing, shanghai]

纯量:单个的、不可再分的值

msg1: 'hello \n world' # 单引忽略转义字符 msg2: "hello \n world" # 双引识别转义字符

2.yml配置

1. 服务器核心配置(项目运行的基础)

# 服务器配置 #优先级properties>yml>yaml server: port: 8082 #必须带空格,分隔符,以数据为核心有缩进 servlet: context-path: /boot
  • server.port: 8082:指定项目启动后占用的端口号(默认是 8080)。✅ 为什么要写:如果你的电脑上同时运行多个 Spring Boot 项目,8080 端口可能被占用,改个端口(比如 8082)就能避免冲突。
  • server.servlet.context-path: /boot:指定项目的访问根路径。✅ 为什么要写:默认访问路径是http://localhost:8082/,加了这个配置后,必须用http://localhost:8082/boot/才能访问项目接口,避免不同项目的接口路径冲突。
  • 注释里的 “必须带空格、有缩进”:YAML 格式的规则 —— 冒号后必须加空格,层级靠缩进(2 个空格)区分,这是 YAML 的语法要求,写错了配置会失效。

2.参数引用

3.profile配置多文档模块


多文档块(Multi-document)写法,它的核心作用是:
在同一个 application.yml 文件里,把多个环境(开发、测试、生产)的配置都写在一起,
用 --- 分隔,不用再单独创建多个配置文件。

完整优先级顺序(从高到低)
1.命令行参数(比如启动时加 --server.port=9000)
2.激活的环境块(如 prod、dev 块)
3.全局块(第一个配置块)所以现在会用8084加载

# 1. 服务端口 server: port: 8080 # 2. 数据库配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: 123456 # 3. MyBatis-Plus 或 MyBatis mybatis-plus: configuration: map-underscore-to-camel-case: true # 下划线转驼峰 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL mapper-locations: classpath:mapper/*.xml # mapper.xml路径 type-aliases-package: com.xxx.entity # 别名包 //下面选择可以不写 # 日志级别 logging: level: com.xxx.mapper: debug # 打印SQL root: info # Spring 应用名(微服务必须写,单体可选) spring: application: name: my-project # Redis 配置(有缓存就写) redis: host: localhost port: 6379 password: database: 0 # 文件上传大小限制 spring: servlet: multipart: max-file-size: 100MB max-request-size: 100MB # 分页配置(MyBatis-Plus) mybatis-plus: global-config: db-config: logic-delete-field: is_deleted # 逻辑删除字段 logic-delete-value: 1 logic-not-delete-value: 0

4.配置文件注入和参数校验

①value赋值

/** 读取单个配置值@Value一个值注入一个对象,对象少的时候用 @Value("${person.lastName}") private String lastName; 读取默认值(如果配置中没有该key,就用默认值) @Value("${person.gender:男}") private String gender; value:适合读取单个、零散的配置项 支持默认值语法:${key:默认值} 不支持复杂类型(如 Map、List、嵌套对象) 配置项变化时,需要重启项目才能生效**/

②environment赋值

/** Environment是spring核心环境抽象接口 * 全局获取配置信息,可以读取所有配置(包括系统环境变量、配置文件、命令行参数等)。 * 只需要注入一个对象就可以获取值 @Autowired private Environment env; @GetMapping("/env") public String getEnv() { // 读取配置项 String age = env.getProperty("person.age"); // 读取配置项并指定默认值 String email = env.getProperty("person.email", "default@xxx.com"); // 判断配置是否存在 boolean hasPort = env.containsProperty("server.port");**/

③@ConfigurationProperties

@Component:将当前类注册为Spring容器组件(必须) 作用:只有Spring容器中的Bean,才能被@ConfigurationProperties绑定 在主启动类添加@EnableConfigurationProperties(Person.class) @ConfigurationProperties:批量绑定配置文件属性(核心知识点)
@Component // 交给Spring管理 @ConfigurationProperties(prefix = "person")//表示属性一一注入 @PropertySource(value = {"classpath:person.properties"}) //加载指定的配置文件person.properties,@ConfigurationProperties可以从这些文件中取值,而不局限于全局配置。

④参数校验@Validated

@Validated// 开启数据校验 public class Person { // @Email:校验lastName必须为邮箱格式 @Email(message = "lastName必须是合法邮箱格式") @NotEmpty(message = "lastName不能为空") // 非空校验 private String lastName; // @Min:校验age最小值为18(核心知识点) // 作用:确保age≥18,否则启动报错 @Min(value = 18, message = "年龄不能小于18岁")

js303校验


空检查

  • @Null:验证对象是否为 null
  • @NotNull:验证对象是否不为 null,无法查检长度为 0 的字符串
  • @NotBlank:检查约束字符串是不是 Null 还有被 Trim 的长度是否大于 0,只对字符串,且会去掉前后空格
  • @NotEmpty:检查约束元素是否为 NULL 或者是 EMPTY

Boolean 检查

  • @AssertTrue:验证 Boolean 对象是否为 true
  • @AssertFalse:验证 Boolean 对象是否为 false

长度检查

  • @Size(min=, max=):验证对象(Array, Collection, Map, String)长度是否在给定的范围之内
  • @Length(min=, max=):Validates that the annotated string is between min and max included.

日期检查

  • @Past:验证 Date 和 Calendar 对象是否在当前时间之前
  • @Future:验证 Date 和 Calendar 对象是否在当前时间之后
  • @Pattern:验证 String 对象是否符合正则表达式的规则

三、内部配置加载顺序

高优先级覆盖低优先级

①内部配置加载顺序

Springboot程序启动时,会从以下位置加载配置文件:

1. file:./config/:当前项目下的/config目录下

2. file:./:当前项目的根目录

3. classpath:/config/:classpath的/config目录(resources里的config

4. classpath:/:classpath的根目录(resources根目录

加载顺序为上文的排列顺序,高优先级配置的属性会生效

②典型场景验证

假设四个位置都有application.yml,且都配置了server.port

  • file:./config/application.ymlserver.port=8081
  • file:./application.ymlserver.port=8082
  • resources:/config/application.ymlserver.port=8083
  • resources:/application.ymlserver.port=8084

✅ 最终生效端口是8081(因为file:./config/优先级最高)

③自定义配置位置

如果需要完全自定义配置文件路径,可以在启动时指定:

java -jar your-project.jar --spring.config.location=/opt/config/application.yml

这个指定的路径优先级会高于默认的四个位置

四、外部配置加载顺序

🔝 最高优先级:命令行参数

启动时通过--key=value传入的参数,优先级最高,会覆盖所有其他配置。

java -jar your-app.jar --server.port=8080 --person.name=张三

📂 外部文件配置加载顺序(从高到低)

  1. file:./config/
    • 项目根目录下的config文件夹(与 Jar 包同级)
    • 生产环境最常用,无需修改 Jar 包即可更新配置
  2. file:./
    • 项目根目录(与 Jar 包同级)
    • 适合测试环境快速验证配置
  3. classpath:/config/
    • 类路径(resources)下的config文件夹(内置配置)
    • 开发环境常用,配置随代码提交
  4. classpath:/
    • 类路径根目录(resources根目录,内置配置)
    • 默认的application.yml存放位置

五、自动配置原理

1.@EnableAutoConfiguration

// 表示这是一个配置类 @Configuration(proxyBeanMethods = false) //自动配置属性:HttpProperties @EnableConfigurationProperties(HttpProperties.class) //spring的底层注解:根据不同条件,判断当前配置或者类是否生效 @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) @ConditionalOnClass(CharacterEncodingFilter.class) @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true) public class HttpEncodingAutoConfiguration { private final HttpProperties.Encoding properties; public HttpEncodingAutoConfiguration(HttpProperties properties) { this.properties = properties.getEncoding(); } }

自动配置类上的@ConditionalOnXXX系列注解会检查条件是否满足:

  • @ConditionalOnClass:类路径下存在指定类时生效。
  • @ConditionalOnMissingBean:容器中不存在指定 Bean 时生效。
  • @ConditionalOnProperty:配置文件中存在指定属性时生效。

2. 自定义配置:覆盖默认行为

自动配置并非不可修改,你可以通过以下方式自定义:

①配置文件修改

application.yml中配置自动配置类对应的属性,比如修改 HTTP 编码:

spring: http: encoding: charset: UTF-8 force: true

这些配置会绑定到HttpProperties类,从而修改自动配置的行为。

②手动注册 Bean 覆盖自动配置

如果容器中存在你手动注册的 Bean,自动配置会优先使用你的 Bean(因为多数自动配置类有@ConditionalOnMissingBean注解)。

@Configuration public class MyWebConfig { @Bean public CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); filter.setForceEncoding(true); return filter; } }

这个自定义的CharacterEncodingFilter会覆盖自动配置的默认过滤器。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 14:11:42

企业级实战:如何将EasyOCR完整打包,迁移到内网/离线服务器上运行?

企业级离线OCR部署指南:从依赖打包到模型迁移的全链路实践 当财务部门需要批量处理上千张供应商发票,或是法务团队要审核堆积如山的合同扫描件时,光学字符识别(OCR)技术就成了企业数字化转型中的关键一环。但对于金融、…

作者头像 李华