spring boot 如何读取自定义配置

发布于 2022-09-01 21:18:50 字数 3227 浏览 19 评论 0

目前采用spring-boot快速开发一个restful api的应用,在配置文件这块卡住了,请求各位大神。
我根据网上的方法尝试了两种都不ok
第一种:基于application.properties配置文件新增

配置文件信息:

application:
   des:
      key=123456

引用代码信息:

@RestController
@RequestMapping(value="/app")
@EnableAutoConfiguration
public class ServiceConfigController {

    @Value("${application.des.key}")
    String desKey;

以上方式是根据这篇博客来弄的深入学习微架构
报错:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'application.des.key' in string value "${application.des.key}"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:175)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:801)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:955)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
    ... 18 more

不知道是识别不了配置文件中的语法还是找不到这个配置。

我还尝试了一下配置书写方式:

application.des.key=1231

也是报错。

第二种还是基于application.properties配置文件

配置文件信息

des.key=123

新建一个java bean

@ConfigurationProperties(prefix="des")
public class DesProperties {

    private String key;

   //此处省略getter和setter方法
}

引用代码:

    @Autowired
    DesProperties desProperties;

启动类代码:

@SpringBootApplication
@EnableConfigurationProperties(DesProperties.class)
public class Start {

    public static void main(String[] args) {
        SpringApplication.run(Start.class, args);
    }
}

启动不报错,但是注解的引用是一个空的对象,可能是我配置的bean没有被注入成功。。表示无解。

第三种方式:采用自定义的配置文件 config.properties

配置文件信息:

des.key=123

java bean配置:

@ConfigurationProperties(prefix = "des",locations = "classpath:config/config.properties") 
public class DesProperties {

    private String key;

   //此处省略getter和setter方法
}

启动类代码:

@SpringBootApplication
@EnableConfigurationProperties(DesProperties.class)
public class Start {

    public static void main(String[] args) {
        SpringApplication.run(Start.class, args);
    }
}

一样的,启动不报错,引用的时候,是一个空对象。
求各位大神指教。。。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

杀お生予夺 2022-09-08 21:18:50

我猜是你的目录结构不对吧,你的application.properties应该放在src/main/resource下面

另外可以最好通过指定外部配置文件的方式启动:

java -jar location_of_your_jar_file.jar --spring.config.location=location_of_your_config_file.properties

有一篇讲spring boot部署的文章可以看看:部署Spring Boot应用,这个网站里有很多关于spring boot的文章,最最重要的是还有代码!

苦行僧 2022-09-08 21:18:50

自己顶一下。。。。。各位问问题的太多了,瞬间沉入海底,再顶

烏雲後面有陽光 2022-09-08 21:18:50

你这个尝试太多方法了啊。
第一种:指定一下属性文件就可以了:
@PropertySources({ @PropertySource(value = "classpath:application.properties", ignoreResourceNotFound = true), @PropertySource(value = "file:./application.properties", ignoreResourceNotFound = true) })

淡忘如思 2022-09-08 21:18:50

为这个问题补上一个比较傻的原因..

我是在src/main/resources里有一个application.properties,另外在src/test/resources里也写了一个作为测试用。然后用@Value注入这些配置。跑junit测试时就报错了,原因就是自己只在src/main/resources里的application.properties中写了要注入的东西,忘记给src/test/resources里的配置文件也写上。而跑测试时会优先读取src/test/resources中的application.properties。。

北凤男飞 2022-09-08 21:18:50

今天碰到和楼主一样的问题,谷百后发现问题应该是在DesProperties这个类里面,@ConfigurationProperties这个注解有location 和 prefix两个属性,但是spring1.4以上已经不支持了,多以需要+@PropertySource(value = "classpath:my-web.properties"),指定自定义的配置文件,最后还要加@Component部署,这样才能在用@AutoWired注入。终于解决了,还是蛮开心的

病女 2022-09-08 21:18:50

属性上注解
@Value("${des.key}")
行不行,楼主解决这个问题了吗?我现在只能在Controller里面取,但是要在Utils类里取不到,有什么好的办法吗?

胡大本事 2022-09-08 21:18:50
application:
   des:
      key:123456
携余温的黄昏 2022-09-08 21:18:50

管理配置的实体类DesProperties没加注解@Component

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文