如何加载和使用配置文件中的自定义实体属性

SpringBoot获取YAML配置文件中的属性值(一):使用@Value注解、@ConfigurationProperties注解 SpringBoot支持使用Properties和YAML两种配置方式。两者功能类似,都能完成SpringBoot的配置,但是Properties的优先级要高于YAML(YAML语言的文件以“.yml”为后缀)。 使用application.yml文件配置SpringBoot项目。主要对SpringBoot项目的端口号、超时时间、参数值等进行配置。YAML文件的好处是——它采用的是树形结构,一目了然。如下: 阅读详情

如何加载配置文件中的自定义实体属性:

情景:

在实际的项目中,操作赋值数据库中的记录时经常会需要一些常量值,比如插入人的性别字段时候,常会使用如下方式persion.setSex("男")类似"男"这样的硬编码,当代码需要在国外使用时,这个就要按照当地的使用方式修改,比如在美国,不得不将“男”改为“male”这样的硬编码不利于国际化,因此实际的工程经常是将的实体应该采用配置文件加载,当需要修改时候,只需要配置一下配置文件就好了。

举一个例子:

schedule.xml文件中内容如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEpropertiesSYSTEM"http://java.sun.com/dtd/properties.dtd">

<properties>

   <comment>Properties XML</comment>

   <!-- 接受 -->

   <entrykey="default.proinsid.sj">11111</entry>

   <!-- 审核-->

   <entrykey="default.proinsid.zb">22222</entry>

   <!-- 完成 -->

   <entrykey="default.proinsid.bj">33333</entry>

在类中使用:

myclass.setId(GlobalConfig.getInstance().setStatus("yzt.third.default.proinsid.sj"));

那么如何才能加载实体呢?过程如下:

1. ClassPathXmlApplicationContext的使用

ClassPathXmlApplicationContext是spring读取xml最常用的类。而我们一般操作的是其接口ApplicationContext。BeanFactory和ApplicationContext区别不大,BeanFactory不在自动 BeanPostProcessor 和自动 BeanFactoryPostProcessor 上注册。尽量用ApplicationContext。

<!--通配符使用不了解的道友可以参考http://blog.youkuaiyun.com/wu020708/article/details/60465050-->

packagecom.iflytek.sgy.schedule;

 

importorg.springframework.context.support.ClassPathXmlApplicationContext;

 

import com.schedule.util.GlobalConfig;

 

/**

 * 入口

 *代码介绍:下代码拷贝自一个工程,用途是加载配置文件

 *

 */

public class App {

  

   public static void main(String[] args) {

      String applicationXml = "classpath*:spring_schedule/application/application.xml";

      String beanXml = "classpath*:spring_schedule/bean/schdule.xml";

 

      // job 任务

      String dsJob = "classpath*:spring_schedule/triggers/TaskJob.xml";

 

      String[] path = { applicationXml, beanXml,dsJob,

           "classpath*:spring_schedule/trigger.xml",

           "classpath*:spring_schedule/quartz.xml" };

//trigger.xml 和 quartz.xml为项目中用到的定时任务配置文件,不必理会

      ClassPathXmlApplicationContext wapp = new ClassPathXmlApplicationContext(path);

      GlobalConfig.init(wapp);

   }

}

 

/**

*配置文件加载器

*使用单例模式

**/

import java.lang.reflect.Method;

import java.util.Properties;

import java.util.Set;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

importorg.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

importorg.springframework.beans.factory.config.PropertyResourceConfigurer;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

importorg.springframework.core.io.support.PropertiesLoaderSupport;


public class GlobalConfig {

  private static Logger logger = LoggerFactory
.getLogger(GlobalConfig.class);

   private static PropertyPlaceholderConfigurer configure;

 

   private static Properties properties =null;

   private static String myAppConfig ="{}";

   private static String[] path =null;

 

   private static GlobalConfig instance =null;

 

   private GlobalConfig(String[]path) {

      // 初始化,配置属性到本地properties中区

      try {

        if (properties ==null) {

           properties =new Properties();

           ClassPathXmlApplicationContext wapp = new ClassPathXmlApplicationContext(path);

           init(wapp);

        }

      } catch (Exceptione) {

        // 初始化属性读取失败

      }

   }

  

   public static void init(ClassPathXmlApplicationContextwapp) {

      try {

        properties = new Properties();

        configure = (PropertyPlaceholderConfigurer)wapp

              .getBean("propertyPlaceHolder");

 

        // 通过mergeProperties方法读取所有的配置属性信息

        PropertyResourceConfigurer propertyResourceConfigurer =(PropertyResourceConfigurer)configure;

        Method mergeProperties = PropertiesLoaderSupport.class

              .getDeclaredMethod("mergeProperties");

 

        mergeProperties.setAccessible(true);

        Properties props = (Properties)mergeProperties

              .invoke(propertyResourceConfigurer);

 

        Method convertProperties = PropertyResourceConfigurer.class

              .getDeclaredMethod("convertProperties",Properties.class);

        convertProperties.setAccessible(true);

        convertProperties.invoke(propertyResourceConfigurer,props);

        properties.putAll(props);

        parseAppConfig(properties);

      } catch (Exceptione) {

        // 初始化属性读取失败

        logger.error("Exception:",e);

      }

   }

   private GlobalConfig(){

     

   }

  

   public static void initContext(String[]paths) {

      path = paths;

      getInstance();

   }

 

   public static GlobalConfig getInstance() {

      if (instance ==null) {

        instance = new GlobalConfig(path);

      }

      return instance;

   }

 

   public String getString(Stringkey) {

      return properties.getProperty(key);

   }

 

   public static String getAppConfig() {

      return myAppConfig;

   }

 

}

   // 使用示例

myclass.setId(GlobalConfig.getInstance().setStatus("default.proinsid.sj"));

String

更合理的方式:

实现一个实体类,里面定义静态常量

public class CommonConstant {

    public interface SYNC_STATUS {

       public static final String I ="I";

       public static final String U ="U";

       public static final String D ="D";

       public static final String S ="S";

       public static final String SJ ="default.proinsid.sj";

       }

    }

在类中使用:

handleNumber=GlobalConfig.getInstance().getString(CommonConstant.SYNC_STATUS.SJ);

外部ADC之AD7949——14bit、8通道、250k 在实际项目中,仅靠单片机内部的ADC采样,很有可能达不到实际采样精度,这个时候就需要外接外部ADC芯片进行采样,这些外部ADC一般都是SPI接口或者是并口。单片机通过SPI接口或并口读写芯片内部寄存器,配置参考极性、采样通道、低通滤波器带宽、基准电压源、通道序列器等。本文主要对ADI家的14bit、8通道、250k的ADC7949做一个总结,这款ADC在实际项目中使用,采样精度达到要求,读取时序有点点绕,但是是一款十分常用的ADC芯片。就是价格不太友好哈哈,一块芯片快60。 阅读详情

相关推荐

ESP32-S3开发板实战:5分钟搞定智能门铃的音视频通话功能(附源码)

本文详细介绍了如何利用乐鑫ESP32-S3开发板快速实现智能门铃的实时音视频通话功能。通过ESP-ADF框架和RTC服务,开发者可在五分钟内完成环境搭建与核心功能调试,并附有源码和关键配置详解,为嵌入式音视频应用开发提供了高效实践路径。

web99的专栏 527

读取/加载 properties配置文件的几种方法

在java项目中经常会使用到配置文件,这里就介绍几种加载配置文件的方法。

ywy的博客 4198

强化学习——day16 动态规划算法

动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略

想太多的学习日志 1550

springboot加载属性配置文件的步骤

springboot加载配置文件的方法在ConfigFileApplicationListener的load方法: public void load() { this.profiles = new LinkedList<>(); this.processedProfiles = new LinkedList<>(); this.activatedProfiles = false; this.loaded = new LinkedHashMap<>(

yeapyang的博客 738

相控阵多功能雷达工作模式识别技术综述

本文综述了相控阵雷达工作模式识别技术的研究进展。首先介绍了相控阵雷达的典型工作模式分类及其信号特征参数,包括搜索模式(VS、RWS、TWS)、跟踪模式(STT、MTT、TAS)和其他模式(SAM、SAR)等。随后重点阐述了基于信号特征的识别方法,包括时域特征(PRI分析、脉冲幅度包络、数据率)、频域特征(载频变化、调制方式)和混合特征分析方法。最后讨论了当前技术面临的挑战与发展趋势,包括复杂信号环境下的识别难题、新型雷达技术的适应需求以及深度学习技术的应用前景。该领域的研究对电子侦察和威胁评估具有重要意义。

Grow into a more wonderful you 1794

OCTA-500:用于光学相干断层扫描血管造影研究的视网膜数据集|文献速递-基于生成模型的数据增强与疾病监测应用

数据集提供了丰富的图像和注释,包括两种模态(OCT/OCTA体积)、六种投影类型、四种文本标签(年龄/性别/眼别/疾病)以及七种分割标签(大血管/毛细血管/动脉/静脉/2D FAZ/3D FAZ/视网膜层)。我们介绍了新的 OCTA-500 数据集,该数据集包含来自 500 名受试者的 OCTA 成像,并提供了丰富的图像和标注集。(C) OCTA-500 切片的人工标注示例。图 4. OCTA-500 数据集中文本标签的统计直方图:(a) 性别,(b) 眼别,(c) 年龄,(d) 疾病。

weixin_38594676的博客 1434

如何将SpringBoot配置文件中数据加载到实体类中?

使用如下三个注解: @Configuration @PropertySource(value=”classpath:application.yml”) 指明了配置文件所处的位置,classpath 下的 application.yml。 @ConfigurationProperties(prefix=”com.springboot”) 指明要加载配置文件中的那个前缀下的属性,因为配置文件中一般配有...

疯 2318

人工智能渗透测试:自动化安全评估

渗透测试认证的价值包括提高可信度和技能水平,并帮助客户确保由经过认证的个人对其系统进行全面的手动调查。B2B 交互变得越来越复杂,特别是功能丰富的超级应用程序,需要采取强有力的安全预防措施,而自动化渗透测试应用程序则是一种未被发现的武器。渗透测试中的人工智能通过提高效率、自动收集信息、发现隐藏的漏洞、开发个性化攻击和减少误报来提高 B2B 集成的安全性。这包括风险简报、补救建议和战略建议。渗透测试由五个阶段组成,是网络安全中的关键防御措施,它模拟现实世界的攻击,以识别系统缺陷并在漏洞被利用之前解决它们。

weixin_48967543的博客 2358

SpringBoot:自定义类型的属性如何从配置文件中正确加载

自定义类型的属性如何从SpringBoot配置文件中正确加载

netyeaxi的专栏 895

RK3568项目(四)--uboot启动流程之启动模式选择

本章接着上面,接着来分析uboot启动流程,设计vendor、按键、驱动模式的选择等

文艺小少年的博客 584

TRAE智能体开发:TRAE概述

TRAE(/treɪ/)深度融合 AI 能力,是一名能够理解需求、调用工具并独立完成各类开发任务的“AI 开发工程师”,帮助你高效推进每一个项目。

王国平的博客 1254

java加载配置文件到属性_Java读取属性配置文件

在web开发中经常会遇到读取属性配置文件的情况, 下面简单介绍一下我对读取属性文件类的封装:下面以读取jdbc.properties 为例 :jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/smartjdbc.username=rootjdbc.password=root解析来需要读取jdbc.proper...

weixin_39692271的博客 175

Android SELinux——neverallow问题处理(十六)

遇到 neverallow 规则问题,千万别急着去注释/剔除里面原有的规则(原生的尽量别动)。增加 allow 规则是常见的解决办法,但是随着 android 版本的升级,系统对 SELinux 的管控越来越严,增加了大量的 neverallow。一般情况下,向默认标签授予权限的做法是错误的,其中许多权限都是 neverallow 规则所不允许的。按照上面方法去添加 SELinux 可能会违反了 neverallow 规则,编译时候会报 neverallow 相关的错误。

小旭的专栏 2657

SpringBoot -- 02 -- @ConfigurationProperties和@PropertySource注解的使用

在 SpringBoot 项目的开发过程中,我们通常会需要读取配置文件中的配置项,并将其封装到一个实体类中。说到读取配置项,我们第一个想到的会是 @Value 注解,但这仅适合用读取少量的配置项,一旦配置项过多,再使用 @Value 注解就会显的很麻烦了,这时候我们就可以使用 @ConfigurationProperties 注解了,它会自动将配置文件中的同名配置项映射为实体类中对应的属性。此外...

半日橙 721

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SpringBoot的配置文件整理

全局配置文件能够对一些默认配置值进行修改。Spring Boot使用一个application.properties或者application.yaml的文件作为全局配置文件,该文件存放在src/main/resource目录或者类路径的/config,一般会选择resource目录。加载顺序@ConfigurationProperties(prefix = “person”)注解的作用是将配置文件中以person开头的属性值通过setXX()方法注入到实体类对应属性中

不会骑摩托的程序员不是好的摄影师 748

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

如何在springboot中读取自己创建的.properties配置的值

在实体类里面加上 @PropertySource("classpath:/robot_config.properties") robot_config.properties // 配置文件的名字 文件放在resources 目录下 类里面的属性取值 @Value("${quest_mode}") private String quest...

a2018140的博客 325

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SpringBoot使用yml格式配置文件加载自定义属性

2020-03-10:因为项目在开发环境、测试环境和生产环境的部分数据有所区别,故分别有不同的yml文件,相关属性也要在yml中定义.然后尝试了很多方法去将yml文件中自定义的属性赋值给项目中一个类中字段,均失败. 解决方法: 一、查看别的项目中的使用方法发现,所有的自定义属性被抽成了一个新的yml文件,每个环境的都有一个对应的属性抽出来的yml文件.结构为下图,其中GlobalConstants...

weixin_43732454的博客 1072

springboot配置文件和实体类的映射

笔记梳理 SpringBoot注解把配置文件自动映射到属性和实体类实战 简介:讲解使用@value注解配置文件自动映射到属性和实体类 1、配置文件加载 方式一 1、Controller上面配置 @PropertySource({"classpath:resource.properties"}) 2、增加属性 @Value("${test.name}") p...

ITzhongzi的博客 1641

SpringBoot注解配置文件自动映射到属性和实体类实战

讲解使用@value注解配置文件自动映射到属性和实体类                  1、配置文件加载         方式一             1、Controller上面配置                @PropertySource({"classpath:resource.properties"})             2、增加属性                  @Va...

peng_0129的博客 3221

使用注解读取配置文件中的数据并映射到属性或实体类中

使用注解读取配置文件中的数据并映射到属性或实体类中 映射到属性上面 步骤一:在Controller层上加如下注解 @PropertySource("classpath:application.properties")//加载配置文件 步骤二:在Controller层上加如下注解 @Value("${Web.file.path}") //通过注解,读取配置文件中的数据,并映射到类的属性上面 步骤...

Cui6023056的博客 1496

Spring Boot @PropertySource 加载配置文件、@ImportResource 导入Spring 配置文件、YamlPropertiesFactoryBean 读取 yml 文件

目录 需求背景 项目结构 @PropertySource 加载指定配置文件 资源配置文件 测试运行 需求背景 1、通过《Spring Boot 全局配置文件》与《@Value 取赋值详解与 @ConfigurationProperties 对比》已经知道使用“@Value”注解与“@ConfigurationProperties”可以从全局配置文件“application.prope...

蚩尤后裔-汪茂雄 6万+

Spring Boot 加载自定义配置文件

Spring Boot免除了项目中大部分的手动配置,对于一些特定情况,我们可以通过修改全局配置文件以适应具体生产环境,可以说,几乎所有的配置都可以写在application.peroperties或application.yaml文件中,Spring Boot会自动加载全局配置文件从而免除我们手动加载的烦恼。但是,如果我们自定义配置文件,Spring Boot是无法识别这些配置文件的,此时就需要我们手动加载。使用Spring Initializr创建Spring Boot项目——ConfigDemo01。

梁辰兴的博客 4655

SpringBoot 注解配置文件自动映射到属性和实体类

配置文件加载 方式一 1、Controller上面配置 @PropertySource({"classpath:application.properties"}) 2、增加属性 @Value("${web.images-path}") private String filePath; application.properties文件 web.ima...

分享我的点点滴滴,在成长路上与你同行! 1787

SpringBoot注解配置文件自动映射到属性和实体类

简介:讲解使用@value注解配置文件自动映射到属性和实体类 1、配置文件加载(引入自定义配置文件) 从外部文件引入值 方式一: 1、Controller上面配置 //要放在类名上方,目的是将文件引入 @PropertySource({"classpath:application.properties"}) 2、增加属性 //对属性进行赋值 @Value("${test.name}") //...

weixin_44007447的博客 438

Spring Boot加载自定义配置文件

零、学习目标 1、熟悉使用@PropertySource加载配置文件 2、熟悉使用@ImportResource加载XML配置文件 3、掌握使用@Configuration编写自定义配置类 一、为什么需要加载自定义配置文件 Spring Boot免除了项目中大部分的手动配置,对于一些特定情况,我们可以通过修改全局配置文件以适应具体生产环境,可以说,几乎所有的配置都可以写在application.peroperties文件中,Spring Boot会自动加载全局配置文件从而免除我们手动加载的烦恼。但是,如果我

m0_46204302的博客 2307

SpringBoot加载自定义配置文件

** 为了在属性文件中使用中文,设置一下idea如下–**在net.dw.boot.config包里创建配置类StudentConfig@Component @PropertySource("classpath:myconfig.properties") //加载自定义配置文件 @ConfigurationProperties(prefix = "student") public class StudentConfig {//学号 private String name;

new_renren的博客 1633
上一篇: oracle数据库表被锁的解决方法
下一篇: nested exception isorg.hibernate.StaleObjectStateException
国服第l帅
博客等级 码龄12年 26粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值