PropertyFileContent Class — spring-boot Architecture
Architecture documentation for the PropertyFileContent class in ConfigTreePropertySource.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/main/java/org/springframework/boot/env/ConfigTreePropertySource.java lines 265–378
private static final class PropertyFileContent implements Value, OriginProvider {
private final Path path;
private final Lock resourceLock = new ReentrantLock();
private final Resource resource;
private final Origin origin;
private final boolean cacheContent;
private final boolean autoTrimTrailingNewLine;
private volatile byte @Nullable [] content;
private PropertyFileContent(Path path, Resource resource, Origin origin, boolean cacheContent,
boolean autoTrimTrailingNewLine) {
this.path = path;
this.resource = resource;
this.origin = origin;
this.cacheContent = cacheContent;
this.autoTrimTrailingNewLine = autoTrimTrailingNewLine;
}
@Override
public Origin getOrigin() {
return this.origin;
}
@Override
public int length() {
return toString().length();
}
@Override
public char charAt(int index) {
return toString().charAt(index);
}
@Override
public CharSequence subSequence(int start, int end) {
return toString().subSequence(start, end);
}
@Override
public String toString() {
String string = new String(getBytes());
if (this.autoTrimTrailingNewLine) {
string = autoTrimTrailingNewLine(string);
}
return string;
}
private String autoTrimTrailingNewLine(String string) {
if (!string.endsWith("\n")) {
return string;
}
int numberOfLines = 0;
for (int i = 0; i < string.length(); i++) {
char ch = string.charAt(i);
if (ch == '\n') {
numberOfLines++;
}
}
if (numberOfLines > 1) {
return string;
}
return (string.endsWith("\r\n")) ? string.substring(0, string.length() - 2)
: string.substring(0, string.length() - 1);
}
@Override
public InputStream getInputStream() throws IOException {
if (!this.cacheContent) {
assertStillExists();
return this.resource.getInputStream();
}
return new ByteArrayInputStream(getBytes());
}
private byte[] getBytes() {
try {
if (!this.cacheContent) {
assertStillExists();
return FileCopyUtils.copyToByteArray(this.resource.getInputStream());
}
byte[] content = this.content;
if (content == null) {
assertStillExists();
this.resourceLock.lock();
try {
content = this.content;
if (content == null) {
content = FileCopyUtils.copyToByteArray(this.resource.getInputStream());
this.content = content;
}
}
finally {
this.resourceLock.unlock();
}
}
return content;
}
catch (IOException ex) {
throw new IllegalStateException(ex);
}
}
private void assertStillExists() {
Assert.state(Files.exists(this.path), () -> "The property file '" + this.path + "' no longer exists");
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free