如何访问Spring控制器中的配置bean



我有一个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;

我希望它能帮助

相关内容

  • 没有找到相关文章

最新更新