我目前正在学习如何使用Spring Boot。到目前为止,我从未使用过像Spring这样的框架,也没有直接使用过文件(FileInputStream等)。
情况就是这样:我有一些动态配置值,例如OAuth令牌。我想在我的应用程序中使用它们,但是我不知道如何用Spring实现它们。
这是一些代码来明确我要搜索的内容:
@Config("app.yaml") public class Test { @Value("app.token") private String token; private IClient client; public Test(String token) { this.client = ClientFactory.build(token).login(); } }
当然,这个例子很简单。在这里,我想从YAML配置文件中动态获取值“ token”。该文件必须可供用户访问,并且不包含在JAR文件中。
我还发现了该文档:https : //docs.spring.io/spring-boot/docs/current/reference/html/boot-features- external-config.html,但是我现在知道如何将其应用于我的项目。
我该如何实现?先感谢您 :)
编辑:
这是我的代码的某些部分:
看门狗Bootstrap.java
package de.onkelmorph.watchdog; import org.springframework.boot.Banner.Mode; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportResource; @SpringBootApplication @ImportResource("classpath:Beans.xml") public class WatchdogBootstrap { public static void main(String[] args) { SpringApplication app = new SpringApplication(WatchdogBeans.class); app.setBannerMode(Mode.OFF); app.setWebEnvironment(false); app.run(args); } }
Beans.xml (位于默认包中)
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:annotation-config></context:annotation-config> </beans>
看门狗
package de.onkelmorph.watchdog; // Imports ... @Component @PropertySource("file:/watchdog.yml") public class Watchdog { // ... // Configuration @Value("${watchdog.token}") private String token; public Watchdog() { System.out.println(this.token); System.exit(0); } // ... }
watchdog.yml (位于src / main / resources中)
watchdog: token: fghaepoghaporghaerg
首先,Test应该为您的类添加注释,@Component以便在spring之前将其注册为Bean(还要确保所有类都位于您的主程序包下- 主程序包是带有注释的类@SpringBootApplication所在的位置)。
Test
@Component
@SpringBootApplication
现在,您应该将所有属性移至application.yml(src/main/resources/application.yml),由Spring Boot自动选择(请注意,它应.yml代替.yaml或注册一个custom)PropertySourcesPlaceholderConfigurer。
application.yml
src/main/resources/application.yml
.yml
.yaml
PropertySourcesPlaceholderConfigurer
示例PropertySourcesPlaceholderConfigurer:
@Bean public static PropertySourcesPlaceholderConfigurer PropertySourcesPlaceholderConfigurer() throws IOException { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); MutablePropertySources propertySources = new MutablePropertySources(); Resource resource = new DefaultResourceLoader().getResource("classpath:application.yml"); YamlPropertySourceLoader sourceLoader = new YamlPropertySourceLoader(); PropertySource<?> yamlProperties = sourceLoader.load("yamlProperties", resource, null); propertySources.addFirst(yamlProperties); configurer.setPropertySources(propertySources); return configurer; }
现在,应该将属性加载到spring的环境中,并且可以将其注入@Value到您的bean中。
@Value