ApplicationPid Class — spring-boot Architecture
Architecture documentation for the ApplicationPid class in ApplicationPid.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/main/java/org/springframework/boot/system/ApplicationPid.java lines 38–147
public class ApplicationPid {
private static final PosixFilePermission[] WRITE_PERMISSIONS = { PosixFilePermission.OWNER_WRITE,
PosixFilePermission.GROUP_WRITE, PosixFilePermission.OTHERS_WRITE };
private final @Nullable Long pid;
public ApplicationPid() {
this.pid = currentProcessPid();
}
protected ApplicationPid(@Nullable Long pid) {
this.pid = pid;
}
private @Nullable Long currentProcessPid() {
try {
return ProcessHandle.current().pid();
}
catch (Throwable ex) {
return null;
}
}
/**
* Return if the application PID is available.
* @return {@code true} if the PID is available
* @since 3.4.0
*/
public boolean isAvailable() {
return this.pid != null;
}
/**
* Return the application PID as a {@link Long}.
* @return the application PID or {@code null}
* @since 3.4.0
*/
public @Nullable Long toLong() {
return this.pid;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof ApplicationPid other) {
return ObjectUtils.nullSafeEquals(this.pid, other.pid);
}
return false;
}
@Override
public int hashCode() {
return ObjectUtils.nullSafeHashCode(this.pid);
}
@Override
public String toString() {
return (this.pid != null) ? String.valueOf(this.pid) : "???";
}
/**
* Write the PID to the specified file.
* @param file the PID file
* @throws IllegalStateException if no PID is available.
* @throws IOException if the file cannot be written
*/
public void write(File file) throws IOException {
Assert.state(this.pid != null, "No PID available");
createParentDirectory(file);
if (file.exists()) {
assertCanOverwrite(file);
}
try (FileWriter writer = new FileWriter(file)) {
writer.append(String.valueOf(this.pid));
}
}
private void createParentDirectory(File file) {
File parent = file.getParentFile();
if (parent != null) {
parent.mkdirs();
}
}
private void assertCanOverwrite(File file) throws IOException {
if (!file.canWrite() || !canWritePosixFile(file)) {
throw new FileNotFoundException(file + " (permission denied)");
}
}
private boolean canWritePosixFile(File file) throws IOException {
try {
Set<PosixFilePermission> permissions = Files.getPosixFilePermissions(file.toPath());
for (PosixFilePermission permission : WRITE_PERMISSIONS) {
if (permissions.contains(permission)) {
return true;
}
}
return false;
}
catch (UnsupportedOperationException ex) {
// Assume that we can
return true;
}
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free