【发布时间】:2021-10-14 02:58:59
【问题描述】:
我有一个简单的Spring Core 项目,我正在从src/main/resources/application.properties 文件中读取一些值。
Team.java
@Setter
@Getter
@ToString
@Component
@PropertySource("classpath:application.properties")
public class Test {
@Value("${teamName}")
private String teamName;
@Value("${players}")
private List<String> players;
}
App.java
@ComponentScan
public class App {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(App.class);
Team team = applicationContext.getBean(Team.class);
System.out.println(team.getTeamName());
System.out.println(team.getPlayers() + " " + team.getPlayers().size());
}
}
application.properties
teamName=Avengers
players=Iron Man,Captain America,Thor,Hulk
输出
Avengers
[Iron Man,Captain America,Thor,Hulk] 1
teamName 读取完美,但当涉及到players 时,它会将所有玩家值读取为单个字符串。理想情况下,玩家大小应该是4,但得到了1。当我将 @Value("${players}") 更改为 @Value("#{'${players}'.split(',')}") 时,它按预期工作。意味着我正在获取玩家大小4。
现在的问题是,在Spring Boot 和@Value("${players}") 中使用相同的代码给我的玩家大小为4,但在正常的Spring core 项目中给我1。那么它背后的原因是什么,你能给我一个应该在 Spring 核心项目中工作的解决方案吗?我的意思是如何处理@Value("${players}"),以便我可以将玩家尺寸设为4?
【问题讨论】:
-
嗨@Tom,我已经阅读了该文档,然后我发布了这个问题。我已经在问题中提到,当我使用
@Value("#{'${players}'.split(',')}")时,会按照我仅从该文档中获得帮助的期望工作。但是当我使用@Value("${players}")时,它不能按预期工作。但同样的事情,即@Value("${players}")inSpring Boot给了我玩家大小4。为什么? -
我链接的那个答案不使用SpEL。
标签: java spring spring-boot properties spring-annotations