Pushing JAR to Cloud Foundry fails when it contains .profile.d scripts

I have Java Spring Boot application packed with Gradle using assemble task. When I push its jar to CF it works just fine - deploys and starts.

Now, when I add bash script located in .profile.d folder to this jar I'm running into problems. I see that script gets executed successfully (printed messages), but the application doesn't start. I don't see any information about any error or even trying to start. The the only message that I'm receiving (after seeing output from bash script) is "failed to accept connections within health check timeout" and it happens after timeout. I was using env variable JBP_LOG_LEVEL to DEBUG for this app.

The same script worked fine with Python buildpack (executed and app got up and running).

I have used Java buildpack in version from 2 months ago and also tried the latest one in GIT repository. Do you know what it might be the cause? or even how can I debug it?

Answers


The Java Buildpack doesn't support the use of .profile.d scripts for startup. The buildpack creates very complex command lines like the following

CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-2.0.1_RELEASE -memorySizes=metaspace:64m.. -memoryWeights=heap:75,metaspace:10,native:10,stack:5 -memoryInitials=heap:100%,metaspace:100% -totMemory=$MEMORY_LIMIT) && JAVA_OPTS="-Djava.io.tmpdir=$TMPDIR -XX:OnOutOfMemoryError=$PWD/.java-buildpack/open_jdk_jre/bin/killjava.sh $CALCULATED_MEMORY -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n" && SERVER_PORT=$PORT eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/.:$PWD/.java-buildpack/spring_auto_reconfiguration/spring_auto_reconfiguration-1.10.0_RELEASE.jar org.springframework.boot.loader.JarLauncher

that address everything from memory region allocation, error handling, supported features (debugging in this case), classpath, etc. Because this command line is essential to the expected function of Java applications on the platform, overriding it with other startup scripts, while possible, is not something we support.

As you point out in the beginning of your post, the buildpack runs your application without this script, which is our goal; a user should be able to push an application and "it just works". If there's something about your application that prevents it from properly operating in a Cloud Foundry environment, I encourage you to open an issue against the buildpack so that we can address it.


To address the issue at hand, the failure of a health check in Cloud Foundry generally means that application is not accepting HTTP connections on the port designated by the container. You need to ensure that your application listens on the port indicated by $PORT when it starts.


Need Your Help

Converting BufferedImage to Mat (OpenCV) in Java

java image opencv image-processing bufferedimage

I've tried this link and have the code below. My program imports images in a BufferedImage format and then displays it to the users. I'm using the matchingTemplate function in OpenCV which requires...

Getting many requests with User Agent [Mozilla/5.0]

google-chrome http browser http-headers user-agent

When a request arrives to my java servlet I'm checking its UserAgent: