0

I'm so new in Linux and I'm trying to run my Spring boot application with embedded tomcat on it I tried literally everything on the internet but I can't understand my problem. So this is my code (Maven)

  <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>test.my.app</groupId>
    <artifactId>TestApplication</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <start-class>com.test.my.Applocation.App</start-class>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>

        <dependency>
            <groupId>com.squareup.retrofit2</groupId>
            <artifactId>retrofit</artifactId>
            <version>2.3.0</version>
        </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>logging-interceptor</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.retrofit2</groupId>
            <artifactId>converter-gson</artifactId>
            <version>2.3.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>


</project>

and this is my application.properties file.

server.port=0

and this is how I build my project to Jar :

mvn -> clean -> compile -> package

and I can run this application on my Windows computer and its working just fine! but my problem is in the Linux server when I run this application with systemed this is the log and it says it was successful but it's not working

INFO 20351 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.hateoas.config.HateoasConfiguration' of type [org.springframework.hateoas.config.HateoasConfiguration$$EnhancerBySpringCGLIB$$b190a49] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO 20351 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 0 (http)
INFO 20351 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
INFO 20351 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/9.0.13
INFO 20351 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
INFO 20351 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
INFO 20351 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2302 ms
INFO 20351 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
INFO 20351 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 41940 (http) with context path ''
INFO 20351 --- [           main] c.t.c.TransApplication.TransApplication  : Started TransApplication in 4.878 seconds (JVM running for 5.402)

and this is my

netstat -ltnpa | grep -i --colour LISTEN

log from 41940 port

tcp6       0      0 :::41940                :::*                    LISTEN      20351/java 

but now i want to send a request to this port with example.com:41940/myrequest but its not working and server is not respondig

=================== EDIT i edit the server.port=0 to 8090

and this is the result of

curl -XGET localhost:8090

curl -XGET localhost:8090 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0100 93 0 93 0 0 325 0 --:--:-- --:--:-- --:--:-- 326 { "_links" : { "profile" : { "href" : "http://localhost:8090/profile" } } }

Rea Teria
  • 133
  • 2
  • 17

3 Answers3

0

Try to start your application with this parameters:

-Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses

And then with netstat make sure that the application is listening on IPv4.

If it is also not working post the output of this:

curl -sSL -D - http://localhost:8090 -o /dev/null

Have a look here: Spring boot application listens over IPv6 without -Djava.net.preferIPv4Stack=true and -Djava.net.preferIPv4Addresses parameters

I think your tomcat only listens on IPv6 not IPv4.

BR

Hannes
  • 491
  • 5
  • 21
0

I am deploying my Spring Boot application to a Pivotal Cloud Foundation container. I got the same error but found I was missing a POM dependency (and it appears you are too):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

I found this in Post: Spring boot: Unable to start embedded Tomcat servlet container

NOTE, it has led to different error for me, but I made progress.

Conclusion of my matter for posterity ...

I add this comment because this is what fixed my problem.

The Dependency was pulling in Servlet API 2.5 Tomcat 8.5 (embedded Spring Boot) needs Servlet API 3.1!

<groupId>org.jvnet.jax-ws-commons.spring</groupId>
    <artifactId>jaxws-spring</artifactId>
    <version>1.9</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>

Dependency had Servlet 2.5 API. Tomcat 8.1 needs '3.1'

found to looking at Maven dependency tree:

man dependency:tree 

From this post: Getting NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()

Fshtank
  • 1
  • 1
  • 4
  • in the spring starter web dependency there is an embedded tomcat – Rea Teria Dec 05 '18 at 18:39
  • I add this comment because this is what fixed my problem. The Dependency was pulling in Servlet API 2.5 Tomcat 8.5 (embedded Spring Boot) needs Servlet API 3.1! org.jvnet.jax-ws-commons.spring jaxws-spring 1.9 javax.servlet servlet-api Dependency had Servlet 2.5 API. Tomcat 8.1 needs '3.1' From this post: https://stackoverflow.com/questions/34950164/getting-nosuchmethoderrorjavax-servlet-servletcontext-getvirtualservername – Fshtank Dec 05 '18 at 19:13
0

as I said I'm so new in Linux And the problem was that I did not introduce the port to the firewall and now working

Rea Teria
  • 133
  • 2
  • 17