【SpringBoot】一:SpringBoot的基础(下)

news/2025/3/15 9:34:37/

文章目录

  • 1.外部化的配置
    • 1.1 配置文件基础
      • 1.1.1 配置文件格式
      • 1.1.2 application文件
      • 1.1.3 application.properties
      • 1.1.4 application.yml
      • 1.1.5 environment
      • 1.1.6 组织多文件
      • 1.1.7多环境配置
    • 1.2 绑定Bean
      • 1.2.1 简单的属性绑定
      • 1.2.2 嵌套Bean
      • 1.2.3 扫描注解
      • 1.2.4 处理第三方库对象
      • 1.2.5 集合 Map,List 以及 Array
      • 1.2.6 指定数据源文件
  • 2.创建对象的三种方式

1.外部化的配置

项目中经常使用 properties 与 yaml 文件,其次是命令行参。

1.1 配置文件基础

1.1.1 配置文件格式

properties

语法:key=value。key 是唯一的,文件扩展名为 properties

yaml

语法:key:[空格] 值

1.1.2 application文件

Spring Boot 同时支持 properties 和 yml 格式的配置文件。 配置文件名称默认是 application。我们可以使用application.properties , application.yml

1.1.3 application.properties

在application.properties中写入我们自己的配置文件

【application.properties】

在这里插入图片描述

【SomeService.java】

package com.sdnu.config.pk1;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.util.StringJoiner;@Service
public class SomeService {// 使用@Value("${key: 默认值}")@Value("${app.name}")private String name;@Value("${app.owner}")private String owner;@Value("${app.port:8008}")private Integer port;public void printValue(){StringJoiner joiner = new StringJoiner(";");String s = joiner.add(name).add(owner).add(String.valueOf(port)).toString();System.out.println("result=" + s);}
}

【测试类】

package com.sdnu.config;import com.sdnu.config.pk1.SomeService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class Lession07ConfigApplicationTests {@Autowiredprivate SomeService someService;@Testvoid test01(){someService.printValue();}@Testvoid contextLoads() {}
}

测试结果:
在这里插入图片描述

1.1.4 application.yml

使用yml

# 编写配置文件 key: 值app:name: Lession07owner: rootport: 8002

还是原来的测试程序:
在这里插入图片描述

1.1.5 environment

Environment 是外部化的抽象,是多种数据来源的集合。从中可以读取 application 配置文件,环境变量,系统属性。使用方式在 Bean 中注入 Environment。调用它的 getProperty(key)方法。

package com.sdnu.config.pk2;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;@Service
public class ReadConfig {@Autowiredpublic Environment environment;public void printValue(){//通过key获取某个valueString name = environment.getProperty("app.name");System.out.println(name);// 还可以判断某个key是否存在if(environment.containsProperty("app.owner")){System.out.println("app.owner存在");System.out.println(environment.getProperty("app.owner"));}if(environment.containsProperty("app.port")){System.out.println("app.port存在");System.out.println(environment.getProperty("app.port", Integer.class, 8999));}}
}

1.1.6 组织多文件

在这里插入图片描述

【MultiConfigService.java】

package com.sdnu.config.pk3;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class MultiConfigService {@Value("${spring.redis.host}")private String redisHostName;@Value("${spring.datasource.url}")private String jdbcUrl;public void printValue(){System.out.println("host:" + redisHostName);System.out.println("url:" + jdbcUrl);}
}

测试结果:
在这里插入图片描述

1.1.7多环境配置

在这里插入图片描述

【application-dev.yml】

myapp:memo: 这是开发环境配置文件dev# 指定环境名称
spring:config:activate:on-profile: dev

【application-test.yml】

myapp:memo: 这是开发环境配置文件test# 指定环境名称
spring:config:activate:on-profile: test

在Application.yml中激活test
【Application.yml】

# 编写配置文件 key: 值app:name: Lession07owner: rootport: 8002# 导入其它配置文件,多个文件之间使用逗号隔开
spring:config:import: conf/db.yml, conf/redis.yml# 激活某个配置文件,(环境)profiles:active: test

【MultiEnvService.java】

package com.sdnu.config.pk4;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class MultiEnvService {@Value("${myapp.memo}")private String memo;public void printMemo(){System.out.println("memo:::" + memo);}
}

【测试】

    @Autowiredprivate MultiEnvService multiEnvService;@Testvoid test04(){multiEnvService.printMemo();}

在这里插入图片描述

1.2 绑定Bean

1.2.1 简单的属性绑定

【AppBean.java】

package com.sdnu.config.pk5;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @ConfigurationProperties 表示使用Bean对象读取配置项* prefix 表示配置文件中的多个key的公共开始部分*/
@Component
@ConfigurationProperties(prefix = "app")
public class AppBean {// key的名称和属性名相同,调用属性setXXXX方法给属性赋值private String name;private String owner;private String port;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getOwner() {return owner;}public void setOwner(String owner) {this.owner = owner;}public String getPort() {return port;}public void setPort(String port) {this.port = port;}@Overridepublic String toString() {return "AppBean{" +"name='" + name + '\'' +", owner='" + owner + '\'' +", port='" + port + '\'' +'}';}
}

【application.yml】

# 编写配置文件 key: 值app:name: Lession07owner: rootport: 8002# 导入其它配置文件,多个文件之间使用逗号隔开
spring:config:import: conf/db.yml, conf/redis.yml# 激活某个配置文件,(环境)profiles:active: test

【测试】

    @Autowiredprivate AppBean appBean;@Testvoid test05(){System.out.println(appBean.toString());}

补充:
默认返回代理Bean对象。
在这里插入图片描述
设置@Configuration(proxyBeanMethods = false)后返回普通Bean对象。
在这里插入图片描述

1.2.2 嵌套Bean

【application.yml】
在这里插入图片描述
【NestAppBean.java】
在这里插入图片描述
【Security.java】
在这里插入图片描述

1.2.3 扫描注解

@ConfigurationProperties 注解起作用,还需要@EnableConfigurationProperties 或@ConfigurationPropertiesScan。这
个注解是专门寻找@ConfigurationProperties 注解的,将他的对象注入到 。

【SpringBoot配置类】

package com.sdnu.config;import com.sdnu.config.pk6.NestAppBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;//启动ConfigurationProperties
//@EnableConfigurationProperties({NestAppBean.class})//扫描注解的包,绑定Bean注入到Spring容器
@ConfigurationPropertiesScan(basePackages = {"com.sdnu.config.pk6"})
@SpringBootApplication
public class Lession07ConfigApplication {public static void main(String[] args) {SpringApplication.run(Lession07ConfigApplication.class, args);}}

1.2.4 处理第三方库对象

【application.yml添加新的配置】

security:username: root77password: 888888

【创建配置类】

package com.sdnu.config.pk7;import com.sdnu.config.pk6.Security;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyApplicationConfig {//创建Bean对象,属性来自配置文件@ConfigurationProperties(prefix = "security")@Beanpublic Security createSecurity(){return new Security();}
}

【 单元测试】

    @Autowiredprivate Security security;@Testvoid test07(){System.out.println("security = " + security);}

1.2.5 集合 Map,List 以及 Array

(1)创建保存数据的Bean
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(2)配置数据【application.yml】

# 数组和List一样,一个"-" 表示一个成员
names:- lisi- zhangsan# List<Myserver> servers
servers:- title: 北京服务器ip: 192.168.0.0.1- title: 上海服务器ip: 192.168.0.0.2# Map<String, User> users
users:user1:name: 张三sex:age: 22user2:name: 李四sex:age: 21

(3) 启动类,增加扫描包
在这里插入图片描述
【测试】

@Autowiredprivate CollectionConfig collectionConfig;@Testvoid test08(){System.out.println("collectionConfig = " + collectionConfig.toString());}

在这里插入图片描述

1.2.6 指定数据源文件

在这里插入图片描述

【group-info.properties】

group.name=IT学习专栏
group.leader=root
group.members=20

【group.java】
在这里插入图片描述
【测试】

    @Autowiredprivate Group group;@Testvoid test09(){System.out.println("group = " + group);}

在这里插入图片描述

2.创建对象的三种方式

 传统的 XML 配置文件
 Java Config 技术, @Configuration 与@Bean
 创建对象的注解,@Controller ,@Service , @Repository ,@Compon

Spring Boot 不建议使用 xml 文件的方式, 自动配置已经解决了大部分 xml 中的工作了。如果需要 xml 提供 bean的声明,@ImportResource 加载 xml 注册 Bean

文章来源:https://blog.csdn.net/weixin_45965358/article/details/130245636
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/48089.html

相关文章

Vue中mixins(混入)的介绍和使用

什么是Mixin&#xff1f; 想要使用一个事物或者工具&#xff0c;我们首要先了解它是什么&#xff0c;这样我们才好对症下药。 其实Mixin不是Vue专属的&#xff0c;可以说它是一种思想&#xff0c;也可以说它就是混入的意思&#xff0c;在很多开发框架中都实现了Mixin(混入)&a…

异常(throwable)

异常 异常分类 &#xff08;1&#xff09;Throwable类 所有的异常类型都是它的子类&#xff0c;它派生两个子类Error、Exception。 &#xff08;2&#xff09;Error类 表示仅靠程序本身无法恢复的严重错误&#xff08;内存溢出动态链接失败、虚拟机错误&#xff09;&#…

Seata强一致性事务模式XA的设计理念

承接上文分布式事务Seata-AT模式 XA规范是什么? 是分布式事务处理DTP&#xff08;Distributed Transaction Processing&#xff09;的标准。是描述全局的事务管理器和局部的资源管理器之间的接口规范。允许多个资源&#xff08;如数据库、应用服务、消息队列&#xff09;在同…

class与typename的异同

一、class与typename的相同点 typename关键字常用于函数模板&#xff0c;这里首先引入函数模板的概念&#xff1a;函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型产生函数的特定 类型版本 //函数模板格式…

idea 配置docker 进行上传镜像,部署启动容器

前言 在我们开发测试过程中&#xff0c;需要频繁的更新docker镜像&#xff0c;然而默认情况下&#xff0c;docker的2375端口是关闭的&#xff0c;下面介绍如何打开端口。 修改docker配置文件 操作步骤&#xff1a; 1.1、修改配置 登录docker所在服务器&#xff0c;修改docker…

深入浅出剖析JAVA多线程原理

1. 线程基础知识 1.1 线程与进程 1.1.1 进程 ●程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理…

聚观早报|马斯克将TruthGPT挑战ChatGPT;腾讯披露自研芯片新进展

今日要闻&#xff1a;马斯克将TruthGPT挑战ChatGPT&#xff1b;苹果在印度年销售额近60亿美元&#xff1b;腾讯披露自研芯片沧海最新进展&#xff1b;特斯拉中国工厂普通工人月薪约1万元&#xff1b;飞猪将直接向阿里CEO张勇汇报 马斯克将TruthGPT挑战ChatGPT 4 月 18 日消息&…

【大厂直通车】哔哩哔哩日常实习_测开面经

📑哈喽,大家好,我是小浪;本篇博客更新的是最新B站测开面经,本专栏非常适合目前准备找实习,或者准备冲秋招测试,测开方向的同学阅读订阅,持续更新各大厂真题面经,带你成为offer收割机!! 🧃对于订阅本专栏的同学们,博主在努力更新,只需要一杯奶茶钱,订阅本专栏,…