SpringBoot 第一课(Ⅲ) 配置类注解
目录
一、@PropertySource
二、@ImportResource
①SpringConfig (Spring框架全注解)
②@ImportResource注解实现
三、@Bean
四、多配置文件
多Profile文件的使用
文件命名约定:
激活Profile:
YAML文件支持多文档块:
五、配置加载位置优先级
对于SpringBoot项目来说,有3种常用来绑定指定配置文件的注解:@PropertySource,@ImportResource和@Bean。
想看默认配置绑定看这篇:SpringBoot 第一课(Ⅱ)配置文件注入-CSDN博客文章浏览阅读500次,点赞7次,收藏14次。需要为每个属性单独指定,适用于简单的配置或单个属性的注入。属性上,Spring Boot 会处理这种命名风格的差异。使用@ConfigurationProperties注入。),而松散绑定支持这三种名字互通,就比如配置文件里的。允许一次性注入整个对象,适用于复杂的配置结构。Java中常见命名规则有驼峰命名法(实现上面操作后,就可以通过访问“使用注解时,在处理复杂情况时,
https://blog.csdn.net/m0_74977981/article/details/146282864?spm=1001.2014.3001.5501
一、@PropertySource
配置文件

在里面编写:
student1.name=admin
student1.age=20
student1.id=1
Java实体类
package com.qcby.entity1;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Component
@PropertySource(value="classpath:student1.properties")
@ConfigurationProperties(prefix="student1")
public class Student1 {private String name;private int age;private int id;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}@Overridepublic String toString() {return "Student1{" +"name='" + name + '\'' +", age=" + age +", id=" + id +'}';}
}
现在我们需要测试这个类:
在test路径下测试:

注意这里SpringBoot项目在创建时会自动生成这么一个test类(如下):

为了方便查看,我们再在它旁边创建一个StudentTest类:
package com.qcby.sbdemotest01;import com.qcby.entity1.Student1;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;/*** 从Spring Boot 2.2版本开始,@SpringBootTest 已经包含了 SpringRunner 的功能,* 因此在大多数情况下,工程师不再需要显式地使用 @RunWith(SpringRunner.class)。*/
//@RunWith(SpringRunner.class)
//我用的是2.7.0,所以不用显式这一行【我在这里显式加上它的话,日志会报错警告(虽然能用吧)】(但是要知道有这么一个注释)
@SpringBootTest
public class StudentTest {@AutowiredStudent1 student1;@Testvoid contextLoads() {System.out.println(student1);}}
得到结果:

注意: 在Spring中,
classpath是一个特殊的路径前缀,在SpringBoot项目中,默认代表的根目录一般是src/main/resources。①规范情况
即假设一个项目的目录结构是:
src/ ├── main/ │ ├── java/ │ │ └── com/example/Student1.java │ └── resources/ │ ├── student1.properties │ └── beans.xml那么会在实体类中这么书写:
@PropertySource("classpath:config.properties")②嵌套子目录
src/ ├── main/ │ ├── java/ │ │ └── com/example/Student1.java │ └── resources/ │ └── config/ │ ├── student1.properties │ └── beans.xml此时在实体类中定义时,就要加上目录路径前缀:
@PropertySource("classpath:config/config.properties")不只是@PropertySource,其他用到
classpath的地方同样遵循这个准则。
二、@ImportResource
在讲@ImportResource这里时,结合Spring框架全注解实现配置一起。
详文参照:Spring(二)---基于注解的方式实现Bean管理和注入属性_有没有注解可以实现bean动态注入,配置项打开注入,关闭则剔除-CSDN博客文章浏览阅读488次,点赞9次,收藏6次。①:注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...)②:使用注解,注解作用在类上面,方法上面,属性上边③:使用注解的目的:简化XML配置。_有没有注解可以实现bean动态注入,配置项打开注入,关闭则剔除
https://blog.csdn.net/m0_74977981/article/details/144626708?spm=1001.2014.3001.5501
①SpringConfig (Spring框架全注解)
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;@Configuration
@ComponentScan(value = "com.qcby")
public class SpringConfig {
}
-
@Configuration注解:标识这是一个配置类,Spring容器会扫描这个类中定义的Bean。 -
@ComponentScan注解:指定Spring容器扫描的包。在这个例子中,Spring容器会扫描com.qcby包及其子包中的所有Spring组件(如@Component,@Service,@Repository等),并将它们注册为Spring容器中的Bean。
这种方式是基于Java的配置,它允许项目通过Java代码来定义Spring容器的配置(并且是范围性的)。
②@ImportResource注解实现
配置类
@Configuration
@ImportResource("classpath:applicationContext.xml")
public class AppConfig {// 配置类中的其他配置
}
resources路径下的:applicationContext.xml
<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- <context:component-scan base-package="com.qcby" /> --><!-- 扫描可以选择范围扫描或是逐一注入 --><!-- 逐一声明Bean --><bean id="myBean" class="com.qcby.MyBean" />
</beans>
@Configuration注解:同样标识这是一个配置类。-
@ImportResource注解:用于导入一个XML配置文件。在这个例子中,它导入了类路径下的applicationContext.xml文件。这种方式允许你将配置信息放在XML文件中,而不是Java代码中。
三、@Bean
在Spring Boot中,推荐使用全注解的方式来配置和添加组件到Spring容器中。这种方式不仅代码更简洁,而且易于维护和理解。下面我将详细解释如何使用 @Configuration 和 @Bean 注解来实现这一过程。
接口
package com.qcby.service;public interface HelloService {void sayHello();
}
Java实现类
package com.qcby.service;import org.springframework.stereotype.Service;@Service
public class SimpleHelloService implements HelloService {@Overridepublic void sayHello() {System.out.println("Hello, Spring Boot!");}
}
在这个例子中,SimpleHelloService 类被标记为 @Service,这表示它是一个服务层组件,Spring会自动将其注册为一个Bean。
MyAppConfig类:
我们创建一个配置类 MyAppConfig,并在其中使用 @Bean 注解来声明一个Bean。
package com.qcby.service;import com.qcby.service.HelloService;
import com.qcby.service.SimpleHelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;@Configuration
public class MyAppConfig {@Bean@Primary // 指定为首选beanpublic HelloService helloService02() {System.out.println("配置类@Bean给容器中添加组件了...");return new SimpleHelloService();}
}
在这个配置类中,我们使用 @Bean 注解声明了一个 HelloService 类型的Bean。这意味着Spring容器将创建一个 SimpleHelloService 实例,并将其注册为 HelloService 类型的Bean。
创建Test类确认是否调用正确:
package com.qcby.sbdemotest01;import com.qcby.service.HelloService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class HelloServiceTest {@Autowiredprivate HelloService helloService;@Testvoid contextLoads() {helloService.sayHello();}}
得到结果:

四、多配置文件
Spring Boot 支持多环境配置,允许为不同的环境(如开发、测试、生产等)创建不同的配置文件。这是通过使用不同的配置文件来实现的,这些文件可以是 .properties 格式或 .yml。
多Profile文件的使用
文件命名约定:
对于 .properties 文件,可以使用 application-{profile}.properties 来命名不同的配置文件。例如:
-
application-dev.properties:开发环境的配置文件。 -
application-test.properties:测试环境的配置文件。 -
application-prod.properties:生产环境的配置文件。
默认情况下,如果没有指定环境,Spring Boot 会使用 application.properties 文件。
激活Profile:
可以通过多种方式激活特定的Profile:
-
在启动应用时,通过命令行参数指定:
java -jar your-application.jar --spring.profiles.active=dev 【终端】 -
在
application.properties或application.yml文件中指定:spring.profiles.active=dev【配置文件中】 -
在环境变量中设置:
export SPRING_PROFILES_ACTIVE=dev(Linux/Mac)或set SPRING_PROFILES_ACTIVE=dev(Windows)【操作系统级别】
YAML文件支持多文档块:
YAML文件支持多文档块方式,这意味着可以在一个YAML文件中定义多个配置块,每个块对应一个Profile。例如:
spring:profiles: devapplication:name: MyApplication---
spring:profiles: testapplication:name: MyTestApplication---
spring:profiles: prodapplication:name: MyProductionApplication
在这个例子中,我们定义了三个配置块,每个块对应一个不同的Profile(开发、测试、生产)。Spring Boot会根据激活的Profile加载相应的配置块。
五、配置加载位置优先级
Spring Boot在启动时会按照一定的顺序扫描并加载配置文件,这些配置文件的位置和优先级如下:
-
file:./config/:项目根目录下的config文件夹中。 -
file:./:项目根目录中。 -
classpath:/config/:类路径下的config文件夹中。 -
classpath:/:类路径根目录中。
Spring Boot会从这四个位置加载application.properties或application.yml文件作为默认配置文件,优先级由高到低,高优先级的配置会覆盖低优先级的配置。这意味着如果同一配置项在多个文件中出现,那么优先级高的文件中的配置将被使用。
/myproject
/src
/main
/java
/com
/yourcompany
/YourApplication.java
/resources
application.properties
/config
application.properties
application.properties
即:

相关文章:
SpringBoot 第一课(Ⅲ) 配置类注解
目录 一、PropertySource 二、ImportResource ①SpringConfig (Spring框架全注解) ②ImportResource注解实现 三、Bean 四、多配置文件 多Profile文件的使用 文件命名约定: 激活Profile: YAML文件支持多文档块ÿ…...
Python的类和对象(4)
1、反射 动态的给类和对象添加属性,获取属性,删除属性,修改属性【反射】。 --4个内置函数 1)设置属性:setattr( 对象/类,属性名,属性值) 2)获取属性:getattr(对象/类&am…...
使用EasyExcel进行简单的导入、导出
准备 在pom.xml添加依赖 <!-- EasyExcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>导入 controller // 用户导入Operation(summary…...
Excel(函数篇):COUNTIF与CONUTIFS函数、SUMIF与SUMIFS函数、ROUND函数、MATCH与INDEX函数、混合引用与条件格式
目录 COUNTIF和COUNTIFS函数COUNTIF函数COUNTIFS函数SUMIF和SUMIFS函数SUMIF函数SUMIFS函数SUMIFS函数与控件实现动态年月汇总ROUND、ROUNDUP、ROUNDDOWN函数单元格混合引用条件格式与公式,标记整行数据MATCH和INDEX函数COUNTIF和COUNTIFS函数 COUNTIF函数 统计下“苏州”出现…...
虚拟定位 1.2.0.2 | 虚拟定位,上班打卡,校园跑步模拟
Fake Location是一款运行于安卓平台上的功能强大、简单实用的虚拟定位软件。它能够帮助用户自定义位置到地图上的任意地方,以ROOT环境运行不易被检测,同时也支持免ROOT运行。提供路线模拟、步频模拟、WIFI模拟等方式,支持反检测。 大小&…...
【最大异或和——可持久化Trie】
题目 代码 #include <bits/stdc.h> using namespace std;const int N 6e510; //注意这里起始有3e5,又可能插入3e5 const int M N * 25;int rt[N], tr[M][2]; //根,trie int idx, cnt, br[M]; //根分配器,点分配器,点的相…...
C# WPF编程-启动新窗口
C# WPF编程-启动新窗口 新建窗口: 工程》添加》窗口 命名并添加新的窗口 这里窗口名称为Window1.xaml 启动新窗口 Window1 win1 new Window1(); win1.Show(); // 非模态启动窗口win1.ShowDialog(); // 模态启动窗口 模态窗口:当一个模态窗口被打开时&a…...
数据库:MySQL 指令大全(备忘清单)
文章目录 入门介绍登录MySQL常用的数据库 Database表 TableProccess 查看 MySQL 信息退出MySQL会话备份 MySQL 示例管理表格从表中查询数据从多个表查询使用 SQL 约束修改数据管理视图管理触发器WHENEVENTTRIGGER_TYPE 管理索引 MySQL 数据类型StringsDate & timeNumeric 函…...
NET进行CAD二次开发之二
本文主要针对CAD 二次开发入门与实践:以 C# 为例_c# cad-CSDN博客的一些实践问题做一些补充。 一、DLL介绍 在 AutoCAD 中,accoremgd.dll、acdbmgd.dll 和 acmgd.dll 都是与.NET API 相关的动态链接库,它们在使用.NET 语言(如 C#、VB.NET)进行 AutoCAD 二次开发时起着关…...
Python 实现大文件的高并发下载
项目背景 基于一个 scrapy-redis 搭建的分布式系统,所有item都通过重写 pipeline 存储到 redis 的 list 中。这里我通过代码演示如何基于线程池 协程实现对 item 的中文件下载。 Item 结构 目的是为了下载 item 中 attachments 保存的附件内容。 {"crawl_tim…...
【最新】 ubuntu24安装 1panel 保姆级教程
系统:ubuntu24.04.1 安装软件 :1panel 第一步:更新系统 sudo apt update sudo apt upgrade 如下图 第二步:安装1panel,运行如下命令 curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o …...
c++图论(二)之图的存储图解
在 C 中实现图的存储时,常用的方法包括 邻接矩阵(Adjacency Matrix)、邻接表(Adjacency List) 和 边列表(Edge List)。以下是具体实现方法、优缺点分析及代码示例: 1. 邻接矩阵&…...
c++图论(一)之图论的起源和图的概念
C 图论之图论的起源和图的概念 图论(Graph Theory)是数学和计算机科学中的一个重要分支,其起源可以追溯到 18 世纪 的经典问题。以下是图论的历史背景、核心起源问题及其与基本概念和用途: 借用一下CSDN的图片哈 一、图论的起源&…...
《Python深度学习》第二讲:深度学习的数学基础
本讲来聊聊深度学习的数学基础。 深度学习听起来很厉害,其实它背后是一些很有趣的数学原理。本讲会用简单的方式解释这些原理,还会用一些具体的例子来帮助你理解。 2.1 初识神经网络 先从一个简单的任务开始:识别手写数字。 想象一下,你有一堆手写数字的图片,你想让计算…...
ChatGPT and Claude国内使用站点
RawChat kelaode chatgptplus chatopens(4.o mini免费,plus收费) 网页: 定价: wildcard 网页: 虚拟卡定价: 2233.ai 网页: 定价: MaynorAPI chatgpt cla…...
进行性核上性麻痹:精心护理,点亮希望之光
进行性核上性麻痹是一种罕见的神经退行性疾病,严重影响患者的生活质量。有效的健康护理能够在一定程度上缓解症状、延缓病情发展,给患者带来更好的生活体验。 在日常生活护理方面,由于患者平衡能力逐渐下降,行动不便,居…...
ZED X系列双目3D相机的耐用性与创新设计解析
在工业自动化和学术研究领域,高精度的视觉设备正成为提升效率和质量的关键。ZED X系列AI立体相机,凭借其先进的技术和耐用的设计,为这一领域带来了新的可能。 核心技术:深度感知与精准追踪 ZED X系列的核心技术之一是Neural Dept…...
HarmonyOS三层架构实战
目录: 1、三层架构项目结构1.0、三层架构简介1.1、 common层(主要放一些公共的资源等)1.2、 features层(主要模块定义的组件以及图片等静态资源)1.3、 products层(主要放主页面层和一些主要的资源ÿ…...
计算机四级 - 数据库原理 - 第4章 「关系数据库标准语言SQL」
4.1 SQL概述 4.1.1 结构化查询语言SQL SQL(Structured Query Language)称为结构化查询语言,它是由1974年由Boyce和Chamberi提出的,1975年至1979年IBM公司的San Jose Research Laboratory研制了关系数据库管理系统的原型系统System R,并实现了这种语198…...
基于PMU的14节点、30节点电力系统状态估计MATLAB程序
“电气仔推送”获得资料(专享优惠) 程序简介: 程序采用三种方法对14节点和30节点电力系统状态进行评估: ①PMU同步向量测量单元结合加权最小二乘法(WLS)分析电力系统的电压幅值和相角状态; …...
JS超过Number的最大值
场景:用户输入(这个可以通过前端限制输入长度控制)或正规场景,大数据量展示 Number类型的最大值是2^53 - 1 解决方案一:BigInt BigInt 是 JavaScript 中专门用来表示任意精度整数的类型。它允许你处理超出 Number 范围的整数。 const bigNu…...
Deepseek API+Python测试用例一键生成与导出-V1.0.2【实现需求文档图片识别与用例生成自动化】
在测试工作中,需求文档中的图片(如界面设计图、流程图)往往是测试用例生成的重要参考。然而,手动提取图片并识别内容不仅耗时,还容易出错。本文将通过一个自研小工具,结合 PaddleOCR 和大模型,自…...
整形在内存中的存储(例题逐个解析)
目录 一.相关知识点 1.截断: 2.整形提升: 3.如何 截断,整型提升? (1)负数 (2)正数 (3)无符号整型,高位补0 注意:提升后得到的…...
基于变分推理与 Best‑of‑N 策略的元 Prompt 自动生成与优化框架
摘要 本文提出了一种融合变分推理与 Best‑of‑N 策略的元 Prompt 自动生成与优化框架,通过高度参数化的模板、随机扰动采样及多指标评分机制,实现从初始提示生成到最终输出的动态优化。同时,针对实际应用中对自适应参数调整、深层语义理解、…...
AI 技术在智慧农业中的应用实践
智慧农业是通过现代信息技术(如物联网、大数据、人工智能等)提升农业生产效率、降低资源消耗、改善农产品质量的现代农业模式。AI 技术在智慧农业中的应用实践涵盖了从种植到收获的全流程,以下是具体的方案和应用场景: 1. AI 在智慧农业中的应用场景 1.1 精准种植 应用场景…...
蓝牙系统的核心组成解析
一、硬件层:看得见的物理载体 1. 射频模块(Radio Frequency Module) 专业描述:工作在2.4GHz ISM频段,支持GFSK/π/4 DQPSK/8DPSK调制方式 功能类比:相当于人的"嘴巴"和"耳朵" 发射端…...
centos 7误删/bash 拯救方法
进入救援模式 1. 插入CentOS 7安装光盘,重启系统。在开机时按BIOS设置对应的按键(通常是F2等),将启动顺序调整为CD - ROM优先。 2. 系统从光盘启动后,选择“Troubleshooting”,然后选择“Rescue a Cent…...
uniapp笔记-底部和首部标签页菜单生成
逻辑 这些都是需要配置pages.json文件。 其中底部需要手动配置tarBar,如: "tabBar": {"list":[{"pagePath": "pages/index/index","text": "首页"},{"pagePath": "pages/…...
基于Gemini 生成 Gemini Embedding
在本报告中,我们介绍了Gemini Embedding,这是一款基于谷歌功能最强大的大型语言模型Gemini的先进嵌入模型。借助Gemini的多语言和代码理解能力,Gemini Embedding能够为多种语言和文本模态的文本生成高度通用的嵌入表示。Gemini Embedding生成的表示可以预先计算并应用于多种…...
SpringBoot 和vue前后端配合开发网页拼图10关游戏源码技术分享
今天分享一个 前后端结合 的网页游戏 开发项目源码技术。 这也是我第一次写游戏类的程序,虽然不是特别复杂的游戏,但是是第一次写,肯定要记录一下了,哈哈。 游戏的内容 就是 我们显示中玩的那个 拼图碎片的 游戏,类似下…...
