2017-05-15 2 views
2

저는 스프링 부트를 처음 사용하지만 스프링 부트를 사용하여 작은 웹 서비스를 구현하도록 내 작업에서 요청되었습니다.스프링 부트에서 자바에서 TCPConnectionFactory 또는 SSLServerSocketFactory를 설정하는 방법

웹 서비스는 (외부 시스템은 HTTP가 아닌 사용자 정의 프로토콜을 사용하여 웹 서비스에 연결합니다)의 SSL TCP 연결을 허용해야합니다. 또한 백그라운드 작업 (또는 여러 백그라운드 작업)에서 이러한 연결을 처리하고 싶습니다.

공식 문서 (http://docs.spring.io/spring-integration/reference/html/ip.html)를 살펴본 후에도 (나는 모든 XML을 어디에 배치해야합니까?) 여전히 이해할 수 없습니다. SO에서 XML을 배치 할 위치를 묻는 순간, 이것은 매우 오래된 구성 방법이며 더 이상 사용하지 않아야한다고 대답했습니다.

이 작업을 수행하는 데 "최신"방법은 무엇입니까? 당신이 봄 통합을위한 XML 구성을 선호하는 경우

답변

3
@SpringBootApplication 
public class So43983296Application implements CommandLineRunner { 

    public static void main(String[] args) throws Exception { 
     ConfigurableApplicationContext context = SpringApplication.run(So43983296Application.class, args); 
     Thread.sleep(10_000); 
     context.close(); 
    } 

    @Autowired 
    private DefaultTcpNetSSLSocketFactorySupport ssl; 

    @Override 
    public void run(String... args) throws Exception { 
     Socket socket = ssl.getSocketFactory().createSocket("localhost", 1234); 
     socket.getOutputStream().write("foo\r\n".getBytes()); 
     BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     String result = br.readLine(); 
     System.out.println(result); 
     br.close(); 
     socket.close(); 
    } 

    @Bean 
    public TcpNetServerConnectionFactory scf() { 
     TcpNetServerConnectionFactory scf = new TcpNetServerConnectionFactory(1234); 
     DefaultTcpNetSSLSocketFactorySupport tcpSocketFactorySupport = tcpSocketFactorySupport(); 
     scf.setTcpSocketFactorySupport(tcpSocketFactorySupport); 
     // Add custom serializer/deserializer here; default is ByteArrayCrLfSerializer 
     return scf; 
    } 

    @Bean 
    public DefaultTcpNetSSLSocketFactorySupport tcpSocketFactorySupport() { 
     TcpSSLContextSupport sslContextSupport = new DefaultTcpSSLContextSupport("classpath:test.ks", 
       "classpath:test.truststore.ks", "secret", "secret"); 
     DefaultTcpNetSSLSocketFactorySupport tcpSocketFactorySupport = 
       new DefaultTcpNetSSLSocketFactorySupport(sslContextSupport); 
     return tcpSocketFactorySupport; 
    } 

    @Bean 
    public TcpInboundGateway inGate() { 
     TcpInboundGateway inGate = new TcpInboundGateway(); 
     inGate.setConnectionFactory(scf()); 
     inGate.setRequestChannelName("upperCase"); 
     return inGate; 
    } 

    @ServiceActivator(inputChannel = "upperCase") 
    public String upCase(byte[] in) { 
     return new String(in).toUpperCase(); 
    } 

} 

, 스프링 구성 XML 파일에 추가하고 클래스에 @ImportResource("my-context.xml")를 사용합니다.