Enforce limit for storing suppressed exceptions
Closes gh-24902
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2019 the original author or authors.
|
* Copyright 2002-2020 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -70,6 +70,10 @@ import org.springframework.util.StringUtils;
|
|||||||
*/
|
*/
|
||||||
public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {
|
public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {
|
||||||
|
|
||||||
|
/** Maximum number of suppressed exceptions to preserve. */
|
||||||
|
private static final int SUPPRESSED_EXCEPTIONS_LIMIT = 100;
|
||||||
|
|
||||||
|
|
||||||
/** Cache of singleton objects: bean name to bean instance. */
|
/** Cache of singleton objects: bean name to bean instance. */
|
||||||
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
|
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
|
||||||
|
|
||||||
@@ -90,7 +94,7 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements
|
|||||||
private final Set<String> inCreationCheckExclusions =
|
private final Set<String> inCreationCheckExclusions =
|
||||||
Collections.newSetFromMap(new ConcurrentHashMap<>(16));
|
Collections.newSetFromMap(new ConcurrentHashMap<>(16));
|
||||||
|
|
||||||
/** List of suppressed Exceptions, available for associating related causes. */
|
/** Collection of suppressed Exceptions, available for associating related causes. */
|
||||||
@Nullable
|
@Nullable
|
||||||
private Set<Exception> suppressedExceptions;
|
private Set<Exception> suppressedExceptions;
|
||||||
|
|
||||||
@@ -253,13 +257,17 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register an Exception that happened to get suppressed during the creation of a
|
* Register an exception that happened to get suppressed during the creation of a
|
||||||
* singleton bean instance, e.g. a temporary circular reference resolution problem.
|
* singleton bean instance, e.g. a temporary circular reference resolution problem.
|
||||||
|
* <p>The default implementation preserves any given exception in this registry's
|
||||||
|
* collection of suppressed exceptions, up to a limit of 100 exceptions, adding
|
||||||
|
* them as related causes to an eventual top-level {@link BeanCreationException}.
|
||||||
* @param ex the Exception to register
|
* @param ex the Exception to register
|
||||||
|
* @see BeanCreationException#getRelatedCauses()
|
||||||
*/
|
*/
|
||||||
protected void onSuppressedException(Exception ex) {
|
protected void onSuppressedException(Exception ex) {
|
||||||
synchronized (this.singletonObjects) {
|
synchronized (this.singletonObjects) {
|
||||||
if (this.suppressedExceptions != null) {
|
if (this.suppressedExceptions != null && this.suppressedExceptions.size() < SUPPRESSED_EXCEPTIONS_LIMIT) {
|
||||||
this.suppressedExceptions.add(ex);
|
this.suppressedExceptions.add(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user