我有一个Spring Boot应用程序,它使用Spring配置文件创建特定于环境的配置,例如:
@Configuration
@Profile("local")
public class LocalConfiguration
...
@Configuration
@Profile("prod")
public class ProdConfiguration
...
我有一个@RestContoller,它需要访问配置从application.properties
加载的值。如何在控制器中注入当前环境特定的配置bean?
示例:
@Autowired
private <config_based_on_env_here> config;
@RestController
public String getSomeString() {
return config.getSomeString();
}
如果需要访问application.properties
或.yaml
配置中的值,可以使用更简单的方法来实现。
首先配置不同的配置:
application-local.properties
my.value=local-value
application-prod.properties
my.value=prod-value
创建读取所需值的配置:
@Configuration
@ConfigurationProperties(prefix = "my")
public class ConfigProperties {
private String value;
// standard getters and setters
}
最后,您可以在控制器上自动连接此配置:
@RestController
class MyController {
@Autowire
private ConfigProperties config;
@GetMapping("/hello")
public void hello() {
System.out.println("Config value: " + config.getValue());
}
}
当您使用所需的配置文件运行应用程序时,将在控制器上加载并访问相应的配置文件。
此外,您可以查看@Value annotation
其他资源:
- 外部化配置
- Spring中的配置属性
- Spring@Value快速指南
Spring将基于配置的属性保存在Environment类的实例中。如果您将属性保存在名为application-local.properties和application-prod.properties的文件中,则不需要如图所示显式声明bean。Spring将根据激活的配置文件选择正确的属性文件。注入环境如下:
@Autowired
private Environment config;
您可以使用@Value注释并访问属性&配置,指定使用的Springbean中的哪个文件
在类的顶部添加@配置
@Configuration("employeeProperties")
class YourClass{}
在使用时,你可以添加类似于这个的东西
@Value("${userBucket.path}")
private String userBucketPath;
我希望它能帮助