当前位置: 首页 > news >正文

Spring Boot高级配置与自定义Starter详解

介绍

Spring Boot是一个用于简化Spring应用开发的框架,它通过提供一系列的默认配置和自动化的功能,极大地降低了项目的复杂度和开发成本。本文将深入探讨Spring Boot的高级配置和自定义Starter的实现,帮助开发者更好地理解和应用这些特性。

Spring Boot高级配置

Spring Boot配置通过application.propertiesapplication.yml文件进行,同时也支持在代码中通过@Configuration类进行配置。下面我们将逐一讲解几种常见的高级配置方法。

1. application.properties 和 application.yml
application.properties
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
application.yml
server:port: 8081spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: root
2. 配置文件的分环境管理

Spring Boot支持通过配置文件的分环境管理,例如开发环境(application-dev.properties)和生产环境(application-prod.properties)。可以在主配置文件中指定当前使用的环境:

spring.profiles.active=dev
3. 自定义配置属性

可以通过在application.propertiesapplication.yml中定义自定义的配置属性,并在代码中使用@ConfigurationProperties注解进行绑定。

配置文件
myapp.datasource.url=jdbc:mysql://localhost:3306/mydb
myapp.datasource.username=root
myapp.datasource.password=root
配置类
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "myapp.datasource")
public class MyAppDataSourceProperties {private String url;private String username;private String password;// Getters and Setters
}
自定义Spring Boot Starter

自定义Spring Boot Starter可以帮助开发者封装通用功能,使其在多个项目中复用。下面将详细介绍如何创建一个自定义Starter。

1. 创建项目结构

首先,创建一个Maven项目,并添加必要的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>
2. 创建自动配置类

自动配置类需要使用@Configuration@ConditionalOnClass等注解。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;@Configuration
@ConditionalOnClass(MyService.class)
public class MyAutoConfiguration {@Beanpublic MyService myService() {return new MyService();}
}
3. 创建一个配置属性类
import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "myapp.service")
public class MyServiceProperties {private String name = "default";// Getters and Setters
}
4. 注册配置属性类

resources/META-INF/spring.factories中添加:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.MyAutoConfiguration
5. 使用自定义Starter

将自定义Starter发布到自己的Maven仓库,并在新的Spring Boot项目中引入:

<dependency><groupId>com.example</groupId><artifactId>my-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>

application.properties中配置自定义属性:

myapp.service.name=CustomService

在Spring Boot应用中使用自定义的MyService

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@Autowiredprivate MyService myService;@GetMapping("/service-name")public String getServiceName() {return myService.getName();}
}
总结

通过本文的介绍,我们了解了Spring Boot的高级配置方法和自定义Starter的创建过程。从配置文件的使用到自动配置类的编写,再到自定义属性的绑定和注册,希望这些内容能够帮助您在实际开发中更加熟练地应用Spring Boot。通过自定义Starter,您可以将通用的功能模块化,提高代码的可复用性和维护性。

相关文章:

  • 哪个充电宝牌子好用又实惠?盘点四大平价充电宝分享
  • YOLOv10涨点改进:改进检测头(Partial_C_v10Detect)检测头结构创新,实现涨点
  • 微信小程序录音机源代码
  • 中标新领域!亚信科技+用友网络,将助力广西某市城投集团玩转“人事”
  • 【Linux】版本
  • MySQL中的一行记录是怎么存储的
  • 【QT5】<重点> QT串口编程
  • Java 和 Kotlin Lambda 表达式详解
  • vue简介实例
  • 第二十七章HTML.CSS综合案例(三)
  • react中useEffect函数的详细用法
  • Unity3D MMORPG加载背包配置表详解
  • C#中数组ProtoBuf使用问题
  • c# 二维图形绘制实践
  • 【Python高级编程】OpenCV来处理视频数据
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 11111111
  • 3.7、@ResponseBody 和 @RestController
  • Angular数据绑定机制
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript设计模式之工厂模式
  • laravel5.5 视图共享数据
  • leetcode388. Longest Absolute File Path
  • React组件设计模式(一)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue 动态创建 component
  • vue-cli在webpack的配置文件探究
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 力扣(LeetCode)22
  • 前端路由实现-history
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 赢得Docker挑战最佳实践
  • 在Mac OS X上安装 Ruby运行环境
  • k8s使用glusterfs实现动态持久化存储
  • 说说我为什么看好Spring Cloud Alibaba
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #Linux(make工具和makefile文件以及makefile语法)
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (7)STL算法之交换赋值
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转载)hibernate缓存
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .gitignore文件设置了忽略但不生效
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .net分布式压力测试工具(Beetle.DT)
  • .NET应用架构设计:原则、模式与实践 目录预览
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @PreAuthorize与@Secured注解的区别是什么?
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)