spring boot 如何读取自定义配置
目前采用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
我猜是你的目录结构不对吧,你的application.properties应该放在src/main/resource下面
另外可以最好通过指定外部配置文件的方式启动:
有一篇讲spring boot部署的文章可以看看:部署Spring Boot应用,这个网站里有很多关于spring boot的文章,最最重要的是还有代码!
自己顶一下。。。。。各位问问题的太多了,瞬间沉入海底,再顶
你这个尝试太多方法了啊。
第一种:指定一下属性文件就可以了:
@PropertySources({ @PropertySource(value = "classpath:application.properties", ignoreResourceNotFound = true), @PropertySource(value = "file:./application.properties", ignoreResourceNotFound = true) })
为这个问题补上一个比较傻的原因..
我是在src/main/resources里有一个application.properties,另外在src/test/resources里也写了一个作为测试用。然后用@Value注入这些配置。跑junit测试时就报错了,原因就是自己只在src/main/resources里的application.properties中写了要注入的东西,忘记给src/test/resources里的配置文件也写上。而跑测试时会优先读取src/test/resources中的application.properties。。
今天碰到和楼主一样的问题,谷百后发现问题应该是在DesProperties这个类里面,@ConfigurationProperties这个注解有location 和 prefix两个属性,但是spring1.4以上已经不支持了,多以需要+@PropertySource(value = "classpath:my-web.properties"),指定自定义的配置文件,最后还要加@Component部署,这样才能在用@AutoWired注入。终于解决了,还是蛮开心的
属性上注解
@Value("${des.key}")
行不行,楼主解决这个问题了吗?我现在只能在Controller里面取,但是要在Utils类里取不到,有什么好的办法吗?
管理配置的实体类DesProperties没加注解@Component