I am trying to run a Spring-Boot application as a init.d linux service using this method provided by Spring. While the service will successfully run with
service vxmonitor start RUN_ARGS=--spring.config.location=/var/vxmonitor/config.properties
the external properties file will not load. The properties file is located in the same folder as the jar file. If I run the application using
java -jar monitor-0.0.1-SNAPSHOT.jar --spring.config.location=config.properties
the external properties loads fine.
My question is how to get the Springs service to point to the external config file, and if that is possible, how to integrate the location of the external config file into the service itself so RUN_ARGS doesnt need to be specified. Not sure what files would be helpful to help solve this problem.
config.properties
server.port=8099
pom.xml
<?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>com.valgoix</groupId>
<artifactId>monitor</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>vlgx-monitoring-svc</name>
<description>Client side server monitoring web service</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.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>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.2-1003-jdbc4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
If there is another file needed please tell me. Thank you
EDIT: I attempted to modify the service created by changing
arguments=(-Dsun.misc.URLClassPath.disableJarChecking=true $JAVA_OPTS -jar "$jarfile" $RUN_ARGS "$@")
to
arguments=(-Dsun.misc.URLClassPath.disableJarChecking=true $JAVA_OPTS -jar "$jarfile" --spring.config.location=/var/vxmonitor/config.properties $RUN_ARGS "$@")
except when I run the service I get the error
Error: Invalid or corrupt jarfile /var/vxmonitor/vxmonitor.jar
written in the log file.
You need to use a file URL as follows for spring.config.location
:
--spring.config.location=file:///var/vxmonitor/config.properties