Ich möchte jsvc verwenden, um meine Spring-Boot-Anwendung zu starten, weil sie bereits auf dem Zielsystem ist und die Alternative darin besteht, Shell-Skripte für Randfälle zu debuggen. Ich habe die Daemon-Schnittstelle implementiert, so dass SpringApplication.run()
in Daemon.start()
aufgerufen wird, aber die verschachtelten Gläser können nicht gefunden werden, da ich die JarLoader
umgangen habe.Wie kann ich das Laden der geschachtelten Klasse einrichten, wenn es vom Apache commons-Daemon jsvc gestartet wird?
Gibt es eine Möglichkeit, die richtigen Klassenlader usw. programmatisch einzurichten?
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableConfigurationProperties
public class Application implements Daemon {
private ConfigurableApplicationContext ctx;
private String[] args;
@Override
public void init(DaemonContext context) throws Exception {
args = context.getArguments();
}
@Override
public void start() throws Exception {
ctx = SpringApplication.run(Application.class, args);
}
@Override
public void stop() throws Exception {
ctx.stop();
}
@Override
public void destroy() {
ctx.close();
}
// Main - mostly for development.
public static void main(String[] args) throws Exception {
System.err.println("WARNING - running as current user");
DaemonLoader.Context ctx = new DaemonLoader.Context();
Application app = new Application();
ctx.setArguments(args);
app.init(ctx);
app.start();
}
}
Diese Fehler mit
java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
Hallo Paul, hast du eine Lösung für dein Problem gefunden? Gibt es eine Möglichkeit, deine trübe aktuelle Konfiguration einschließlich Tomcat oder Jetty zu sehen? – Tito
@Tito: Ich musste die Arbeit aufgeben und auf Skripte und Runuser etc. zurückgreifen. Dies ist eine Spring-Boot-App, also gibt es keine andere Servlet-Konfiguration als den Standard-Spring-Boot (Tomcat Embedded). –