spring怎么读取配置文件,如何在spring中读取properties配置文件里面的信息
spring怎么读取配置文件,如何在spring中读取properties配置文件里面的信息详细介绍
本文目录一览: Springboot打成JAR包后读取外部配置文件
自定义jar目前只能读取application.properties和application.yml吧。可以用一个简单点的方法进行监听注入,在工具包内写一个init方法,在springboot启动时初始化就可以了。比如springboot启动完成后读取配置文件,然后注入到工具包内。
以jar包发布springboot项目时,默认会先使用jar包同级目录下的application.properties来作为项目配置文件。但使用--spring.config.location指定了配置文件,则读取指定的配置文件。
对此,我们可以将springboot项目的配置文件『挪到』jar包之外,然后再启动springboot项目时再指定它使用外部的这些配置文件。
在此处,我们可以使用java-jardemo-0.01-SNAPSHOT来运行项目。正常运行。当我们将其打成jar包时,application.properties同样不会被打包进jar包中。需要另外复制出来和jar包放在才能正常运行。
配置文件SpringBoot使用一个全局的配置文件application.propertiesapplication.yml配置文件的作用:修改SpringBoot自动配置的默认值,SpringBoot在底层都给我们自动配置好。
常规的,在springboot中一般只需要拿appolo或者nacos里配置的属性就够了。
Java读取配置文件的几种方法
在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法。一、读取xml配置文件(一)新建一个java beanpackage chb.demo.vo;public class HelloBean {private String helloWorld;public String getHelloWorld() {return helloWorld;}public void setHelloWorld(String helloWorld) {this.helloWorld = helloWorld;}}(二)构造一个配置文件?xml version="1.0" encoding="UTF-8"?!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ""beansbean id="helloBean" class="chb.demo.vo.HelloBean"property name="helloWorld"valueHello!chb!/value/property/bean/beans(三)读取xml文件1.利用ClassPathXmlApplicationContextApplicationContext context = new ClassPathXmlApplicationContext("beanConfig.xml");HelloBean helloBean = (HelloBean)context.getBean("helloBean");System.out.println(helloBean.getHelloWorld());2.利用FileSystemResource读取Resource rs = new FileSystemResource("D:/software/tomcat/webapps/springWebDemo/WEB-INF/classes/beanConfig.xml");BeanFactory factory = new XmlBeanFactory(rs);HelloBean helloBean = (HelloBean)factory.getBean("helloBean");System.out.println(helloBean.getHelloWorld());值得注意的是:利用FileSystemResource,则配置文件必须放在project直接目录下,或者写明绝对路径,否则就会抛出找不到文件的异常。二、读取properties配置文件这里介绍两种技术:利用spring读取properties 文件和利用java.util.Properties读取(一)利用spring读取properties 文件我们还利用上面的HelloBean.java文件,构造如下beanConfig.properties文件:helloBean.class=chb.demo.vo.HelloBeanhelloBean.helloWorld=Hello!chb!属性文件中的"helloBean"名称即是Bean的别名设定,.class用于指定类来源。然后利用org.springframework.beans.factory.support.PropertiesBeanDefinitionReader来读取属性文件BeanDefinitionRegistry reg = new DefaultListableBeanFactory();PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(reg);reader.loadBeanDefinitions(new ClassPathResource("beanConfig.properties"));BeanFactory factory = (BeanFactory)reg;HelloBean helloBean = (HelloBean)factory.getBean("helloBean");System.out.println(helloBean.getHelloWorld());(二)利用java.util.Properties读取属性文件比如,我们构造一个ipConfig.properties来保存服务器ip地址和端口,如:ip=192.168.0.1port=8080则,我们可以用如下程序来获得服务器配置信息:InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ipConfig.properties");Properties p = new Properties();try {p.load(inputStream);} catch (IOException e1) {e1.printStackTrace();}System.out.println("ip:"+p.getProperty("ip")+",port:"+p.getProperty("port"));
SpringBoot读取配置数据的几种方式
方式一: 我们通过 @Value("${spring.datasource.url}") 这样的方式读取PropertyPlaceholderConfigurer.properties配置数据集合,本种方式是可以适应各种应用场景,推荐使用本方式读取配置文件
方式二: 这种写法系统会依据prefix前缀自动注入配置数据到数据实体变量,这种方式不错,但是存在缺陷,我们编写的PropertyPlaceholderConfigurer扩展字段会无效,所以如果只是单纯的读取配置而不需要额外操作时可使用这方式最简单
方式三: 我们可以直接注入Environment对象示例并读取properties对象属性,与方式一的本质差不多,我们不需要编写对应字段的模型对象,但是对于程序可阅读性不好友,复用率不高
方式四: 通过系统启动时候初始化Listener,使用PropertiesLoaderUtils工具类读取指定配置文件并获得Properties配置对象,我们可以随时随地使用该对象的属性,这种方式比较少用,针对比较自定义的配置数据可使用该方式
Spring加载配置文件的方式
转: https://blog.csdn.net/HaHa_Sir/article/details/79105951
1、用法示例: 在spring.xml配置文件中添加标签
2、在 spring.xml 中使用配置文件属性:
3、在java文件中使用:
需开启注解注入:
或
1、用法示例: 在spring.xml配置文件中添加标签
2、在spring.xml 中使用配置文件属性:
3、在java文件中使用:
1、用法示例:在java类文件中使用 PropertySource 注解:
2、在java文件中使用:
1、用法示例:在 spring.xml 中使用
标签进行配置
2、 PropertyPlaceholderConfigurer 配置方法,等价于 方式一,用法参考方法一
五、 还可以使用 org.springframework.beans.factory.config.PropertiesFactoryBean 加载,这里不再逐一列举了。
Springboot 读取配置文件原理
Springboot 读取配置文件(application.yaml, application.properties)的过程发生在SpringApplication#prepareEnvironment() 阶段,而prepareEnvironment又属于整个Springboot 应用启动的非常前置阶段,因为Environment的准备是后续bean创建的基础。让我们来一探启动是的详细code。除去StopWatch这些code,可以发现prepareEnvironment 发生在SpringApplication#run 这在整个应用启动的多步实质性操作中几乎是第一步。
而prepareEnvironment中最重要的是通过触发listener(EventPublishingRunListener)来通过SimpleApplicationEventMulticaster#multicastEvent发出ApplicationEnvironmentPreparedEvent。
而SimpleApplicationEventMulticaster#multicastEvent的实现其实也很简单,找到相关的监听ApplicationEnvironmentPreparedEvent的listener,然后一个个的调用他们的Listener#onApplicationEvent(event)方法,而这其中就包括了处理configuration文件的listener。 在Springboot 2.4.0 之前这个处理configuration 文件的lister是ConfigFileApplicationListener,在2.4.0之后,处理configuration 文件的lister是EnvironmentPostProcessorApplicationListener,并且对configuration文件的加载做了较大的改变,导致一些行为可能出现了变化,这也就是下面要详细讲的内容。
Springboot 2.4.0之后,configuration 文件的load顺序按照优先级是如下顺序(序号大的会被小的覆盖):
和之前版本比较,整体的属性加载顺序并无调整,只有Application properties(14,15)这里有顺序的调整,具体调整为:
如果存在多个active的profiles,例如[Test, Dev], 那么对于同时存在两个profile 配置文件中的配置,后面的profile里的配置(Dev)会覆盖前面profile(Test)里配置的值。
前面讲了这么多,终于要引出Springboot 2.4之后配置文件加载的行为变化了。
考虑这样的情况,如果我想在跑Springboot test的时候指定特定的profile,那么可以在Test class中加入@ActiveProfile("Test")。 如果我的应用中存在ApplicationEnvironmentPreparedEvent的某个自定义listener中,会根据当前environment 设置profile,如env.addActiveProfile("Dev")。 当前就会有两个active profile,由于springboot-test会在调用application#run 前利用DefaultActiveProfilesResolver把@ActiveProfile注解定义的profile(Test)先加入了active的profile,等test run的时候 env.addActiveProfile("Dev") 又会把"Dev"也作为active profile 加入,这时候当前的active profile便为["Test", "Dev"]。
据上面介绍,后面的profile(Dev)对应的configuration 会覆盖前面的(Test)。可Springboot 2.4.0之前的版本为我们做了调整,让Test class中@ActiveProfile内定义的profile所对应的配置文件成为最高优先级。
刚才提到在Springboot 2.4.0 之前这个处理configuration 文件的lister是ConfigFileApplicationListener,我们 来看看ConfigFileApplicationListener的相关code。
查看initializeProfiles(),发现此时对profile的顺序做了调整,将activatedViaProperty (Test) 放在最后add,于是profile的顺序就变成了[Dev, Test]。
在profiles.poll()时原本profile的顺序已经倒了过来,已经变为[Dev, Test], 在load()方法中由于后置的Test profile,application-Test.yaml中的值最终生效了。
可是到了Springboot2.4.0之后,ConfigFileApplicationListener被deprecated了,取而代之的是EnvironmentPostProcessorApplicationListener,EnvironmentPostProcessorApplicationListener通过调用ConfigDataEnvironmentPostProcessor来完成configuration加载。 EnvironmentPostProcessorApplicationListener.java
ConfigDataEnvironmentPostProcessor.java
ConfigDataEnvironmentPostProcessor只是老老实实的set了active profile,并没有调换profile的顺序。最后调用定义在spring.factories中的resource loader class来load 配置文件。
YamlPropertySourceLoader.java
插一句,Springboot为我们提供了很好的yaml文件parse的code,当你需要解析yaml文件时不妨直接参考Springboot的YamlPropertySourceLoader
这样一旦应用升级到Springboot 2.4.0之后相同的test code会使用application-Dev.yaml中配置的值,造成了test结果的改变。 如果要解决这个问题,根据上面介绍的配置文件优先级顺序,可以在@SpringbootTest中设置properties 来作为最终的配置覆盖当前profile对应的配置。
了解一个框架很不容易,一个小小的变化都有可能造成应用的行为变化,唯有刨根问底,不断总结才是framework人解决一切问题的不变的方法论。
spring取配置文件的值
文件。spring取配置文件的值是文件。spring取配置文件运行时读取配置文件的多种方式和SpEl表达式入门基础,运行时读取配置文件spring运行时读取配置文件值。
Springboot打成JAR包后读取外部配置文件
Springboot的application.properties配置文件的加载路径优先级(从高到低):
当Springboot打成JAR包(不包含配置文件),读取外部配置文件application.properties时,可以选择:
SpringBoot有几种读取配置的方式?
常见的读取配置的方式有三种:
第一、@Value注解,比较常用的一种方式。也支持与@propertySource注解何用,指定使用的配置文件
第二、@Configuration注解,读取配置到类中,批量注入配置属性
第三、Environment对象,获取配置文件中所有的属性的对象
如果你想掌握时下热门微服务技术栈,跟上时代技术步伐,就去黑马程序员官网视频库看免费视频。
如何在spring中读取properties配置文件里面的信息
一般来说。我们会将一些配置的信息放在。properties文件中。
然后使用${}将配置文件中的信息读取至spring的配置文件。
那么我们如何在spring读取properties文件呢。
1.首先。我们要先在spring配置文件中。定义一个专门读取properties文件的类.
例:
classpath*:jdbc.properties
这里为什么用locations(还有一个location)
是因为。一般来说。我们的项目里面。配置文件可能存在多个。
就算是只有一个。那将来新添加的话。只需在下面再加一个value标签即可。
而不必再重新改动太多。(当然。性能上是否有影响,这个以当前这种服务器的配置来说。是基科可以忽略不计的)。
然后我们就可以在jdbc.properties文件中填写具体的配置信息了。
${jdbc.driverClassName}
${jdbc.url}
${jdbc.username}
${jdbc.password}
jdbc.properties文件写的信息。
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
附加一个列子:
file:/data/pc-config/passport.properties
classpath:memcached.properties
classpath:是指的当前类文件的目录下。
file:在window下是指的当前分区(比如你的项目是放在d盘,则是在d:/data/pc-config/passport.properties)
在linux下,则是当前路径下的文件/data/pc-config/passport.properties
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦