0
나는 (Elasticsearch에서) Client의 인스턴스를 생성하는 bean을 만들고 싶다. 그러나 Spring에서 Factory Bean을 구성하지 않았기 때문에 읽은 후에 바로 가져 왔는지 궁금합니다. 연결은 한 번만 열리고 닫히기 때문에 응용 프로그램이 종료 될 때 close
메서드를 호출하기 때문에 정적 버전 대신 factory-bean 속성을 사용해야한다고 생각합니다. class 속성을 사용할 때 close
메소드를 호출 할 수 없었습니다.Spring에서 factory 클래스 사용하기
올바른 사용법인가요? 하나의 팩토리와 단 하나의 연결 만 원하고 클라이언트가 종료 될 때 클라이언트에서 close를 호출하려고합니다.
<bean id="clientFactory" class="my.company.ClientFactory" destroy-method="close" />
<bean id="searchClient" factory-bean="clientFactory" factory-method="getClient" />
공장 :
public class ClientFactory {
private Client client;
public Client getClient() {
if (client != null) {
return client;
}
Client transportClient = new TransportClient().addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
client = transportClient;
return client;
}
public void close() {
client.close();
}
}
다음을보십시오 : https://github.com/dadoonet/spring-elasticsearch – dadoonet
맞아요, 작동 했습니까? 당신이 싱글 톤을 강요하는 방식이 과잉이라고 생각합니다. Spring은 bean에서 "범위"개념을 가지고 있으며, 기본값은 singleton입니다. 즉, Spring은 동일한 인스턴스를 계속 재사용합니다. – jeff
@jeff 공장에서의 Singleton 그렇지만 인스턴스화 할 때 공장 내부의 클라이언트에 대해 어떻게 생각하십니까? – LuckyLuke