Can you call awaitTermination in stop()?  You can use shutdownNow() also to 
cause a more aggressive shutdown.

On Saturday, November 10, 2018 at 5:02:50 AM UTC-8, omid pourhadi wrote:
>
> Hi,
>
> I'm trying to create a spring boot app with grpc so I implemented a grpc 
> nettyserver to run spring boot on top of it but it terminates the app after 
> running.
> how can I use gprc nettyserver await termination in spring boot webserver?
>
> here is the code : 
>
> import java.io.IOException;
>
> import org.springframework.boot.web.server.WebServer;
> import org.springframework.boot.web.server.WebServerException;
>
> import io.grpc.Server;
> import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder;
>
> public class NettyWebServer implements WebServer
> {
>
>     
>     public static final int DEFAULT_PORT = 50051;
>     
>     Server server;
>     
>     @Override
>     public void start() throws WebServerException
>     {
>         if(server == null)
>             server = NettyServerBuilder.forPort(DEFAULT_PORT).build();
>         
>         try
>         {            
>             server.start();
>         }
>         catch (IOException e)
>         {
>             e.printStackTrace();
>         }
>         Runtime.getRuntime().addShutdownHook(new Thread() {
>             @Override
>             public void run()
>             {
>                 // Use stderr here since the logger may have been reset by 
> its
>                 // JVM shutdown hook.
>                 System.err.println("*** shutting down gRPC server since 
> JVM is shutting down");
>                 NettyWebServer.this.stop();
>                 System.err.println("*** server shut down");
>             }
>         });
>         startDaemonAwaitThread();
>         
>     }
>
>     @Override
>     public void stop() throws WebServerException
>     {
>         if (server != null)
>         {
>             server.shutdown();
>         }        
>     }
>
>     @Override
>     public int getPort()
>     {
>         return DEFAULT_PORT;
>     }
>     
>     private void startDaemonAwaitThread() {
>         Thread awaitThread = new Thread(()->{
>                 try {
>                     NettyWebServer.this.server.awaitTermination();
>                 } catch (InterruptedException e) {
> //                    log.error("gRPC server stopped.", e);
>                 }
>             });
>         awaitThread.setContextClassLoader(getClass().getClassLoader());
>         awaitThread.setDaemon(false);
>         awaitThread.start();
>     }
>
> }
>
>
>
> and here is the spring boot app config
>
> @SpringBootApplication
> public class GrpcBoot
> {
>
>     public static void main(String[] args) throws Exception
>     {
>         SpringApplication.run(GrpcBoot.class, args);
>     }
>
>     
>     @Bean
>     ServletWebServerFactory servletWebServerFactory()
>     {
>         return new ServletWebServerFactory() {
>             
>             @Override
>             public WebServer getWebServer(ServletContextInitializer... 
> initializers)
>             {
>                 return new NettyWebServer();
>             }
>         };
>     }
>     
>     
>     
> }
>
>
> here is the log after termination :
>
> 2018-11-10 16:32:02.499  INFO 17044 --- [           main] 
>>> com.omid.grpc.boot.GrpcBoot              : Starting GrpcBoot on opourhadi 
>>> with PID 17044 
>>> (/home/omidp/workspace-grpc/grpc-crud/grpc-server/target/classes started 
>>
>> 2018-11-10 16:32:02.502  INFO 17044 --- [           main] 
>>> com.omid.grpc.boot.GrpcBoot              : No active profile set, falling 
>>> back to default profiles: default
>>
>> 2018-11-10 16:32:02.534  INFO 17044 --- [           main] 
>>> s.c.a.AnnotationConfigApplicationContext : Refreshing 
>>> org.springframework.context.annotation.AnnotationConfigApplicationContext@3c9d0b9d:
>>>  
>>> startup date [Sat Nov 10 16:32:02 IRST 2018]; root of context hierarchy
>>
>> 2018-11-10 16:32:03.054  INFO 17044 --- [           main] 
>>> o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX 
>>> exposure on startup
>>
>> 2018-11-10 16:32:03.063  INFO 17044 --- [           main] 
>>> com.omid.grpc.boot.GrpcBoot              : Started GrpcBoot in 0.738 
>>> seconds (JVM running for 1.022)
>>
>> 2018-11-10 16:32:03.065  INFO 17044 --- [       Thread-2] 
>>> s.c.a.AnnotationConfigApplicationContext : Closing 
>>> org.springframework.context.annotation.AnnotationConfigApplicationContext@3c9d0b9d:
>>>  
>>> startup date [Sat Nov 10 16:32:02 IRST 2018]; root of context hierarchy
>>
>> 2018-11-10 16:32:03.067  INFO 17044 --- [       Thread-2] 
>>> o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans 
>>> on shutdown
>>
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/10218e6f-b67f-4d3a-9bb5-c8e3814c6eb8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to