.properties 파일에 값 목록을 갖고 싶습니다.
my.list.of.strings=ABC,CDE,EFG
그리고 내 수업에 직접로드하려면 :
@Value("${my.list.of.strings}")
private List<String> myList;
내가 이해하는 것처럼, 이것을 수행하는 대안은 그것을 스프링 설정 파일에 넣고 빈 참조로로드하는 것입니다 (잘못된 경우 수정하십시오).
<bean name="list">
<list>
<value>ABC</value>
<value>CDE</value>
<value>EFG</value>
</list>
</bean>
그러나 이것을 수행하는 방법이 있습니까? .properties 파일을 사용합니까? 추신 : 가능한 경우 사용자 정의 코드 없이이 작업을 수행하고 싶습니다.
답변
스프링 EL 사용하기 :
@Value("#{'${my.list.of.strings}'.split(',')}")
private List<String> myList;
다음과 같이 특성 파일이 올바르게로드되었다고 가정하십시오.
my.list.of.strings=ABC,CDE,EFG
답변
Spring 3.0부터 다음과 같은 줄을 추가 할 수 있습니다
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean" />
당신 applicationContext.xml
(또는 당신이 물건을 구성하는 곳)에. Dmitry Chornyi가 주석에서 지적한 것처럼 Java 기반 구성은 다음과 같습니다.
@Bean public ConversionService conversionService() {
return new DefaultConversionService();
}
이것은 다음으로의 변환 String
을 지원하는 새로운 구성 서비스를 활성화합니다Collection
유형 . 이 구성 서비스를 활성화하지 않으면 Spring은 레거시 속성 편집기를 구성 서비스로 대체하여 이러한 종류의 변환을 지원하지 않습니다.
다른 유형의 컬렉션으로 변환해도 작동합니다.
@Value("${my.list.of.ints}")
private List<Integer> myList
같은 라인으로 작동합니다
my.list.of.ints= 1, 2, 3, 4
공백에는 문제가 없습니다. ConversionServiceFactoryBean
처리합니다.
Spring 애플리케이션에서는 일반적으로 Spring 컨테이너 (또는 ApplicationContext)마다 ConversionService 인스턴스를 구성합니다. 해당 ConversionService는 Spring에서 픽업 한 다음 프레임 워크에서 유형 변환을 수행해야 할 때마다 사용됩니다. […] Spring에 ConversionService가 등록되어 있지 않으면 원래 PropertyEditor 기반 시스템이 사용됩니다.
답변
이 내용을 읽고 Spring Boot를 사용 하는 경우이 기능에 대한 추가 옵션이 1 개 있습니다
일반적으로 쉼표로 구분 된 목록은 실제 사용 사례에서 매우 어색합니다 (그리고 구성에서 쉼표를 사용하려는 경우 때로는 불가능합니다).
email.sendTo=somebody@example.com,somebody2@example.com,somebody3@example.com,.....
Spring Boot를 사용하면 다음과 같이 작성할 수 있습니다 (Index start at 0) :
email.sendTo[0]=somebody@example.com
email.sendTo[1]=somebody2@example.com
email.sendTo[2]=somebody3@example.com
다음과 같이 사용하십시오.
@Component
@ConfigurationProperties("email")
public class EmailProperties {
private List<String> sendTo;
public List<String> getSendTo() {
return sendTo;
}
public void setSendTo(List<String> sendTo) {
this.sendTo = sendTo;
}
}
@Component
public class EmailModel {
@Autowired
private EmailProperties emailProperties;
//Use the sendTo List by
//emailProperties.getSendTo()
}
@Configuration
public class YourConfiguration {
@Bean
public EmailProperties emailProperties(){
return new EmailProperties();
}
}
#Put this in src/main/resource/META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=example.compackage.YourConfiguration
답변
my.list.of.strings=ABC,CDE,EFG
in .properties 파일 을 지정하고
@Value("${my.list.of.strings}")
private String[] myString;
문자열 배열을 얻을 수 있습니다. 를 사용 CollectionUtils.addAll(myList, myString)
하면 문자열 목록을 얻을 수 있습니다.
답변
@Autowired
생성자 또는 세터 String.split()
를 사용하고 본문 을 고려한 적이 있습니까?
class MyClass {
private List<String> myList;
@Autowired
public MyClass(@Value("${my.list.of.strings}") final String strs) {
myList = Arrays.asList(strs.split(","));
}
//or
@Autowired
public void setMyList(@Value("${my.list.of.strings}") final String strs) {
myList = Arrays.asList(strs.split(","));
}
}
내 코드의 테스트 가능성을 향상시키기 위해 다음 방법 중 하나로 자동 배선을 선호합니다.
답변
Spring Boot 2를 사용하는 경우 추가 구성없이 그대로 작동합니다.
my.list.of.strings=ABC,CDE,EFG
@Value("${my.list.of.strings}")
private List<String> myList;
답변
위의 모든 답변이 정확합니다. 그러나 한 줄로만 달성 할 수 있습니다. 다음 선언을 시도하면 쉼표로 구분 된 모든 값이 문자열 목록에 표시됩니다.
private @Value("#{T(java.util.Arrays).asList(projectProperties['my.list.of.strings'])}") List<String> myList;
또한 XML 구성에 다음 줄이 정의되어 있어야합니다.
<util:properties id="projectProperties" location="/project.properties"/>
속성 파일의 경로와 파일 이름을 바꾸십시오. 그리고 당신은 갈 수 있습니다. 🙂
이것이 도움이되기를 바랍니다. 건배.