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

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

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

收录于:18天前

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配置文件。

. . .

相关推荐

额外说明

Java 从当前月份获取上个月

      SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM"); try { String payoffYearMonth = "2018-06";

额外说明

LCP19(秋叶集:动态规划)

小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片黄叶。 出于美观整齐的考虑,小扣想要将收藏集中树叶的排列调整

额外说明

谷歌屏蔽广告插件

链接: https://pan.baidu.com/s/1i6OEsfz 密码: mbdk chrome屏蔽网页上关闭不了的广告的插件 使用方法: 在谷歌浏览器上新建标签页,打开 chrome://extensions/ 将下载的.crx文件直接拖放

额外说明

阻塞和非阻塞队列下两种生产者消费者实现

队列可分为两种,一种是阻塞队列,一种是非阻塞队列。 阻塞队列和非阻塞队列的区别:阻塞队列可以阻塞,非阻塞队列不能阻塞,只能使用队列wait(),notify()进行队列消息传送。而阻塞队列当队列里面没有值时,会阻塞直到有值输入。输入也一样,当队列满的时候

额外说明

全网多种方法解决Updates were rejected because the remote contains work that you do not have locally的错误

文章目录 1. 复现错误 2. 分析错误 3. 解决错误 4. 解决该错误的其他方法 1. 复现错误 今天使用git status查看文件状态,发现有一个文件未提交,如下代码所示: D:\project\test>git status On branch

额外说明

数据库连接池之简介及简单实现

数据库连接池之简介及简单实现 简介 对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁

额外说明

vue3+ts文档分页插入水印

案例背景 最近在做一个类似腾讯文档word 可分页的文档编辑器,在每个分页添加水印,在整个编辑区分成A4纸尺寸大小page块,水印分别插入每个page的div节点Dom中。 效果展示  html演示代码 <template> <div > <div cl

额外说明

推荐一个操作Zip文件的开源类库:DotNetZip

DotNetZip 是一个短小易用的用来操作 zip 文件的 .NET 类库,支持.NET的任何语言,可很方便的创建,读取,和更新zip文件。而且还可以使用在.NETCompact Framework中。 下面是一些简单的例子: 1.加密压缩: usin

额外说明

wordpress页脚修改_一流的WordPress页脚设计(最佳做法和提示)

wordpress页脚修改 大多数页脚设计都很无聊,其背后的原因是页脚设计经常被忽视。用户没有意识到页脚设计与其他设计一样重要。页脚不仅仅是放置版权信息的地方。分配页脚空间有无穷无尽的好处,它可以为您带来优势。在本文中,我们将展示一系列顶级 WordPr

额外说明

如何在WordPress中添加主题演示栏

大多数 WordPress 主题商店和市场都利用主题演示栏来让用户更轻松地预览主题。主题演示栏是出现在网站顶部的工具栏,带有主题选择器菜单。它允许您创建一个包含虚拟内容的网站,您的用户可以使用该网站来查看您可用的不同主题的演示。我们的一位想要发布一些免费

ads via 小工具