2017-05-15 7 views
2

私はSpring Bootの新機能ですが、私の仕事ではSpringブートを使用して小さなWebサービスを実装するように要求されています。Spring BootでJavaからTCPConnectionFactoryまたはSSLServerSocketFactoryを設定するには

Webサービスでは、(外部システムはHTTPではなくカスタムプロトコルを使用してWebサービスに接続します)のSSL TCP接続を受け入れる必要があります。また、私はバックグラウンドタスク(または複数のバックグラウンドタスク)でこれらの接続を処理したいと思います。

公式の文書(http://docs.spring.io/spring-integration/reference/html/ip.html)を見ても、私はまだ理解していません(どこにそのXMLを置くのですか)。私はそのXMLをどこに置くべきかについてSOに頼んだとき、これは非常に古い構成方法であり、もはや使用すべきではないと答えました。

これを行うための「最新の」方法は何でしょうか?

答えて

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構成を好む春の構成XMLファイルに追加し、クラスに@ImportResource("my-context.xml")を使用している場合。

関連する問題