Skip to content

Commit

Permalink
Improve performance of ConcurrentReferenceCachingMetadataReaderFactory
Browse files Browse the repository at this point in the history
Update `ConcurrentReferenceCachingMetadataReaderFactory` with cache
by class name.

Closes gh-42949
  • Loading branch information
philwebb committed Oct 31, 2024
1 parent 7eb98b4 commit 9890872
Showing 1 changed file with 17 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@
*/
public class ConcurrentReferenceCachingMetadataReaderFactory extends SimpleMetadataReaderFactory {

private final Map<Resource, MetadataReader> cache = new ConcurrentReferenceHashMap<>();
private final Map<String, MetadataReader> classNameCache = new ConcurrentReferenceHashMap<>();

private final Map<Resource, MetadataReader> resourceCache = new ConcurrentReferenceHashMap<>();

/**
* Create a new {@link ConcurrentReferenceCachingMetadataReaderFactory} instance for
Expand Down Expand Up @@ -66,12 +68,22 @@ public ConcurrentReferenceCachingMetadataReaderFactory(ClassLoader classLoader)
super(classLoader);
}

@Override
public MetadataReader getMetadataReader(String className) throws IOException {
MetadataReader metadataReader = this.classNameCache.get(className);
if (metadataReader == null) {
metadataReader = super.getMetadataReader(className);
this.classNameCache.put(className, metadataReader);
}
return metadataReader;
}

@Override
public MetadataReader getMetadataReader(Resource resource) throws IOException {
MetadataReader metadataReader = this.cache.get(resource);
MetadataReader metadataReader = this.resourceCache.get(resource);
if (metadataReader == null) {
metadataReader = createMetadataReader(resource);
this.cache.put(resource, metadataReader);
this.resourceCache.put(resource, metadataReader);
}
return metadataReader;
}
Expand All @@ -90,7 +102,8 @@ protected MetadataReader createMetadataReader(Resource resource) throws IOExcept
* Clear the entire MetadataReader cache, removing all cached class metadata.
*/
public void clearCache() {
this.cache.clear();
this.classNameCache.clear();
this.resourceCache.clear();
}

}

0 comments on commit 9890872

Please sign in to comment.