-
Notifications
You must be signed in to change notification settings - Fork 122
Expand file tree
/
Copy pathJavaClawApplication.java
More file actions
68 lines (55 loc) · 2.61 KB
/
JavaClawApplication.java
File metadata and controls
68 lines (55 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package ai.javaclaw;
import ai.javaclaw.configuration.ConfigurationChangedEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.DefaultApplicationArguments;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.event.EventListener;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@SpringBootApplication
public class JavaClawApplication {
private static final Logger log = LoggerFactory.getLogger(JavaClawApplication.class);
private static ConfigurableApplicationContext applicationContext;
public static void main(String[] args) {
applicationContext = SpringApplication.run(JavaClawApplication.class, args);
}
@Component
static public class JavaClawApplicationMonitor implements ApplicationRunner {
private final Environment environment;
public JavaClawApplicationMonitor(Environment environment) {
this.environment = environment;
}
@Override
public void run(ApplicationArguments args) throws Exception {
String isConfigured = environment.getProperty("agent.onboarding.completed");
if (Boolean.parseBoolean(isConfigured)) {
log.info("JavaClaw is running and waiting for your commands!");
} else {
log.info("JavaClaw is waiting to be configured! Navigate to http://localhost:{}/onboarding to start the onboarding wizard", environment.getProperty("local.server.port"));
}
}
@EventListener
public void on(ConfigurationChangedEvent configurationChangedEvent) {
Thread thread = new Thread(() -> {
try {
ApplicationArguments args = new DefaultApplicationArguments();
if(applicationContext != null){
args = applicationContext.getBean(ApplicationArguments.class);
applicationContext.close();
}
Thread.sleep(2000);
applicationContext = SpringApplication.run(JavaClawApplication.class, args.getSourceArgs());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
thread.setDaemon(false);
thread.start();
}
}
}