小工具      在线工具  汉语词典  css  js  c++  java

Spring Boot装配配置文件properties的参数

# Spring Boot,spring boot,spring,java 额外说明

收录于:157天前

Spring组件配置文件主要分为两种:一种是主配置文件,另一种是其他配置文件。

在使用maven构建spring boot项目时会产生一个主要的配置文件application.properties

在这里插入图片描述

有些习惯yml的语法是application.yml都是一个意思,spring也能自动识别。

除了自动生成的配置文件外,其余的如file.propertiesredis.properties都是新生成的spring无法自动识别需要通过spring相关配置类或注解引入配置文件。

Spring Boot启动时会自动加载默认配置文件的参数,但这些都是Spring Boot定义的,主配置文件中自定义的参数还是需要加载的。

加载主配置文件的自定义参数@ConfigurationProperties注解

SpringBoot默认会读取文件名为application.properties的资源文件,@ConfigurationProperties注解以对象的形式加载文件的参数:

  • 默认配置文件定义参数:
define.name = _xiaoxu_
define.sex = man
define.age = 18
  • @ConfigurationProperties 注解加载到对象属性中
@Repository
@ConfigurationProperties(prefix = "define")
@Data
public class Define {
    

    private String name;

    private String age;
    private String sex;
}

prefix定义变量前缀,其后的内容需要与属性字段对应。

  • 将对象DL注入IOC容器

在这里插入图片描述

  • 装配对象和调用
 @Autowired
 private Define define;
 
 @Test
 void four(){
    
     System.out.println("姓名:"+define.getName()+"年龄:"+define.getAge()+"性别:"+define.getSex());
 }

如下图所示,调用成功:
在这里插入图片描述

@Value加载默认配置文件参数

还是之前的参数,这里使用@Value注解

@Repository
@Data
public class DefineTwo {
    

    @Value("${define.name}")
    private String name;

    @Value("${define.age}")
    private String age;

    @Value("${define.sex}")
    private String sex;
}

@Value注解不需要引入文件,直接读取application.properties的属性,另外创建的类需要DL装配。

测试:

@Autowired
private DefineTwo defineTwo;
@Test
void five(){
    
    System.out.println("姓名:"+define.getName()+"年龄:"+define.getAge()+"性别:"+define.getSex());
}

在这里插入图片描述

@PropertySource读取自定义配置文件

定义file.properties文件

filepath=C:\\Users\\fireapproval\\Desktop\\数据集\\test.csv

redis直接在默认配置文件中进行配置,这里作为演示

//导入外部文件
@PropertySource("classpath:file.properties")
@Value("${filepath}")
private String filepath;

这里读取自定义文件后还面临一个重要的问题,就是@Value注解,在类中使用赋值给属性,但是却并不是由spring 的IOC容器管理,这是需要生产对象返回该属性的值:

 @Bean(name = "getFilePath")
 //@Scope(value = "prototype")
 public String getFilePath() throws UnsupportedEncodingException {
    
     return new String(this.filepath.getBytes("ISO-8859-1"),"UTF-8");
 }

如上是@Bean生产了一个对象获取了@Value的属性,再返回具体的字符串,idea读取properties默认是IOS-8859-1。

bean生产出来后,可以通过@Autowired自动组装在其他地方使用:

 //文件地址
 @Autowired
 private String getFilePath;

另外,我还遇到了自动装配属性的问题。场景如下:

  • 在启动类导入文件中,首先注入属性,并在生产bean中注入返回属性的值。

在这里插入图片描述

  • 自动装配其他类中的对象
//文件地址
@Autowired
private String getFilePath;

//获取全局的数据
ReadCSV readCSV = new ReadCSV();
List<ArrayList> maps = readCSV.readTwoColumn(getFilePath, 7, 9);    

但这里后一致出现getFilePath为null,这是由于对象生产和装配的时机不一样,导致bean还未生产
readTwoColumn就在装配了,因此需要将装配方法通过函数包裹:

 private List<ArrayList> getData(){
    
     ReadCSV readCSV = new ReadCSV();
     List<ArrayList> maps = readCSV.readTwoColumn(getFilePath, 7, 9);    
     return maps;

 }

将生成的全局数据放在方法中,而不是直接放在类中。

spring引入外部属性或配置的注解还有:@Import: 用来导入其他配置类。
@ImportResource: 用来加载xml配置文件。

. . .

相关推荐

额外说明

Springboot源码分析----为什么静态文件一定要静态,以及首页加载的配置

最近闲着无聊,看了下springboot的封装jar包,突然发现一个神奇的东西。 spring-boot-autoconfigure-2.0.0.RELEASE.jar 就这个文件中,有两个自动化配置的解释: 1、静态文件的文件名称,静态文件的位置定义,

额外说明

最新版本Chrome浏览器跨域问题及解决方案

最近将chrome浏览器更新到了最新版本 ,在个别网站上出现了跨域访问问题。 目录 解决办法: (1)增加参数配置代码 (2)重新打开浏览器 解决办法: (1)增加参数配置代码 在桌面快捷方式中右键》属性》快捷方式中的目标后面加入以下参数配置代码 --d

额外说明

使用U8W-Mini模拟STC8G1K08

1. 打开stc-isp-15xx-v6.87S.exe 2. 单片机断电 IRC频率选择与程序中设置的频率一致 3. U8W-Mini设置为直通模式 按下Key1,按下Key2,松开Key2,再松开Key1,U8W-Mini会由正常模式变为直通模式。

额外说明

day17---(07)生成统计数据与前端整合

1、 添加路由、添加页面 1)在guli_admin/src/router/index.vue页面中添加统计数据的路由。 { path: '/sta', component: Layout, redirect: '/sta/ta

额外说明

多线程基础知识

小伙伴们,你们好,我是老寇 目录 一、JUC知识 1.进程与线程 2.并发与并行 3.创建线程 4.线程状态 5.使用interrupt()终止线程 6.线程优先级 7.守护线程 8.同步 9.锁对象 10.条件对象 11.锁与条件关键之处 12.syn

额外说明

C# winform 如何将多个dll打包生成一个可执行的exe文件中

感觉罗先生 原文链接摘抄记录一下 备忘 相关视频链接 1、我们先建一个类库里面内容如下 namespace ClassLibrary3 { public class Class1 { public string Get

额外说明

Python 第五节 第八课

[toc] 函数用法和底层分析     函数是可以重负调用的代码块. 函数的作用, 不仅可以实现代码的复用, 更能实现代码的一致性. 一致性指的是, 只有要修改函数的代码. 则所有调用该函数的地方都能体现.     在编写函数时, 函数体中的代码写法和我

额外说明

2023.9.18 网络层 IP 协议详解

目录 IP协议 IPv4 32位 源IP 地址 / 32位 目的IP 地址 IP 地址管理 特殊 IP 路由选择 IP协议 IPv4 32位 源IP 地址 / 32位 目的IP 地址 基本知识: 在 IP 报头中一般表示为 32位 二进制整数 日常生活中

额外说明

BeanFactory和FactoryBean

BeanFactory和FactoryBean 何为Bean? 类比的方式 Java Object 等同于 Spring Bean。Bean就是Spring中管理的对象。所以无论是BeanFactory还是FactoryBean,都是为了操作S

额外说明

短视频干货运营课,真正做好短视频,没有太多花里胡哨只讲干货

新标题:短视频操作分享:实用技巧,助你打造成功、简洁、实用的视频! 文章: 随着短视频平台的快速发展,越来越多的人涌入这一领域。在这样的竞争环境下,如何通过简洁实用的方法吸引用户成为了每个创作者关注的焦点。本文将分享一些实用技巧,帮助您创建成功、简洁且内

ads via 小工具