我正在尝试获取属性的值
hello.world=Hello World
MainApp类中的
@SpringBootApplication
public class MainApp {
public static void main(String[] args) {
SpringApplication.run(MainApp.class, args);
}
这不是主要方法。
@Value("${hello.world}")
public static String helloWorld;
也许可以通过
加载 Properties prop = new Properties();
// load a properties file
prop.load(new FileInputStream(filePath));
有没有其他更好的方法在SpringApplication.run之前的SpringBoot主方法中使用Spring获取属性
答案 0 :(得分:2)
ConfigurableApplicationContext ctx =
SpringApplication.run(MainApp.class, args);
String str = ctx.getEnvironment().getProperty("some.prop");
System.out.println("=>>>> " + str);
答案 1 :(得分:1)
@SpringBootApplication
public class MainApp {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(MainApp.class);
springApplication.addListeners(new VersionLogger());
springApplication.run(args);
}
// The VersionLogger Class
public class VersionLogger implements ApplicationListener<ApplicationEnvironmentPreparedEvent>{
@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent applicationEvent) {
String helloWorld = applicationEvent.getEnvironment().getProperty("hello.world");
}
}
<强> ApplicationEnvironmentPreparedEvent 强> 当SpringApplication启动并且环境首次可用于检查和修改时发布的事件。
答案 2 :(得分:1)
不要这样做。最好使用CommandLineRunner。 有了这个,您可以拥有一个Spring Boot将自动为您运行的非静态方法:
@SpringBootApplication
public class SimulatorApplication implements CommandLineRunner {
@Value("my-value")
private myValue;
public static void main(String[] args) {
SpringApplication.run(SimulatorApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
// here you can access my-value
}
}
答案 3 :(得分:0)
您已将变量helloWorld声明为static。因此,您需要使用Setter Injection而不是Field Injection。
注入静态非最终字段是一种不好的做法。因此Spring并不允许它。但你可以做这样的解决方法。
public static String helloWorld;
@Value("${hello.world}")
public void setHelloWorld(String someStr) {
helloWorld = someStr
}
如果是其他任何类,您可以在类中的任何位置访问此变量helloWorld。但是如果你想在主类中做到这一点。您只能在此行
之后访问该变量 SpringApplication.run(MainApp.class, args);)
,即仅在申请开始后。
答案 4 :(得分:0)
我们无法将值读入静态字段。以下解释提供了更好的见解How to assign a value from application.properties to a static variable?
答案 5 :(得分:0)
ApplicationContext applicationContext = SpringApplication.run(Application.class, args);
String applicationPropertyVersion=applicationContext.getEnvironment().getProperty("application.property.version");
LOGGER.info("RELEASE CODE VERSION {} and applicationProperty Version {} ", LcoBuildVersion.version,
applicationPropertyVersion);