当我在SpringApplicationBuilder
中静态放置一些属性时,我有以下代码
@SpringBootApplication(scanBasePackages = { "com" })
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplicationBuilder parentBuilder = new SpringApplicationBuilder(Application.class);
parentBuilder.child(RestConfiguration.class, SwaggerConfig.class)
.properties("server.port:9093")).web(WebApplicationType.SERVLET).run(args);
}
}
我想将属性移动到文件application.properties
application.port.query=9093
我使用@value
读取应用程序文件,但结果为null。有没有其他方法可以在静态方法中读取数据?
尝试类似的东西
@Configuration
@ConfigurationProperties("application")
class A {
public static int queryPort;
@Value("${port.query:9093}")
public void setQueryPort(final int portQuery){
A.queryPort = portQuery;
}
}
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplicationBuilder parentBuilder = new SpringApplicationBuilder(Application.class);
parentBuilder.child(RestConfiguration.class, SwaggerConfig.class)
.properties(A.queryPort)).web(WebApplicationType.SERVLET).run(args);
}
}
想要实现目标,最好的方法是使用springbean本身,它是所有配置的父级org.springframework.core.env.env.Environment
@SpringBootApplication(scanBasePackages = {"com"})
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext =
SpringApplication.run(Application.class, args);
Environment environment = applicationContext.getBean(Environment.class);
String propertyValue = environment.getProperty("any.property.from.configuration")
}
}
在您的用例中,只需获取Environment
的bean,并从Environment
对象获取任何属性值。