Spring 从文件系统读取配置文件, 使用@PropertySource

如果路径配置不对会发生异常  java.io.FileNotFoundException:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [cn.com.onstar.shared.config.AppConfigDev]; nested exception is java.io.FileNotFoundException: class path resource [c:/application.properties] cannot be opened because it does not exist
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:177)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:306)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:239)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:254)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:94)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:606)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:462)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:125)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:109)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:261)
    at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:68)
    at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86)
    ... 25 more
Caused by: java.io.FileNotFoundException: class path resource [c:/application.properties] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
    at org.springframework.core.io.support.EncodedResource.getInputStream(EncodedResource.java:143)
    at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:98)
    at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:72)
    at org.springframework.core.io.support.PropertiesLoaderUtils.loadProperties(PropertiesLoaderUtils.java:58)
    at org.springframework.core.io.support.ResourcePropertySource.<init>(ResourcePropertySource.java:83)
    at org.springframework.context.annotation.ConfigurationClassParser.processPropertySource(ConfigurationClassParser.java:333)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:249)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:226)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:193)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:163)
    ... 37 more


主要原因是配置文件路径写的不对

错误的写法: @PropertySource(value = { "c:/application.properties" })

应该修改为: @PropertySource(value = { "file:c:/application.properties" })


==========END


`@PropertySource`注解默认只支持`.properties`格式的配置文件,不支持`.yaml`和`.yml`格式的配置文件。如果需要读取`.yaml`或`.yml`格式的配置文件,可以使用`@ConfigurationProperties`注解来读取。 假设我们有一个`application.yml`配置文件,在其中定义了一个`my.package`变量,我们可以按照以下方式在`RestControllerAdvice`中使用它: 1. 在`application.yml`中定义变量: ```yaml my: package: com.example.myapp ``` 2. 在`RestControllerAdvice`中使用`@ConfigurationProperties`注解读取配置文件中的变量: ```java @ConfigurationProperties(prefix = "my") public class MyProperties { private String package; public String getPackage() { return package; } public void setPackage(String packageName) { this.package = packageName; } } @RestControllerAdvice(basePackages = "#{@myProperties.package}") public class MyRestControllerAdvice { // ... } ``` 在这个例子中,`@ConfigurationProperties`注解用于读取`application.yml`中的`my.package`属性,并将其映射为`MyProperties`对象的`package`属性。然后,我们可以使用SpEL表达式`#{@myProperties.package}`来引用这个属性,从而指定了`MyRestControllerAdvice`所要扫描的包。需要注意的是,`@ConfigurationProperties`注解需要在Spring配置类中使用,并且要将`MyProperties`对象注册到Spring容器中。 这样,就可以使用`@ConfigurationProperties`注解来读取`.yaml`和`.yml`格式的配置文件,并将其中的变量传递给`basePackages`属性了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值