1.基础用法,使用注解@Autowired注入Environment类
这种方式比较常见,就像注入service或者dao一样,声明一个Environment类变量,加上@Autowire注解。如下:
import org.springframework.core.env.Environment; @Autowired private Environment environment;
使用方法就是通过getProperty(key)方法读取配置文件中的信息,代码如下:
1).Yml中的配置
heycloud: jobInfo: http://www.baidu.com
2).获取配置
//获取url(注意:key一定要写完整,有几层就写几层,每层的名字用点分隔。) String resultUrl = environment.getProperty("heycloud.jobInfo");
注:该方式读取配置信息有一定的局限性,包括如下:
局限1:
如果要在静态方法中读取配置信息,不能简单的将Environment定义成static就完了,由于注入机制,注入一个静态的bean只会得到一个空的bean,即变量的值为null,一旦使用该bean对象就会报空指针异常。
错误写法:
@Autowired private static Environment environment;//这是错误写法,environment只会是null public void test(){ //获取url String resultUrl = environment.getProperty("heycloud.jobInfo");//一旦使用environment变量就会报空指针异常 }
正确写法:
1.将Environment定义成static;
2.加上environment的getter/setter方;
3.将@Autowire注解加到set方法上。
这样就可以有效注入了,值得注意的是,只需要get方法是静态的即可,set方法不要静态,否则得到的environment还是null。
正确代码如下:
private static Environment environment; @Autowired public void setEnvironment(Environment environment) { this.environment = environment; } public static Environment getEnvironment() { return environment; }
局限2:
Environment 无法直接读取自定义的Yml配置文件,需要通过增加一个配置类,将自定义的Yml文件暴露到spring environment中。
解决方法:
定义一个配置类,将自定义的Yml文件内容加载到Environment中,代码如下:
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; /** * 配置类 * @Description 读取自定义Yml格式配置文件 * @Date 2021/3/15 10:40 * @Created by LSH */ @Component public class SqlConfig { @Bean public PropertySourcesPlaceholderConfigurer getSqlConfigurer() { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); YamlPropertiesFactoryBean sqlConfigBean = new YamlPropertiesFactoryBean(); sqlConfigBean.setResources(new ClassPathResource("sql-properties.yml")); configurer.setProperties(sqlConfigBean.getObject()); return configurer; } }
一旦设置好配置类,就能够利用注解@Autowired来注入Environment类,从而获取自定义配置信息。简言之,遇到局限2的问题,只是需要多写一个配置类而已。
局限3:
由于加载顺序的原因,使用注解的方法不适用于在静态代码块(static{})中读取配置,即便用了局限1的解决方法也不行,目前还没找出解决方法,欢迎路过的大佬指点。
其实也可以在静态块中手写加载类通过读取Yml文件的路径去加载配置,但这样不够简洁,如果多个类都存在这种需求,每个都要写一堆加载类,所以没有深究。不过不止一种方法可以读取配置文件,没必要认准一棵树。
2.基础用法,使用@Value注解直接注入配置信息
使用方法很简单,声明类成员属性,使用@Value注解直接将配置信息放入成员属性中,格式为:@Value("${xxx.xxx.xxx}")。
代码如下:
@Value("${sql.newrest.CAS_GRID}") private String CAS_GRID;
注意:
1.同第一个方法一样,key要写完整,有几层就写几层,每一层用点分开。
2.该方法同第一种方法的局限性一样。
3.进阶方法
定义一个工具类,使用@Component注解成为配置类,再继承ApplicationRunner 重写run(),再注入Environment 类获取配置,可以做到在任何地方随时随地获取配置信息。
代码如下:
1).定义配置类,声明一些静态属性,用于接收配置信息
@Slf4j @Component public class BaseConfig implements ApplicationRunner { @Autowired private Environment environment; public static String pro1; public static String pro2; public static String pro3; @Override public void run(ApplicationArguments args){ pro1=environment.getProperty("pro1"); pro2=environment.getProperty("pro2"); pro3=environment.getProperty("pro3"); } }
2).使用方法
直接用调用配置类的静态属性即可获取配置信息,不限于常规方法,静态方法,静态代码块,其实相当于时使用一个配置类迂回一下间接获取配置信息。
以上是SpringBoot读取Yml配置文件的方法有哪些的详细内容。更多信息请关注PHP中文网其他相关文章!

Java'splatFormIndependecemeansDeveloperScanWriteCeandeCeandOnanyDeviceWithouTrecompOlding.thisAcachivedThroughThroughTheroughThejavavirtualmachine(JVM),WhaterslatesbyTecodeDecodeOdeIntComenthendions,允许univerniverSaliversalComplatibilityAcrossplatss.allospplats.s.howevss.howev

要设置JVM,需按以下步骤进行:1)下载并安装JDK,2)设置环境变量,3)验证安装,4)设置IDE,5)测试运行程序。设置JVM不仅仅是让其工作,还包括优化内存分配、垃圾收集、性能调优和错误处理,以确保最佳运行效果。

toensurejavaplatFormIntence,lofterTheSeSteps:1)compileAndRunyOpplicationOnmultPlatFormSusiseDifferenToSandjvmversions.2)upureizeci/cdppipipelinelikeinkinslikejenkinsorgithikejenkinsorgithikejenkinsorgithikejenkinsorgithike forautomatecross-plateftestesteftestesting.3)

javastandsoutsoutinmoderndevelopmentduetoitsrobustfeatureslikelambdaexpressions,streams,andenhanced concurrencysupport.1)lambdaexpressionssimplifyfunctional promprogientsmangional programmanging,makencodemoreconciseandable.2)

Java的核心特点包括平台独立性、面向对象设计和丰富的标准库。1)面向对象设计通过多态等特性使得代码更加灵活和可维护。2)垃圾回收机制解放了开发者的内存管理负担,但需要优化以避免性能问题。3)标准库提供了从集合到网络的强大工具,但应谨慎选择数据结构以保持代码简洁。

Yes,Javacanruneverywhereduetoits"WriteOnce,RunAnywhere"philosophy.1)Javacodeiscompiledintoplatform-independentbytecode.2)TheJavaVirtualMachine(JVM)interpretsorcompilesthisbytecodeintomachine-specificinstructionsatruntime,allowingthesameJava

jdkincludestoolsfordevelveping and compilingjavacode,whilejvmrunsthecompiledbytecode.1)jdkcontainsjre,编译器和授权。2)

Java的关键特性包括:1)面向对象设计,2)平台独立性,3)垃圾回收机制,4)丰富的库和框架,5)并发支持,6)异常处理,7)持续演进。Java的这些特性使其成为开发高效、可维护软件的强大工具。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具