英文:
spring.application.name property in application.yaml is fetched as null if profile is active
问题
我有一个application.yaml文件,用来指定服务的名称:
spring:
application:
name: "my-microservice"
现在,当我尝试在代码中使用@Value("spring.application.name")来获取它时,我能够成功地做到这一点。
但是我还使用了一个名为"dev"的配置文件,为此我创建了一个单独的application-dev.yaml文件,但是在这个yaml文件中我没有指定spring.application.name。
现在,当我尝试运行我的代码时,@Value注解给我返回一个空值。
我原以为application-dev.yaml没有指定的字段应该会使用application.yaml中的值来填充,但显然这并没有发生。
我是不是应该只是从默认文件中复制每个通用字段到dev的应用程序文件中?还是还有其他办法?任何帮助都将不胜感激,谢谢
英文:
I have an application.yaml file which specifies the service's name:
spring:
application:
name: "my-microservice"
Now, when I try to fetch it using @Value("spring.application.name") inside my code, I'm able to do that successfully.
But I'm also using a "dev" profile for which I created a separate application-dev.yaml, but I didn't specify the spring.application.name inside this yaml.
Now, when I try to run my code, the @Value annotation gives me a null.
I thought that the fields not specified by application-dev.yaml should be populated using application.yaml, but apparently this is not happening.
Am I supposed to just copy every common field from the default to the dev's application file? Or is there any other way? Any help is appreciated, Thanks
答案1
得分: 3
- 你需要使用Spring表达式语言,应该这样写:
@Value("${spring.application.name}")
private String appName;
- 如果在yaml/yml或属性文件中找不到键的默认值:
@Value("${spring.application.name: defaultValue}")
private String appName;
- 最后一种方式是使用环境对象获取值:
@Autowired
private Environment environment;
String appName = environment.get("spring.application.name");
英文:
- You need to use Spring Expression Language which says we should write it as
@Value("${spring.application.name}")
private String appName;
- For Default value if key is not present in yaml/yml or properties file
@Value("${spring.application.name: defaultValue}")
private String appName;
- The last way you can fetch value is using environment object
@Autowired
private Environment environment;
String appName = environment.get("spring.application.name");
答案2
得分: 0
我找到了问题。
默认的application.yaml属性确实由Spring读取所有配置文件(除非它们被某个配置文件的配置覆盖了)。
但在我的情况下,我尝试在静态字段上使用@Value注解。
@Value("${spring.application.name}")
private static String applicationName;
这导致了我的代码中的空指针异常。将字段中的静态上下文移除对我有用。
英文:
Ok I figured out the problem.
It is true that the default application.yaml properties are read by spring for all profiles (unless they have been overwritten by a profile's application file)
But in my case, I was trying to use the @Value annotation on a static field.
@Value("${spring.application.name}")
private static String applicationName;
This caused the null exception in my code. Removing the static context from the field worked for me.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论