/* ───────── Smells tab ───────── */
const sm = reportData.smells || {};
-function smellTable(list, valKey, valLabel) {
+function smellTable(list, valKey, namesKey) {
if (!list || !list.length) return '
None detected.
`;
+}
+/* v1.1.3 — the fan-in / fan-out tables are top-10: they show the extremes and
+ hide the shape. One dot per (fan-out, fan-in) position answers the question
+ the tables cannot: is coupling concentrated in a few god beans or spread flat?
+ Positions are bucketed — 95 petclinic beans share (0,1), and 95 identical
+ overlapping dots would be a lie told with ink. */
+const SC_CAP = 6; // names listed in a dot's tooltip
+function scatterSvg(hideFw) {
+ const g = deps.graph || {};
+ const all = [...new Set([...Object.keys(g), ...Object.keys(fanIn)])]
+ .filter(b => !(hideFw && isFw(b)));
+ if (all.length < 5) return '
Not enough beans in the resolved graph to plot.
';
+ const xOf = b => (g[b] || []).length, yOf = b => fanIn[b] || 0;
+ const xMax = Math.max(1, ...all.map(xOf)), yMax = Math.max(1, ...all.map(yOf));
+ if (xMax === 1 && yMax === 1) return '
Every bean has at most one dependency in either direction — nothing to rank.
';
+ // Buckets keyed by position AND classification, so a shared position can still
+ // show which side of it is framework.
+ const buckets = new Map();
+ all.forEach(b => {
+ const k = xOf(b) + '|' + yOf(b) + '|' + (isFw(b) ? 1 : 0);
+ (buckets.get(k) || buckets.set(k, []).get(k)).push(b);
+ });
+ const maxCount = Math.max(...[...buckets.values()].map(v => v.length));
+ const W = 620, H = 290, L = 46, R = 22, T = 26, B = 44;
+ const pw = W - L - R, ph = H - T - B, base = T + ph;
+ // Square-root axes: petclinic's max fan-in is 25 with a median of 1, and a
+ // linear axis puts every bean in the corner. Every tick prints its real value,
+ // so the scale is visible rather than silently applied.
+ const px = v => L + Math.sqrt(v / xMax) * pw;
+ const py = v => base - Math.sqrt(v / yMax) * ph;
+ const ticks = max => [0, 1, 2, 3, 5, 8, 12, 20, 30, 50, 80, 120, 200].filter(t => t <= max).concat(max);
+ const grid = [...new Set(ticks(yMax))].map(t =>
+ `
`).join('');
+ // I = Ce/(Ca+Ce) >= 0.8 <=> fanOut >= 4 * fanIn — the same threshold the
+ // unstable table uses, so the chart and the table cannot disagree.
+ const iPts = [];
+ for (let i = 0; i <= 24; i++) {
+ const x = xMax * i / 24, y = x / 4;
+ if (y > yMax) break;
+ iPts.push(`${px(x).toFixed(1)},${py(y).toFixed(1)}`);
+ }
+ const dots = [...buckets.entries()].map(([k, beans]) => {
+ const [x, y, fw] = k.split('|');
+ const r = 2.5 + 7 * Math.sqrt(beans.length / maxCount);
+ const names = beans.slice(0, SC_CAP).map(b => b.replace(/^&/, '')).join(', ');
+ const more = beans.length > SC_CAP ? ` … +${beans.length - SC_CAP} more` : '';
+ const head = beans.length === 1 ? '' : `${beans.length} beans · `;
+ return { fw: fw === '1', svg: `
${fmt(all.length)} beans, ${fmt(buckets.size)} distinct positions — dot size is how many beans share one.
+ ${hideFw ? '' : `${fmt(fwCount)} dimmed as framework by package prefix (the graph filter's heuristic — a camelCase framework bean reads as user-defined).`}
+ Axes are square-root scaled so the tail stays readable; every tick is a real count. Click a single-bean dot to open it in the graph.
Computed on the live resolved graph — what Spring actually wired. ${sm.frameworkFiltered?'Framework beans filtered out (rankings show beans you can refactor).':''}
Computed on the live resolved graph — what Spring actually wired. ${sm.frameworkFiltered?'Framework beans filtered out (rankings show beans you can refactor).':''} Click a bean to see which beans are on the other end.
🔗 High fan-in · coupling hotspots
${smellTable(sm.highFanIn,'inDegree','dependents')}
💥 High fan-out · shotgun surgery risk
${smellTable(sm.highFanOut,'outDegree','dependencies')}
@@ -2114,28 +3579,120 @@
Architecture Smells
📈 Unstable beans · I = Ce / (Ca + Ce) ≥ 0.8
${(sm.unstable&&sm.unstable.length) ? `
Bean Instability Fan-in Fan-out ${
- sm.unstable.map(e=>`${esc(e.beanName)} ${e.instability} ${e.fanIn} ${e.fanOut} `).join('')}
` : '
None over threshold.
'}
+ sm.unstable.map(e=>`
${escBean(e.beanName)} ${e.instability} ${e.fanIn} ${e.fanOut} `).join('')}` : '
None over threshold.
'}
`;
+const scWrap = $('#sc-wrap'), scHide = $('#sc-hide-fw');
+if (scHide) scHide.onchange = () => { scWrap.innerHTML = scatterSvg(scHide.checked); };
+if (scWrap) scWrap.addEventListener('click', e => {
+ const dot = e.target.closest('.sc-dot.one');
+ if (dot) focusBean(dot.dataset.bean);
+});
+
/* ───────── Timing tab ───────── */
const steps = reportData.startupSlowestSteps || [];
const trendHistory = reportData.trendHistory || [];
+const TREND_CFG = (reportData.gates && reportData.gates.config) || {};
+const TREND_ABS = TREND_CFG.startupTimeAbsoluteThresholdMs != null ? TREND_CFG.startupTimeAbsoluteThresholdMs : 500;
+const TREND_PCT = TREND_CFG.startupTimeRelativePercent != null ? TREND_CFG.startupTimeRelativePercent : 20;
+const TREND_BAND = {
+ unexplained: { fill: 'var(--danger)', op: 0.17, txt: 'unexplained by bean count' },
+ grew: { fill: 'var(--warn)', op: 0.15, txt: 'slower, and the app grew' },
+ unknown: { fill: 'var(--warn)', op: 0.15, txt: 'slower; this run pair has no bean count' },
+ faster: { fill: 'var(--ok)', op: 0.15, txt: 'faster' }
+};
+const beanDelta = (a, b) => {
+ const d = b - a;
+ if (d === 0) return 'with no new beans';
+ return d > 0 ? `with ${fmt(d)} new bean${d > 1 ? 's' : ''}` : `with ${fmt(-d)} bean${d < -1 ? 's' : ''} gone`;
+};
const threadDist = reportData.threadDistribution;
const slowBeans = reportData.slowBeans || [];
function timingTable(rows, nameKey, msKey) {
if (!rows.length) return '
No data.
';
const max = rows[0][msKey] || 1;
return `
${rows.slice(0,12).map(r=>`
- ${esc(r[nameKey])}
+ ${escBean(r[nameKey])}
`).join('')}
`;
}
+/* v1.1.3 — startupSlowestSteps carries tags {beanName, beanType, threadName} and
+ the table showed none of it: fifteen rows all reading spring.beans.instantiate.
+ tags is optional — steps that are not bean instantiation render as before. */
+function stepTable(rows) {
+ if (!rows.length) return '
No data.
';
+ const max = rows[0].durationMs || 1;
+ const anyTagged = rows.some(r => r.tags && r.tags.beanName);
+ return `
Step ${anyTagged?'Bean ':''}Time ${
+ rows.slice(0, 12).map(r => {
+ const t = r.tags || {};
+ const offMain = t.threadName && t.threadName !== 'main';
+ const bean = t.beanName
+ ? (t.beanType
+ ? `${escBean(t.beanName)} ${esc(t.beanType)}${t.threadName?` thread: ${esc(t.threadName)}`:''}
`
+ : `${escBean(t.beanName)} `)
+ : '— ';
+ return `${esc(r.name)}${offMain?` ${esc(t.threadName)} `:''}
+ ${anyTagged?`${bean} `:''}
+ `;
+ }).join('')}
`;
+}
+/* v1.1.3 — Pareto: the histogram says how instantiation times are distributed,
+ this says how few beans you would have to fix. Same data, actionable version. */
+function startupPareto() {
+ const entries = Object.entries(beanTimings)
+ .filter(([, v]) => typeof v === 'number' && v > 0)
+ .sort((a, b) => b[1] - a[1]);
+ if (entries.length < 5) {
+ return '
No per-bean timings captured (startup was not buffering).
';
+ }
+ const total = entries.reduce((sum, [, v]) => sum + v, 0);
+ const W = 620, H = 250, L = 54, R = 18, T = 18, B = 46;
+ const pw = W - L - R, ph = H - T - B, base = T + ph;
+ const x = i => L + (i + 1) / entries.length * pw;
+ let cum = 0, knee = -1;
+ const pts = entries.map(([, v], i) => {
+ cum += v;
+ const share = cum / total;
+ if (knee < 0 && share >= 0.8) knee = i;
+ return `${x(i).toFixed(1)},${(base - share * ph).toFixed(1)}`;
+ });
+ if (knee < 0) knee = entries.length - 1; // one bean over 80% on its own
+ const grid = [0, 0.25, 0.5, 0.75, 1].map(f => {
+ const y = base - ph * f;
+ return `
`
+ + `
${(f * 100).toFixed(0)}% `;
+ }).join('');
+ const y80 = base - ph * 0.8, kx = x(knee);
+ const kneeLabelRight = kx < W * 0.55;
+ const top = entries.slice(0, 5);
+ return `
+ ${grid}
+
+
+
+
+ ${fmt(knee + 1)} bean${knee ? 's' : ''} = 80%
+ 1
+ ${fmt(entries.length)}
+ beans, slowest first →
+
+
${fmt(knee + 1)} of ${fmt(entries.length)} beans account for 80% of measured bean-instantiation time.
+ Slowest: ${top.map(([b, v]) => `${escBean(b)} ${fmt(v)}ms `).join(' · ')}.
+
A bean's time includes the beans its constructor triggers, so the ${fmt(total)}ms these shares are taken from counts nested instantiation more than once — it is a ranking, not a wall-clock budget.
`;
+}
$('#tab-timing').innerHTML = `
Startup Timing
From BufferingApplicationStartup — real measured instantiation, no reflection heuristics.
+
+
📉 How few beans you would have to fix cumulative
+ ${startupPareto()}
+
${threadDistributionCard()}
-
🐢 Slowest startup steps
${timingTable(steps,'name','durationMs')}
+
🐢 Slowest startup steps
${stepTable(steps)}
⏳ Slow bean instantiation
${timingTable(slowBeans,'beanName','durationMs')}
@@ -2144,57 +3701,109 @@
Startup Timing
${cp.available && cp.path ? `
Critical path — the chain your readiness sits on
-
${cp.path.map(n=>`${esc(n.beanName)} ${n.ownMs!=null?n.ownMs+'ms':''} `).join('→ ')}
+
${cp.path.map(n=>`${escBean(n.beanName)} ${n.ownMs!=null?n.ownMs+'ms':''} ${
+ n.cumulativeMs!=null?` · ${fmt(n.cumulativeMs)}ms in `:''} `).join('→ ')}
+ ${cp.path.some(n=>n.cumulativeMs!=null) ? `
Bold is the bean's own instantiation time; the dim number is how far into the ${fmt(cp.totalMs)}ms chain it sits.
` : ''}
`:''}
${trendSparkline()}`;
-/* v1.1.0: trend sparkline */
+/* v1.1.0 trend, rebuilt in v1.1.3.
+ One line said startup got slower and could not say why: an app that added 40
+ beans and an app that added none draw the identical curve, and only the second
+ is a bug. Bean count now shares the plot on its own axis, and each interval
+ between two runs carries a verdict computed with the startup-time gate's own
+ thresholds — so the chart can never call something a regression the gate lets
+ pass. */
+/* Red requires a bean count on BOTH ends — a pre-1.1.3 entry can only ever reach
+ amber, because "nothing was added" is a claim its data cannot support. */
+function trendVerdict(a, b) {
+ const d = b.totalStartupMs - a.totalStartupMs;
+ const pct = a.totalStartupMs > 0 ? d / a.totalStartupMs * 100 : 0;
+ if (-d >= TREND_ABS && -pct >= TREND_PCT) return 'faster';
+ if (!(d >= TREND_ABS && pct >= TREND_PCT)) return 'none';
+ if (a.beanCount == null || b.beanCount == null) return 'unknown';
+ return (b.beanCount - a.beanCount) / Math.max(1, a.beanCount) * 100 >= 1 ? 'grew' : 'unexplained';
+}
function trendSparkline() {
- if (trendHistory.length < 2) {
+ // An entry written on a run with no ApplicationReadyEvent timing has no
+ // totalStartupMs; it cannot be plotted and must not be read as zero.
+ const tr = trendHistory.filter(e => typeof e.totalStartupMs === 'number');
+ if (tr.length < 2) {
return '
Need at least 2 baseline writes to show a trend. Run with wiredoctor.baseline-write=true across builds.
';
}
- const w = 600, h = 120, pad = { top: 10, right: 60, bottom: 30, left: 50 };
- const values = trendHistory.map(e => e.totalStartupMs);
- const min = Math.min(...values), max = Math.max(...values);
- const range = max - min || 1;
- const pts = trendHistory.map((e, i) => {
- const x = pad.left + (trendHistory.length === 1 ? w/2 : (i / (trendHistory.length - 1)) * (w - pad.left - pad.right));
- const y = pad.top + (1 - (e.totalStartupMs - min) / range) * (h - pad.top - pad.bottom);
- return `${x.toFixed(1)},${y.toFixed(1)}`;
+ const W = 680, H = 240, L = 56, R = 58, T = 18, B = 40;
+ const pw = W - L - R, ph = H - T - B, base = T + ph;
+ const x = i => L + (i / (tr.length - 1)) * pw;
+ const ms = tr.map(e => e.totalStartupMs);
+ const msMin = Math.min(...ms), msMax = Math.max(...ms), msRange = (msMax - msMin) || 1;
+ const y1 = v => T + (1 - (v - msMin) / msRange) * ph;
+ // Counted runs in consecutive stretches: a baseline can hold pre-1.1.3 entries
+ // with no count, and one line drawn across that hole would join run 2 to run 5
+ // as though the runs between them had been measured.
+ const segs = [];
+ tr.forEach((e, i) => {
+ if (typeof e.beanCount !== 'number') { segs.push([]); return; }
+ (segs.length ? segs[segs.length - 1] : segs[segs.push([]) - 1]).push(i);
});
- const last = trendHistory[trendHistory.length - 1];
- const prev = trendHistory.length >= 2 ? trendHistory[trendHistory.length - 2] : last;
+ const beanSegs = segs.filter(seg => seg.length >= 2);
+ const counted = tr.filter(e => typeof e.beanCount === 'number');
+ const showBeans = beanSegs.length > 0;
+ const bc = counted.map(e => e.beanCount);
+ const bcMin = showBeans ? Math.min(...bc) : 0, bcMax = showBeans ? Math.max(...bc) : 1;
+ const bcRange = (bcMax - bcMin) || 1;
+ const y2 = v => T + (1 - (v - bcMin) / bcRange) * ph;
+ const bands = [], legend = new Set();
+ for (let i = 0; i < tr.length - 1; i++) {
+ const v = trendVerdict(tr[i], tr[i + 1]);
+ if (v === 'none') continue;
+ legend.add(v);
+ const b = TREND_BAND[v], d = tr[i + 1].totalStartupMs - tr[i].totalStartupMs;
+ const dBeans = (tr[i].beanCount != null && tr[i + 1].beanCount != null)
+ ? ' ' + beanDelta(tr[i].beanCount, tr[i + 1].beanCount) : '';
+ bands.push(`
Run ${i + 1} → ${i + 2}: ${d >= 0 ? '+' : ''}${fmt(d)}ms${dBeans} — ${b.txt} `);
+ }
+ const yTicks = [msMin, msMin + msRange / 2, msMax].map(v => Math.round(v));
+ const grid = yTicks.map(v => `
`
+ + `
${fmt(v)}ms `).join('');
+ const bcTicks = showBeans ? [bcMin, bcMax].map(v => `
${fmt(v)} `).join('') : '';
+ const dates = tr.map(e => new Date(e.timestamp).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }));
+ const last = tr[tr.length - 1], prev = tr[tr.length - 2];
const delta = last.totalStartupMs - prev.totalStartupMs;
- const pct = prev.totalStartupMs > 0 ? ((delta / prev.totalStartupMs) * 100).toFixed(1) : '0.0';
+ const pct = prev.totalStartupMs > 0 ? (delta / prev.totalStartupMs * 100).toFixed(1) : '0.0';
+ const lastV = trendVerdict(prev, last);
const arrow = delta > 0 ? '↑' : delta < 0 ? '↓' : '→';
- const color = delta > 0 ? 'var(--danger)' : delta < 0 ? 'var(--ok)' : 'var(--text-2)';
- const dates = trendHistory.map(e => {
- const d = new Date(e.timestamp);
- return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
- });
- const yTicks = [min, min + range * 0.5, max].map(v => Math.round(v) + 'ms').reverse();
+ const chip = lastV === 'unexplained' ? 'var(--danger)' : lastV === 'faster' ? 'var(--ok)'
+ : lastV === 'none' ? 'var(--text-2)' : 'var(--warn)';
+ const head = `Run ${tr.length - 1} → ${tr.length}: ${delta >= 0 ? '+' : ''}${fmt(delta)}ms (${pct}%)`;
+ const verdictLine =
+ lastV === 'none' ? `${head} — inside the gate's ${fmt(TREND_ABS)}ms / ${TREND_PCT}% thresholds.`
+ : lastV === 'unknown' ? `${head} — slower, and neither run recorded a bean count, so nothing here can rule it explained or not.`
+ : `${head} ${beanDelta(prev.beanCount, last.beanCount)} — ${TREND_BAND[lastV].txt}.`;
return `
-
Startup time trend ${arrow} ${delta>0?'+':''}${delta}ms (${pct}%)
-
${trendHistory.length} baseline entries · cap ${reportData.gates && reportData.gates.trendHistoryCap ? reportData.gates.trendHistoryCap : 'unlimited'}
-
-
-
- ${yTicks.map((t, i) => {
- const y = pad.top + (i / (yTicks.length - 1)) * (h - pad.top - pad.bottom);
- return `${t}
- `;
- }).join('')}
-
- ${trendHistory.map((e, i) => {
- const x = pad.left + (trendHistory.length === 1 ? w/2 : (i / (trendHistory.length - 1)) * (w - pad.left - pad.right));
- const y = pad.top + (1 - (e.totalStartupMs - min) / range) * (h - pad.top - pad.bottom);
- return i === trendHistory.length - 1
- ? `${e.totalStartupMs}ms `
- : ` `;
- }).join('')}
- ${dates[0]}
- ${trendHistory.length > 1 ? `${dates[dates.length-1]} ` : ''}
+ Startup time trend ${arrow} ${delta > 0 ? '+' : ''}${fmt(delta)}ms (${pct}%)
+ ${fmt(tr.length)} baseline entries · cap ${reportData.gates && reportData.gates.trendHistoryCap ? reportData.gates.trendHistoryCap : 'unlimited'} · bands use the startup-time gate's thresholds (≥${fmt(TREND_ABS)}ms AND ≥${TREND_PCT}%)
+
+ ${bands.join('')}
+ ${grid}${bcTicks}
+
+
+ ${beanSegs.map(seg => ` `).join('')}
+
+ ${tr.map((e, i) => i === tr.length - 1
+ ? ` `
+ : ` `).join('')}
+ ${dates[0]} · run 1
+ ${dates[dates.length - 1]} · run ${tr.length}
+ ${showBeans ? `beans (dashed) ` : ''}
+ startup ms
+ ${verdictLine}
+ ${legend.size ? ` ${[...legend].map(v => `■ ${TREND_BAND[v].txt}`).join(' · ')}` : ''}
+ Both axes span the observed range, not zero. A flat bean count with rising startup does not prove a code regression — a bigger dataset, a slower runner or a cold cache draw the same line. The band says where to look, not what is wrong.${showBeans ? '' : ' No entry pair carries a bean count yet, so no interval can be ruled unexplained.'}
`;
}
@@ -2249,7 +3858,7 @@
Startup Timing
const nsb = gates.newSlowBeans || [];
const sbActual = diffRan
? (nsb.length ? `${nsb.length} new slow bean${nsb.length>1?'s':''}: ` +
- nsb.slice(0,5).map(b=>`
${esc(b.beanName)} (${fmt(b.instantiationMs)}ms) `).join(', ')
+ nsb.slice(0,5).map(b=>`
${escBean(b.beanName)} (${fmt(b.instantiationMs)}ms) `).join(', ')
: '
none crossed the threshold ')
: '
— ';
const rows = [
@@ -2322,9 +3931,6 @@
Autoconfiguration Conditions
if (orphans.has(bean)) return { bg:'#e8a33d', glow:false };
return { bg:'#3d4a63', glow:false };
}
-const FRAMEWORK_PREFIX = /^(org\.springframework|org\.apache|com\.sun|java\.|javax\.|jakarta\.|io\.netty|com\.fasterxml|io\.micrometer)/;
-const isFw = b => FRAMEWORK_PREFIX.test(b);
-
function buildGraph() {
if (typeof vis === 'undefined') {
// Only reachable via the CDN fallback (bundled resource missing) while offline.
@@ -2449,6 +4055,15 @@
Autoconfiguration Conditions
if (hit) { network.focus(hit.id, { scale: 1.2, animation: true }); network.selectNodes([hit.id]); showNode(hit.id); }
});
}
+/* Jump from anywhere to this bean in the graph. Degrades silently: no vis
+ library, or the node was dropped by graph truncation. */
+function focusBean(bean) {
+ activate('graph');
+ if (!network || !allNodes || !allNodes.get(bean)) return;
+ network.focus(bean, { scale: 1.3, animation: true });
+ network.selectNodes([bean]);
+ showNode(bean);
+}
function showNode(bean) {
const panel = $('#node-panel');
const depsOut = (deps.graph && deps.graph[bean]) || [];
@@ -2462,13 +4077,13 @@
Autoconfiguration Conditions
const ms = beanTimings[bean];
panel.innerHTML = `
×
-
${esc(bean)}
+
${escBean(bean)}
${tags.join('')||'healthy '}
${ms != null ? `
Instantiation ${ms} ms
` : ''}
Dependents (fan-in) ${fi}
Dependencies (fan-out) ${depsOut.length}
Depends on
-
${depsOut.length ? depsOut.slice(0,30).map(d=>`→ ${esc(d)} `).join('') : 'nothing '} `;
+
${depsOut.length ? depsOut.slice(0,30).map(d=>`→ ${escBean(d)} `).join('') : 'nothing '} `;
panel.classList.add('open');
}
diff --git a/sample/v1.1.4/wiredoctor-report.json b/sample/v1.1.4/wiredoctor-report.json
new file mode 100644
index 0000000..8b66034
--- /dev/null
+++ b/sample/v1.1.4/wiredoctor-report.json
@@ -0,0 +1,2619 @@
+{
+ "schemaVersion" : 1,
+ "activeProfiles" : [ ],
+ "threadDistribution" : {
+ "perThread" : {
+ "main" : [ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletEndpointManagementContextConfiguration", "wireDoctorGhostTrackingPostProcessor", "healthEndpointGroups", "spring.data.web-org.springframework.boot.data.autoconfigure.web.DataWebProperties", "org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration", "org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthContributorAutoConfiguration", "hikariDataSourceMeterBinder", "spring.jdbc-org.springframework.boot.jdbc.autoconfigure.JdbcProperties", "jdbcTemplate", "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration", "webEndpointPathMapper", "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration", "org.springframework.context.annotation.internalConfigurationAnnotationProcessor", "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration", "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration$ThymeleafViewResolverConfiguration", "&entityManagerFactory", "openEntityManagerInViewInterceptor", "org.springframework.boot.http.converter.autoconfigure.Jackson2HttpMessageConvertersConfiguration", "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration", "beanNameViewResolver", "pathPatternRequestMatcherBuilder", "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration", "viewResolver", "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration$MeterFilterConfiguration", "projectingArgumentResolverBeanPostProcessor", "tomcatServletWebServerFactoryCustomizer", "spring.servlet.encoding-org.springframework.boot.servlet.autoconfigure.ServletEncodingProperties", "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration", "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration", "pricingService", "dataSourceScriptDatabaseInitializer", "applicationTaskExecutorAsyncConfigurer", "meterRegistryPostProcessor", "endpointMediaTypes", "jvmCompilationMetrics", "jacksonMixinModuleEntries", "orderController", "jdbcConnectionDetailsHikariBeanPostProcessor", "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration", "spring.ssl-org.springframework.boot.autoconfigure.ssl.SslProperties", "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration", "repositoryTagsProvider", "spring.http.converters-org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersProperties", "org.springframework.scheduling.annotation.ProxyAsyncConfiguration", "org.springframework.boot.context.internalConfigurationPropertiesBinder", "dataSourcePoolMetadataMeterBinder", "dbHealthContributor", "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$PersistenceManagedTypesConfiguration", "jpa.OrderRepository.fragments#0", "catalogCacheWarmer", "webServerFactoryCustomizerBeanPostProcessor", "controllerEndpointHandlerMapping", "org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration", "jdbcClient", "observabilitySchedulingConfigurer", "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration", "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration", "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletManagementContextAutoConfiguration", "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration", "management.health.diskspace-org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthIndicatorProperties", "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration", "org.springframework.boot.persistence.autoconfigure.EntityScanPackages", "spring.thymeleaf-org.springframework.boot.thymeleaf.autoconfigure.ThymeleafProperties", "conventionErrorViewResolver", "wireDoctorGhostTracker", "org.springframework.context.event.internalEventListenerProcessor", "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter", "formContentFilter", "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration", "defaultViewResolver", "routerFunctionMapping", "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration.httpSecurity", "org.springframework.boot.micrometer.metrics.autoconfigure.startup.StartupTimeMetricsListenerAutoConfiguration", "spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties", "multipartResolver", "healthEndpointWebExtension", "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$EnableWebSecurityConfiguration", "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration", "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletConfiguration", "conversionServicePostProcessor", "webExposeExcludePropertyEndpointFilter", "requestMappingHandlerMapping", "lifecycleProcessor", "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration", "org.springframework.aop.config.internalAutoProxyCreator", "requestMappingHandlerAdapter", "org.springframework.boot.servlet.autoconfigure.HttpEncodingAutoConfiguration", "tomcatMetricsBinder", "wiredoctor-com.wiredoctor.WireDoctorProperties", "server.tomcat-org.springframework.boot.tomcat.autoconfigure.TomcatServerProperties", "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$EnableTransactionManagementConfiguration", "org.springframework.data.jpa.repository.support.JpaEvaluationContextExtension", "org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration", "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration", "management.simple.metrics.export-org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleProperties", "sslMeterBinder", "org.springframework.boot.micrometer.metrics.autoconfigure.ssl.SslMetricsAutoConfiguration", "spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties", "org.springframework.context.annotation.internalAutowiredAnnotationProcessor", "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$BootstrapExecutorConfiguration", "orderService", "metricsRepositoryMethodInvocationListenerBeanPostProcessor", "classLoaderMetrics", "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration", "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration", "org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration", "org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration", "org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory", "org.springframework.boot.transaction.jta.autoconfigure.JtaAutoConfiguration", "springDataWebSettings", "fileWatcher", "sortResolver", "stringHttpMessageConvertersCustomizer", "springSecurityPathPatternParserBeanDefinitionRegistryPostProcessor", "org.springframework.boot.servlet.autoconfigure.MultipartAutoConfiguration", "standardJsonMapperBuilderCustomizer", "thymeleafViewResolver", "errorAttributes", "beanNameHandlerMapping", "org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration", "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration$MvcRequestMatcherConfiguration", "delegatingApplicationListener", "org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration", "org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.methodValidationExcludeFilter", "org.springframework.data.web.config.SpringDataJacksonConfiguration", "bootstrapExecutor", "org.springframework.boot.micrometer.metrics.autoconfigure.task.TaskExecutorMetricsAutoConfiguration", "flashMapManager", "orderRepository", "org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration", "jackson2EndpointJsonMapper", "requestMatcherProvider", "legacyExportService", "healthHttpCodeStatusMapper", "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$PathPatternRequestMatcherBuilderConfiguration", "metricsRepositoryMethodInvocationListener", "uptimeMetrics", "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonJsonCustomizerConfiguration", "controllerExposeExcludePropertyEndpointFilter", "jvmThreadMetrics", "pathMappedEndpoints", "auditService", "standardJsonFactoryBuilderCustomizer", "org.springframework.data.web.config.ProjectingArgumentResolverRegistrar", "jsonFactory", "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration", "managementServletContext", "fileDescriptorMetrics", "livenessStateHealthIndicator", "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration$CglibAutoProxyConfiguration", "org.springframework.transaction.config.internalTransactionalEventListenerFactory", "org.springframework.boot.tomcat.autoconfigure.metrics.TomcatMetricsAutoConfiguration", "org.springframework.boot.health.autoconfigure.application.AvailabilityHealthContributorAutoConfiguration", "mvcValidator", "applicationAvailability", "defaultTemplateResolver", "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration$EnableSameManagementContextConfiguration", "mvcResourceUrlProvider", "spring.jpa.hibernate-org.springframework.boot.hibernate.autoconfigure.HibernateProperties", "sslInfo", "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$SimpleAsyncTaskExecutorBuilderConfiguration", "spring.datasource-org.springframework.boot.jdbc.autoconfigure.DataSourceProperties", "servletEndpointRegistrar", "archivedReportExporter", "org.springframework.boot.autoconfigure.AutoConfigurationPackages", "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration", "management.metrics-org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties", "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration", "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration", "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties", "jackson3pageModule", "management.observations-org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties", "hikariPoolDataSourceMetadataProvider", "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$SimpleAsyncTaskSchedulerBuilderConfiguration", "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration", "org.springframework.boot.security.autoconfigure.SecurityAutoConfiguration", "org.springframework.boot.health.autoconfigure.contributor.HealthContributorAutoConfiguration", "org.springframework.data.web.config.SpringDataWebConfiguration", "legacyImportService", "org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthContributorAutoConfiguration", "propertiesEndpointAccessResolver", "errorPageRegistrarBeanPostProcessor", "mvcConversionService", "endpointJackson2ObjectMapperWebMvcConfigurer", "initializeAuthenticationProviderBeanManagerConfigurer", "org.springframework.context.annotation.internalPersistenceAnnotationProcessor", "controllerEndpointDiscoverer", "org.springframework.boot.context.properties.BoundConfigurationProperties", "diskSpaceHealthIndicator", "jvmMemoryMetrics", "org.springframework.boot.jdbc.autoconfigure.JdbcClientAutoConfiguration", "mvcPathMatcher", "handlerExceptionResolver", "org.springframework.boot.data.jpa.autoconfigure.DataJpaRepositoriesAutoConfiguration", "basicErrorController", "pingHealthContributor", "sslHealthIndicator", "healthEndpointGroupMembershipValidator", "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration", "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration", "groupsHealthContributorNameValidator", "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration", "namedParameterJdbcTemplate", "simpleAsyncTaskExecutorBuilder", "spring.web-org.springframework.boot.autoconfigure.web.WebProperties", "spelValueExpressionResolver", "org.springframework.scheduling.config.internalAsyncAnnotationProcessor", "mvcViewResolver", "simpleConfig", "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration$HealthConfiguration", "org.springframework.boot.security.autoconfigure.UserDetailsServiceAutoConfiguration", "requestDataValueProcessor", "org.springframework.boot.health.autoconfigure.registry.HealthContributorRegistryAutoConfiguration", "observationRegistry", "mvcUriComponentsContributor", "management.health.ssl-org.springframework.boot.health.autoconfigure.application.SslHealthIndicatorProperties", "webAccessPropertiesOperationFilter", "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration", "readinessStateHealthIndicator", "objectPostProcessor", "jpaSharedEM_entityManagerFactory", "wiredoctorDemoApplication", "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.JacksonEndpointAutoConfiguration", "templateEngine", "jackson3GeoModule", "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointAutoConfiguration", "spring.sql.init-org.springframework.boot.sql.autoconfigure.init.SqlInitializationProperties", "platformTransactionManagerCustomizers", "securityFilterChainRegistration", "data-jpa.repository-aot-processor#0", "endpointCachingOperationInvokerAdvisor", "defaultServletHandlerMapping", "org.springframework.boot.data.autoconfigure.metrics.DataRepositoryMetricsAutoConfiguration", "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafSecurityDialectConfiguration", "spring.security-org.springframework.boot.security.autoconfigure.SecurityProperties", "persistenceExceptionTranslationPostProcessor", "characterEncodingFilter", "observationRegistryPostProcessor", "sortCustomizer", "webEndpointDiscoverer", "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$EnableTransactionManagementConfiguration$CglibAutoProxyConfiguration", "org.springframework.security.config.annotation.web.configuration.ObservationConfiguration", "preserveErrorControllerTargetClassPostProcessor", "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration", "logbackMetrics", "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateAutoConfiguration", "management.info-org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties", "org.springframework.boot.jdbc.autoconfigure.NamedParameterJdbcTemplateConfiguration", "propertySourcesPlaceholderConfigurer", "org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration", "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration", "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$TransactionTemplateConfiguration", "management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties", "methodValidationPostProcessor", "wireDoctorGhostReportWriter", "jsonComponentModule", "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "entityManagerFactoryBuilder", "org.springframework.context.event.internalEventListenerFactory", "org.springframework.boot.persistence.autoconfigure.PersistenceExceptionTranslationAutoConfiguration", "webSocketWebServerCustomizer", "clientConvertersCustomizer", "spring.jpa-org.springframework.boot.jpa.autoconfigure.JpaProperties", "springSecurityFilterChain", "org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration", "management.metrics.data-org.springframework.boot.data.autoconfigure.metrics.DataMetricsProperties", "healthStatusAggregator", "endpointJsonMapper", "enableGlobalAuthenticationAutowiredConfigurer", "transactionTemplate", "mvcUrlPathHelper", "jsonMapperBuilder", "servletWebServerFactoryCustomizer", "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointWebExtensionConfiguration", "inMemoryUserDetailsManager", "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration", "org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration", "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$ThreadPoolTaskSchedulerBuilderConfiguration", "org.springframework.boot.webmvc.autoconfigure.actuate.endpoint.web.WebMvcHealthEndpointExtensionAutoConfiguration", "jpa.named-queries#0", "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration", "org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration", "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration", "filterChainDecoratorPostProcessor", "org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration", "metricsObservationHandlerGroup", "org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration", "spring.servlet.multipart-org.springframework.boot.servlet.autoconfigure.MultipartProperties", "transactionInterceptor", "simpleMeterRegistry", "authenticationEventPublisher", "bootstrapExecutorAliasPostProcessor", "startupTimeMetrics", "spring.security.filter-org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterProperties", "multipartConfigElement", "requestContextFilter", "org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration", "pageableResolver", "availabilityProbesHealthEndpointGroupsPostProcessor", "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateConfiguration", "handlerFunctionAdapter", "localeResolver", "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration", "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration", "jvmHeapPressureMetrics", "org.springframework.boot.health.autoconfigure.application.SslHealthContributorAutoConfiguration", "welcomePageNotAcceptableHandlerMapping", "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonMixinConfiguration", "org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterAutoConfiguration", "endpointOperationParameterMapper", "org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration", "spring.transaction-org.springframework.boot.transaction.autoconfigure.TransactionProperties", "jpaVendorAdapter", "sslBundleRegistry", "org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration", "wireDoctorAnalyzer", "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$ThreadPoolTaskExecutorBuilderConfiguration", "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonJsonHttpMessageConverterConfiguration", "jacksonGeoModule", "meterRegistryCloser", "mvcContentNegotiationManager", "org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration", "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration$PooledDataSourceConfiguration", "httpRequestHandlerAdapter", "asyncMailer", "org.springframework.aop.framework.autoproxy.defaultProxyConfig", "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration", "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration", "sslPropertiesSslBundleRegistrar", "org.springframework.context.annotation.internalCommonAnnotationProcessor", "org.springframework.boot.micrometer.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration", "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$AsyncConfigurerConfiguration", "defaultMeterObservationHandler", "notificationService", "simpleControllerHandlerAdapter", "resourceHandlerMapping", "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$HikariDataSourceMetricsConfiguration", "simpleAsyncTaskSchedulerBuilder", "spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties", "healthContributorRegistry", "management.health.db-org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthIndicatorProperties", "org.springframework.transaction.config.internalTransactionAdvisor", "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JsonProblemDetailsConfiguration", "eagerJpaMetamodelCacheCleanup", "propertiesObservationFilter", "persistenceManagedTypes", "micrometerClock", "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$JpaWebConfiguration", "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$Hikari", "propertiesMeterFilter", "problemDetailJsonMapperBuilderCustomizer", "demoSecurityConfig", "jacksonJsonMapper", "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletConfiguration", "com.wiredoctor.WireDoctorAutoConfiguration$GhostTrackingConfiguration", "endpointJsonMapperWebMvcConfigurer", "diskSpaceMetrics", "org.springframework.data.jpa.util.JpaMetamodelCacheCleanup", "servletEndpointDiscoverer", "metricsHttpServerUriTagFilter", "eagerTaskExecutorMetrics", "org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration", "privilegeEvaluator", "jacksonMixinModule", "healthEndpoint", "viewControllerHandlerMapping", "spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties", "mvcPatternParser", "org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor", "dispatcherServlet", "jvmInfoMetrics", "spring.jackson-org.springframework.boot.jackson.autoconfigure.JacksonProperties", "org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration", "demoChain", "webEndpointServletHandlerMapping", "org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor", "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration", "org.springframework.boot.micrometer.metrics.autoconfigure.logging.logback.LogbackMetricsAutoConfiguration", "threadPoolTaskExecutorBuilder", "processorMetrics", "inventoryService", "transactionAttributeSource", "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration", "transactionExecutionListeners", "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration$TomcatWebSocketConfiguration", "serverConvertersCustomizer", "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.Jackson2EndpointAutoConfiguration", "transactionManager", "org.springframework.data.web.config.SpringDataJackson3Configuration", "errorPageCustomizer", "openEntityManagerInViewInterceptorConfigurer", "tomcatWebServerFactoryCustomizer", "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration", "authenticationManagerPostProcessor", "threadPoolTaskSchedulerBuilder", "viewNameTranslator", "org.springframework.boot.thymeleaf.autoconfigure.TemplateEngineConfigurations$DefaultTemplateEngineConfiguration", "server-org.springframework.boot.web.server.autoconfigure.ServerProperties", "pageableCustomizer", "dispatcherServletRegistration", "dataSource", "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties", "healthEndpointGroupsBeanPostProcessor", "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorConfiguration", "com.wiredoctor.WireDoctorAutoConfiguration", "jpaMappingContext", "tomcatServletWebServerFactory", "mvcApiVersionStrategy", "error", "webAuthorizationManagerPostProcessor", "jdbcConnectionDetails", "org.springframework.boot.micrometer.observation.autoconfigure.ScheduledTasksObservationAutoConfiguration", "jvmGcMetrics", "offsetResolver", "initializeUserDetailsBeanManagerConfigurer", "spring.mvc-org.springframework.boot.webmvc.autoconfigure.WebMvcProperties", "jacksonJsonHttpMessageConvertersCustomizer", "healthEndpointWebMvcHandlerMapping", "defaultValidator", "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration", "welcomePageHandlerMapping", "servletExposeExcludePropertyEndpointFilter", "org.springframework.boot.web.server.autoconfigure.servlet.ServletWebServerConfiguration", "authenticationManagerBuilder", "webMvcObservationFilter", "securityDialect", "pageModule", "webSecurityExpressionHandler" ]
+ },
+ "counts" : {
+ "main" : 428
+ }
+ },
+ "startupSlowestSteps" : [ {
+ "name" : "spring.context.refresh",
+ "durationMs" : 6321,
+ "tags" : { }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 2205,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "&entityManagerFactory",
+ "beanType" : "interface org.springframework.context.weaving.LoadTimeWeaverAware"
+ }
+ }, {
+ "name" : "spring.context.beans.post-process",
+ "durationMs" : 1830,
+ "tags" : { }
+ }, {
+ "name" : "spring.context.beandef-registry.post-process",
+ "durationMs" : 1457,
+ "tags" : {
+ "postProcessor" : "org.springframework.context.annotation.ConfigurationClassPostProcessor@47404bea"
+ }
+ }, {
+ "name" : "spring.context.config-classes.parse",
+ "durationMs" : 1432,
+ "tags" : {
+ "classCount" : "164"
+ }
+ }, {
+ "name" : "spring.boot.webserver.create",
+ "durationMs" : 552,
+ "tags" : {
+ "factory" : "class org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 387,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "demoChain"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 341,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration.httpSecurity",
+ "beanType" : "class org.springframework.security.config.annotation.web.builders.HttpSecurity"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 279,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "catalogCacheWarmer"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 207,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "orderController"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 198,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "orderService",
+ "beanType" : "class com.example.demo.order.OrderService"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 193,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 189,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "orderRepository",
+ "beanType" : "interface com.example.demo.domain.OrderRepository"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 176,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "tomcatServletWebServerFactory",
+ "beanType" : "interface org.springframework.boot.web.server.servlet.ServletWebServerFactory"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 173,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "mvcContentNegotiationManager",
+ "beanType" : "interface org.springframework.web.accept.ContentNegotiationStrategy"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 148,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "requestMappingHandlerAdapter"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 123,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "jacksonJsonHttpMessageConvertersCustomizer",
+ "beanType" : "interface org.springframework.boot.http.converter.autoconfigure.ServerHttpMessageConvertersCustomizer"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 122,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "jacksonJsonMapper",
+ "beanType" : "class tools.jackson.databind.json.JsonMapper"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 114,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "webMvcObservationFilter",
+ "beanType" : "interface org.springframework.boot.web.servlet.ServletContextInitializer"
+ }
+ }, {
+ "name" : "spring.beans.instantiate",
+ "durationMs" : 99,
+ "tags" : {
+ "threadName" : "main",
+ "beanName" : "dataSourceScriptDatabaseInitializer"
+ }
+ } ],
+ "slowBeans" : [ {
+ "beanName" : "&entityManagerFactory",
+ "durationMs" : 2205
+ }, {
+ "beanName" : "demoChain",
+ "durationMs" : 387
+ }, {
+ "beanName" : "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration.httpSecurity",
+ "durationMs" : 341
+ }, {
+ "beanName" : "catalogCacheWarmer",
+ "durationMs" : 279
+ }, {
+ "beanName" : "orderController",
+ "durationMs" : 207
+ }, {
+ "beanName" : "orderService",
+ "durationMs" : 198
+ }, {
+ "beanName" : "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration",
+ "durationMs" : 193
+ }, {
+ "beanName" : "orderRepository",
+ "durationMs" : 189
+ }, {
+ "beanName" : "tomcatServletWebServerFactory",
+ "durationMs" : 176
+ }, {
+ "beanName" : "mvcContentNegotiationManager",
+ "durationMs" : 173
+ }, {
+ "beanName" : "requestMappingHandlerAdapter",
+ "durationMs" : 148
+ }, {
+ "beanName" : "jacksonJsonHttpMessageConvertersCustomizer",
+ "durationMs" : 123
+ }, {
+ "beanName" : "jacksonJsonMapper",
+ "durationMs" : 122
+ }, {
+ "beanName" : "webMvcObservationFilter",
+ "durationMs" : 114
+ } ],
+ "beanTimings" : {
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletEndpointManagementContextConfiguration" : 0,
+ "wireDoctorGhostTrackingPostProcessor" : 5,
+ "healthEndpointGroups" : 17,
+ "spring.data.web-org.springframework.boot.data.autoconfigure.web.DataWebProperties" : 1,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration" : 0,
+ "org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthContributorAutoConfiguration" : 0,
+ "hikariDataSourceMeterBinder" : 0,
+ "spring.jdbc-org.springframework.boot.jdbc.autoconfigure.JdbcProperties" : 0,
+ "jdbcTemplate" : 9,
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration" : 0,
+ "webEndpointPathMapper" : 3,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration" : 1,
+ "org.springframework.context.annotation.internalConfigurationAnnotationProcessor" : 42,
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration" : 0,
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration$ThymeleafViewResolverConfiguration" : 0,
+ "&entityManagerFactory" : 2205,
+ "openEntityManagerInViewInterceptor" : 2,
+ "org.springframework.boot.http.converter.autoconfigure.Jackson2HttpMessageConvertersConfiguration" : 0,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration" : 0,
+ "beanNameViewResolver" : 0,
+ "pathPatternRequestMatcherBuilder" : 0,
+ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration" : 2,
+ "viewResolver" : 78,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration$MeterFilterConfiguration" : 0,
+ "projectingArgumentResolverBeanPostProcessor" : 20,
+ "tomcatServletWebServerFactoryCustomizer" : 1,
+ "spring.servlet.encoding-org.springframework.boot.servlet.autoconfigure.ServletEncodingProperties" : 1,
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration" : 0,
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration" : 2,
+ "pricingService" : 5,
+ "dataSourceScriptDatabaseInitializer" : 99,
+ "applicationTaskExecutorAsyncConfigurer" : 1,
+ "meterRegistryPostProcessor" : 45,
+ "endpointMediaTypes" : 1,
+ "jvmCompilationMetrics" : 0,
+ "jacksonMixinModuleEntries" : 3,
+ "orderController" : 207,
+ "jdbcConnectionDetailsHikariBeanPostProcessor" : 4,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration" : 0,
+ "spring.ssl-org.springframework.boot.autoconfigure.ssl.SslProperties" : 1,
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration" : 0,
+ "repositoryTagsProvider" : 1,
+ "spring.http.converters-org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersProperties" : 0,
+ "org.springframework.scheduling.annotation.ProxyAsyncConfiguration" : 9,
+ "org.springframework.boot.context.internalConfigurationPropertiesBinder" : 1,
+ "dataSourcePoolMetadataMeterBinder" : 0,
+ "dbHealthContributor" : 10,
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$PersistenceManagedTypesConfiguration" : 0,
+ "jpa.OrderRepository.fragments#0" : 3,
+ "catalogCacheWarmer" : 279,
+ "webServerFactoryCustomizerBeanPostProcessor" : 0,
+ "controllerEndpointHandlerMapping" : 6,
+ "org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration" : 0,
+ "jdbcClient" : 1,
+ "observabilitySchedulingConfigurer" : 1,
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration" : 0,
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration" : 0,
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletManagementContextAutoConfiguration" : 0,
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration" : 0,
+ "management.health.diskspace-org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthIndicatorProperties" : 0,
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration" : 0,
+ "org.springframework.boot.persistence.autoconfigure.EntityScanPackages" : 0,
+ "spring.thymeleaf-org.springframework.boot.thymeleaf.autoconfigure.ThymeleafProperties" : 2,
+ "conventionErrorViewResolver" : 1,
+ "wireDoctorGhostTracker" : 1,
+ "org.springframework.context.event.internalEventListenerProcessor" : 1,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter" : 4,
+ "formContentFilter" : 3,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" : 0,
+ "defaultViewResolver" : 5,
+ "routerFunctionMapping" : 6,
+ "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration.httpSecurity" : 341,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.startup.StartupTimeMetricsListenerAutoConfiguration" : 0,
+ "spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties" : 0,
+ "multipartResolver" : 2,
+ "healthEndpointWebExtension" : 1,
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$EnableWebSecurityConfiguration" : 0,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration" : 0,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletConfiguration" : 0,
+ "conversionServicePostProcessor" : 6,
+ "webExposeExcludePropertyEndpointFilter" : 0,
+ "requestMappingHandlerMapping" : 63,
+ "lifecycleProcessor" : 2,
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration" : 0,
+ "org.springframework.aop.config.internalAutoProxyCreator" : 17,
+ "requestMappingHandlerAdapter" : 148,
+ "org.springframework.boot.servlet.autoconfigure.HttpEncodingAutoConfiguration" : 0,
+ "tomcatMetricsBinder" : 0,
+ "wiredoctor-com.wiredoctor.WireDoctorProperties" : 5,
+ "server.tomcat-org.springframework.boot.tomcat.autoconfigure.TomcatServerProperties" : 21,
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$EnableTransactionManagementConfiguration" : 0,
+ "org.springframework.data.jpa.repository.support.JpaEvaluationContextExtension" : 1,
+ "org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration" : 0,
+ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration" : 0,
+ "management.simple.metrics.export-org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleProperties" : 1,
+ "sslMeterBinder" : 2,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.ssl.SslMetricsAutoConfiguration" : 0,
+ "spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties" : 0,
+ "org.springframework.context.annotation.internalAutowiredAnnotationProcessor" : 1,
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$BootstrapExecutorConfiguration" : 0,
+ "orderService" : 198,
+ "metricsRepositoryMethodInvocationListenerBeanPostProcessor" : 1,
+ "classLoaderMetrics" : 1,
+ "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration" : 0,
+ "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration" : 193,
+ "org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration" : 1,
+ "org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration" : 6,
+ "org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory" : 3,
+ "org.springframework.boot.transaction.jta.autoconfigure.JtaAutoConfiguration" : 0,
+ "springDataWebSettings" : 2,
+ "fileWatcher" : 1,
+ "sortResolver" : 4,
+ "stringHttpMessageConvertersCustomizer" : 2,
+ "springSecurityPathPatternParserBeanDefinitionRegistryPostProcessor" : 1,
+ "org.springframework.boot.servlet.autoconfigure.MultipartAutoConfiguration" : 4,
+ "standardJsonMapperBuilderCustomizer" : 26,
+ "thymeleafViewResolver" : 75,
+ "errorAttributes" : 1,
+ "beanNameHandlerMapping" : 6,
+ "org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration" : 1,
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration$MvcRequestMatcherConfiguration" : 0,
+ "delegatingApplicationListener" : 0,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration" : 1,
+ "org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.methodValidationExcludeFilter" : 3,
+ "org.springframework.data.web.config.SpringDataJacksonConfiguration" : 0,
+ "bootstrapExecutor" : 17,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.task.TaskExecutorMetricsAutoConfiguration" : 10,
+ "flashMapManager" : 2,
+ "orderRepository" : 189,
+ "org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration" : 0,
+ "jackson2EndpointJsonMapper" : 3,
+ "requestMatcherProvider" : 1,
+ "legacyExportService" : 21,
+ "healthHttpCodeStatusMapper" : 2,
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$PathPatternRequestMatcherBuilderConfiguration" : 0,
+ "metricsRepositoryMethodInvocationListener" : 7,
+ "uptimeMetrics" : 0,
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonJsonCustomizerConfiguration" : 5,
+ "controllerExposeExcludePropertyEndpointFilter" : 0,
+ "jvmThreadMetrics" : 1,
+ "pathMappedEndpoints" : 64,
+ "auditService" : 4,
+ "standardJsonFactoryBuilderCustomizer" : 6,
+ "org.springframework.data.web.config.ProjectingArgumentResolverRegistrar" : 0,
+ "jsonFactory" : 39,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration" : 0,
+ "managementServletContext" : 0,
+ "fileDescriptorMetrics" : 0,
+ "livenessStateHealthIndicator" : 4,
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration$CglibAutoProxyConfiguration" : 0,
+ "org.springframework.transaction.config.internalTransactionalEventListenerFactory" : 0,
+ "org.springframework.boot.tomcat.autoconfigure.metrics.TomcatMetricsAutoConfiguration" : 0,
+ "org.springframework.boot.health.autoconfigure.application.AvailabilityHealthContributorAutoConfiguration" : 0,
+ "mvcValidator" : 1,
+ "applicationAvailability" : 1,
+ "defaultTemplateResolver" : 17,
+ "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration$EnableSameManagementContextConfiguration" : 0,
+ "mvcResourceUrlProvider" : 2,
+ "spring.jpa.hibernate-org.springframework.boot.hibernate.autoconfigure.HibernateProperties" : 1,
+ "sslInfo" : 0,
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$SimpleAsyncTaskExecutorBuilderConfiguration" : 1,
+ "spring.datasource-org.springframework.boot.jdbc.autoconfigure.DataSourceProperties" : 12,
+ "servletEndpointRegistrar" : 30,
+ "archivedReportExporter" : 7,
+ "org.springframework.boot.autoconfigure.AutoConfigurationPackages" : 10,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration" : 0,
+ "management.metrics-org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties" : 2,
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration" : 1,
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration" : 0,
+ "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties" : 1,
+ "jackson3pageModule" : 1,
+ "management.observations-org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties" : 3,
+ "hikariPoolDataSourceMetadataProvider" : 1,
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$SimpleAsyncTaskSchedulerBuilderConfiguration" : 0,
+ "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration" : 0,
+ "org.springframework.boot.security.autoconfigure.SecurityAutoConfiguration" : 0,
+ "org.springframework.boot.health.autoconfigure.contributor.HealthContributorAutoConfiguration" : 0,
+ "org.springframework.data.web.config.SpringDataWebConfiguration" : 2,
+ "legacyImportService" : 16,
+ "org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthContributorAutoConfiguration" : 1,
+ "propertiesEndpointAccessResolver" : 1,
+ "errorPageRegistrarBeanPostProcessor" : 0,
+ "mvcConversionService" : 7,
+ "endpointJackson2ObjectMapperWebMvcConfigurer" : 7,
+ "initializeAuthenticationProviderBeanManagerConfigurer" : 1,
+ "org.springframework.context.annotation.internalPersistenceAnnotationProcessor" : 0,
+ "controllerEndpointDiscoverer" : 2,
+ "org.springframework.boot.context.properties.BoundConfigurationProperties" : 0,
+ "diskSpaceHealthIndicator" : 1,
+ "jvmMemoryMetrics" : 1,
+ "org.springframework.boot.jdbc.autoconfigure.JdbcClientAutoConfiguration" : 0,
+ "mvcPathMatcher" : 1,
+ "handlerExceptionResolver" : 6,
+ "org.springframework.boot.data.jpa.autoconfigure.DataJpaRepositoriesAutoConfiguration" : 0,
+ "basicErrorController" : 5,
+ "pingHealthContributor" : 0,
+ "sslHealthIndicator" : 3,
+ "healthEndpointGroupMembershipValidator" : 1,
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration" : 0,
+ "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration" : 0,
+ "groupsHealthContributorNameValidator" : 0,
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration" : 0,
+ "namedParameterJdbcTemplate" : 3,
+ "simpleAsyncTaskExecutorBuilder" : 1,
+ "spring.web-org.springframework.boot.autoconfigure.web.WebProperties" : 3,
+ "spelValueExpressionResolver" : 0,
+ "org.springframework.scheduling.config.internalAsyncAnnotationProcessor" : 23,
+ "mvcViewResolver" : 2,
+ "simpleConfig" : 5,
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration$HealthConfiguration" : 0,
+ "org.springframework.boot.security.autoconfigure.UserDetailsServiceAutoConfiguration" : 0,
+ "requestDataValueProcessor" : 1,
+ "org.springframework.boot.health.autoconfigure.registry.HealthContributorRegistryAutoConfiguration" : 0,
+ "observationRegistry" : 93,
+ "mvcUriComponentsContributor" : 2,
+ "management.health.ssl-org.springframework.boot.health.autoconfigure.application.SslHealthIndicatorProperties" : 0,
+ "webAccessPropertiesOperationFilter" : 1,
+ "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration" : 0,
+ "readinessStateHealthIndicator" : 1,
+ "objectPostProcessor" : 3,
+ "jpaSharedEM_entityManagerFactory" : 13,
+ "wiredoctorDemoApplication" : 0,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.JacksonEndpointAutoConfiguration" : 0,
+ "templateEngine" : 60,
+ "jackson3GeoModule" : 9,
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointAutoConfiguration" : 0,
+ "spring.sql.init-org.springframework.boot.sql.autoconfigure.init.SqlInitializationProperties" : 2,
+ "platformTransactionManagerCustomizers" : 3,
+ "securityFilterChainRegistration" : 7,
+ "data-jpa.repository-aot-processor#0" : 5,
+ "endpointCachingOperationInvokerAdvisor" : 1,
+ "defaultServletHandlerMapping" : 0,
+ "org.springframework.boot.data.autoconfigure.metrics.DataRepositoryMetricsAutoConfiguration" : 2,
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafSecurityDialectConfiguration" : 0,
+ "spring.security-org.springframework.boot.security.autoconfigure.SecurityProperties" : 0,
+ "persistenceExceptionTranslationPostProcessor" : 2,
+ "characterEncodingFilter" : 4,
+ "observationRegistryPostProcessor" : 3,
+ "sortCustomizer" : 0,
+ "webEndpointDiscoverer" : 27,
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$EnableTransactionManagementConfiguration$CglibAutoProxyConfiguration" : 0,
+ "org.springframework.security.config.annotation.web.configuration.ObservationConfiguration" : 0,
+ "preserveErrorControllerTargetClassPostProcessor" : 0,
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration" : 0,
+ "logbackMetrics" : 1,
+ "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateAutoConfiguration" : 0,
+ "management.info-org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties" : 1,
+ "org.springframework.boot.jdbc.autoconfigure.NamedParameterJdbcTemplateConfiguration" : 0,
+ "propertySourcesPlaceholderConfigurer" : 1,
+ "org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration" : 8,
+ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration" : 0,
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$TransactionTemplateConfiguration" : 0,
+ "management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties" : 1,
+ "methodValidationPostProcessor" : 33,
+ "wireDoctorGhostReportWriter" : 6,
+ "jsonComponentModule" : 5,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" : 32,
+ "entityManagerFactoryBuilder" : 42,
+ "org.springframework.context.event.internalEventListenerFactory" : 0,
+ "org.springframework.boot.persistence.autoconfigure.PersistenceExceptionTranslationAutoConfiguration" : 0,
+ "webSocketWebServerCustomizer" : 1,
+ "clientConvertersCustomizer" : 1,
+ "spring.jpa-org.springframework.boot.jpa.autoconfigure.JpaProperties" : 2,
+ "springSecurityFilterChain" : 16,
+ "org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration" : 23,
+ "management.metrics.data-org.springframework.boot.data.autoconfigure.metrics.DataMetricsProperties" : 1,
+ "healthStatusAggregator" : 4,
+ "endpointJsonMapper" : 1,
+ "enableGlobalAuthenticationAutowiredConfigurer" : 1,
+ "transactionTemplate" : 1,
+ "mvcUrlPathHelper" : 1,
+ "jsonMapperBuilder" : 80,
+ "servletWebServerFactoryCustomizer" : 29,
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointWebExtensionConfiguration" : 0,
+ "inMemoryUserDetailsManager" : 7,
+ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration" : 0,
+ "org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration" : 16,
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$ThreadPoolTaskSchedulerBuilderConfiguration" : 0,
+ "org.springframework.boot.webmvc.autoconfigure.actuate.endpoint.web.WebMvcHealthEndpointExtensionAutoConfiguration" : 0,
+ "jpa.named-queries#0" : 3,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration" : 0,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration" : 0,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration" : 0,
+ "filterChainDecoratorPostProcessor" : 1,
+ "org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration" : 0,
+ "metricsObservationHandlerGroup" : 2,
+ "org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration" : 17,
+ "spring.servlet.multipart-org.springframework.boot.servlet.autoconfigure.MultipartProperties" : 3,
+ "transactionInterceptor" : 7,
+ "simpleMeterRegistry" : 56,
+ "authenticationEventPublisher" : 6,
+ "bootstrapExecutorAliasPostProcessor" : 0,
+ "startupTimeMetrics" : 1,
+ "spring.security.filter-org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterProperties" : 1,
+ "multipartConfigElement" : 6,
+ "requestContextFilter" : 3,
+ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration" : 0,
+ "pageableResolver" : 3,
+ "availabilityProbesHealthEndpointGroupsPostProcessor" : 1,
+ "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateConfiguration" : 0,
+ "handlerFunctionAdapter" : 1,
+ "localeResolver" : 1,
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration" : 1,
+ "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration" : 0,
+ "jvmHeapPressureMetrics" : 3,
+ "org.springframework.boot.health.autoconfigure.application.SslHealthContributorAutoConfiguration" : 0,
+ "welcomePageNotAcceptableHandlerMapping" : 3,
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonMixinConfiguration" : 0,
+ "org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterAutoConfiguration" : 0,
+ "endpointOperationParameterMapper" : 3,
+ "org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration" : 0,
+ "spring.transaction-org.springframework.boot.transaction.autoconfigure.TransactionProperties" : 1,
+ "jpaVendorAdapter" : 36,
+ "sslBundleRegistry" : 15,
+ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration" : 15,
+ "wireDoctorAnalyzer" : 3,
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$ThreadPoolTaskExecutorBuilderConfiguration" : 0,
+ "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonJsonHttpMessageConverterConfiguration" : 0,
+ "jacksonGeoModule" : 4,
+ "meterRegistryCloser" : 1,
+ "mvcContentNegotiationManager" : 173,
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration" : 0,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration$PooledDataSourceConfiguration" : 0,
+ "httpRequestHandlerAdapter" : 0,
+ "asyncMailer" : 6,
+ "org.springframework.aop.framework.autoproxy.defaultProxyConfig" : 1,
+ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration" : 0,
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration" : 0,
+ "sslPropertiesSslBundleRegistrar" : 3,
+ "org.springframework.context.annotation.internalCommonAnnotationProcessor" : 2,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration" : 0,
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$AsyncConfigurerConfiguration" : 0,
+ "defaultMeterObservationHandler" : 67,
+ "notificationService" : 7,
+ "simpleControllerHandlerAdapter" : 0,
+ "resourceHandlerMapping" : 13,
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$HikariDataSourceMetricsConfiguration" : 0,
+ "simpleAsyncTaskSchedulerBuilder" : 1,
+ "spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties" : 0,
+ "healthContributorRegistry" : 30,
+ "management.health.db-org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthIndicatorProperties" : 1,
+ "org.springframework.transaction.config.internalTransactionAdvisor" : 33,
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JsonProblemDetailsConfiguration" : 0,
+ "eagerJpaMetamodelCacheCleanup" : 0,
+ "propertiesObservationFilter" : 9,
+ "persistenceManagedTypes" : 7,
+ "micrometerClock" : 1,
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$JpaWebConfiguration" : 1,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$Hikari" : 0,
+ "propertiesMeterFilter" : 2,
+ "problemDetailJsonMapperBuilderCustomizer" : 1,
+ "demoSecurityConfig" : 1,
+ "jacksonJsonMapper" : 122,
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletConfiguration" : 0,
+ "com.wiredoctor.WireDoctorAutoConfiguration$GhostTrackingConfiguration" : 0,
+ "endpointJsonMapperWebMvcConfigurer" : 2,
+ "diskSpaceMetrics" : 0,
+ "org.springframework.data.jpa.util.JpaMetamodelCacheCleanup" : 0,
+ "servletEndpointDiscoverer" : 15,
+ "metricsHttpServerUriTagFilter" : 3,
+ "eagerTaskExecutorMetrics" : 0,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration" : 0,
+ "privilegeEvaluator" : 0,
+ "jacksonMixinModule" : 6,
+ "healthEndpoint" : 38,
+ "viewControllerHandlerMapping" : 1,
+ "spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties" : 2,
+ "mvcPatternParser" : 1,
+ "org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor" : 0,
+ "dispatcherServlet" : 20,
+ "jvmInfoMetrics" : 0,
+ "spring.jackson-org.springframework.boot.jackson.autoconfigure.JacksonProperties" : 4,
+ "org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration" : 0,
+ "demoChain" : 387,
+ "webEndpointServletHandlerMapping" : 16,
+ "org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor" : 1,
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration" : 1,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.logging.logback.LogbackMetricsAutoConfiguration" : 0,
+ "threadPoolTaskExecutorBuilder" : 7,
+ "processorMetrics" : 8,
+ "inventoryService" : 6,
+ "transactionAttributeSource" : 4,
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration" : 0,
+ "transactionExecutionListeners" : 1,
+ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration$TomcatWebSocketConfiguration" : 0,
+ "serverConvertersCustomizer" : 3,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.Jackson2EndpointAutoConfiguration" : 0,
+ "transactionManager" : 6,
+ "org.springframework.data.web.config.SpringDataJackson3Configuration" : 4,
+ "errorPageCustomizer" : 38,
+ "openEntityManagerInViewInterceptorConfigurer" : 5,
+ "tomcatWebServerFactoryCustomizer" : 11,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration" : 0,
+ "authenticationManagerPostProcessor" : 0,
+ "threadPoolTaskSchedulerBuilder" : 3,
+ "viewNameTranslator" : 1,
+ "org.springframework.boot.thymeleaf.autoconfigure.TemplateEngineConfigurations$DefaultTemplateEngineConfiguration" : 0,
+ "server-org.springframework.boot.web.server.autoconfigure.ServerProperties" : 7,
+ "pageableCustomizer" : 0,
+ "dispatcherServletRegistration" : 35,
+ "dataSource" : 90,
+ "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties" : 1,
+ "healthEndpointGroupsBeanPostProcessor" : 1,
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorConfiguration" : 0,
+ "com.wiredoctor.WireDoctorAutoConfiguration" : 0,
+ "jpaMappingContext" : 27,
+ "tomcatServletWebServerFactory" : 176,
+ "mvcApiVersionStrategy" : 4,
+ "error" : 0,
+ "webAuthorizationManagerPostProcessor" : 2,
+ "jdbcConnectionDetails" : 1,
+ "org.springframework.boot.micrometer.observation.autoconfigure.ScheduledTasksObservationAutoConfiguration" : 0,
+ "jvmGcMetrics" : 5,
+ "offsetResolver" : 1,
+ "initializeUserDetailsBeanManagerConfigurer" : 1,
+ "spring.mvc-org.springframework.boot.webmvc.autoconfigure.WebMvcProperties" : 5,
+ "jacksonJsonHttpMessageConvertersCustomizer" : 123,
+ "healthEndpointWebMvcHandlerMapping" : 6,
+ "defaultValidator" : 10,
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration" : 0,
+ "welcomePageHandlerMapping" : 23,
+ "servletExposeExcludePropertyEndpointFilter" : 1,
+ "org.springframework.boot.web.server.autoconfigure.servlet.ServletWebServerConfiguration" : 0,
+ "authenticationManagerBuilder" : 9,
+ "webMvcObservationFilter" : 114,
+ "securityDialect" : 7,
+ "pageModule" : 1,
+ "webSecurityExpressionHandler" : 16
+ },
+ "slowBeanThreshold" : 100,
+ "totalStartupMs" : 7067,
+ "beanCategories" : {
+ "totalBeans" : 429,
+ "roleApplication" : 397,
+ "roleSupport" : 1,
+ "roleInfrastructure" : 31,
+ "userDefined" : 23,
+ "frameworkOwned" : 406
+ },
+ "proxies" : {
+ "cglibCount" : 18,
+ "jdkCount" : 0,
+ "cglibBeans" : [ "archivedReportExporter", "legacyExportService", "legacyImportService", "asyncMailer", "auditService", "catalogCacheWarmer", "inventoryService", "notificationService", "orderController", "orderService", "pricingService", "dataSource", "jsonFactory", "jacksonJsonMapper", "securityDialect", "thymeleafViewResolver", "defaultTemplateResolver", "templateEngine" ],
+ "jdkBeans" : [ ],
+ "notInstantiatedSkipped" : 4
+ },
+ "ghostCandidates" : {
+ "confidence" : "LOW",
+ "disclaimer" : "Heuristic: bean was eagerly instantiated, has no incoming dependencies, and no known entry point was detected from its metadata. NOT proof of dead code — reflective access, programmatic getBean() lookups and framework-collected usages are invisible to this analysis.",
+ "count" : 2,
+ "beans" : [ "archivedReportExporter", "catalogCacheWarmer" ],
+ "entryPointsExcluded" : 1,
+ "notInstantiatedExcluded" : 0
+ },
+ "smells" : {
+ "highFanIn" : [ {
+ "beanName" : "auditService",
+ "inDegree" : 4,
+ "dependents" : [ "inventoryService", "notificationService", "orderService", "pricingService" ]
+ }, {
+ "beanName" : "pricingService",
+ "inDegree" : 2,
+ "dependents" : [ "catalogCacheWarmer", "orderService" ]
+ }, {
+ "beanName" : "asyncMailer",
+ "inDegree" : 1,
+ "dependents" : [ "notificationService" ]
+ }, {
+ "beanName" : "demoSecurityConfig",
+ "inDegree" : 1,
+ "dependents" : [ "demoChain" ]
+ }, {
+ "beanName" : "inventoryService",
+ "inDegree" : 1,
+ "dependents" : [ "orderService" ]
+ }, {
+ "beanName" : "legacyExportService",
+ "inDegree" : 1,
+ "dependents" : [ "legacyImportService" ]
+ }, {
+ "beanName" : "legacyImportService",
+ "inDegree" : 1,
+ "dependents" : [ "legacyExportService" ]
+ }, {
+ "beanName" : "notificationService",
+ "inDegree" : 1,
+ "dependents" : [ "orderService" ]
+ }, {
+ "beanName" : "orderRepository",
+ "inDegree" : 1,
+ "dependents" : [ "orderService" ]
+ }, {
+ "beanName" : "orderService",
+ "inDegree" : 1,
+ "dependents" : [ "orderController" ]
+ } ],
+ "highFanOut" : [ {
+ "beanName" : "orderService",
+ "outDegree" : 5,
+ "dependencies" : [ "orderRepository", "pricingService", "inventoryService", "notificationService", "auditService" ]
+ }, {
+ "beanName" : "orderRepository",
+ "outDegree" : 4,
+ "dependencies" : [ "jpa.named-queries#0", "jpa.OrderRepository.fragments#0", "jpaSharedEM_entityManagerFactory", "jpaMappingContext" ]
+ }, {
+ "beanName" : "notificationService",
+ "outDegree" : 2,
+ "dependencies" : [ "auditService", "asyncMailer" ]
+ }, {
+ "beanName" : "catalogCacheWarmer",
+ "outDegree" : 1,
+ "dependencies" : [ "pricingService" ]
+ }, {
+ "beanName" : "inventoryService",
+ "outDegree" : 1,
+ "dependencies" : [ "auditService" ]
+ }, {
+ "beanName" : "legacyExportService",
+ "outDegree" : 1,
+ "dependencies" : [ "legacyImportService" ]
+ }, {
+ "beanName" : "legacyImportService",
+ "outDegree" : 1,
+ "dependencies" : [ "legacyExportService" ]
+ }, {
+ "beanName" : "orderController",
+ "outDegree" : 1,
+ "dependencies" : [ "orderService" ]
+ }, {
+ "beanName" : "pricingService",
+ "outDegree" : 1,
+ "dependencies" : [ "auditService" ]
+ } ],
+ "unstable" : [ {
+ "beanName" : "orderService",
+ "instability" : 0.83,
+ "fanIn" : 1,
+ "fanOut" : 5
+ }, {
+ "beanName" : "orderRepository",
+ "instability" : 0.8,
+ "fanIn" : 1,
+ "fanOut" : 4
+ } ],
+ "frameworkFiltered" : true,
+ "fanIn" : {
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletEndpointManagementContextConfiguration" : 1,
+ "org.springframework.boot.data.autoconfigure.metrics.DataRepositoryMetricsAutoConfiguration" : 2,
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafSecurityDialectConfiguration" : 1,
+ "spring.security-org.springframework.boot.security.autoconfigure.SecurityProperties" : 1,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration" : 2,
+ "healthEndpointGroups" : 3,
+ "spring.data.web-org.springframework.boot.data.autoconfigure.web.DataWebProperties" : 1,
+ "webEndpointDiscoverer" : 3,
+ "org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthContributorAutoConfiguration" : 1,
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration" : 1,
+ "spring.jdbc-org.springframework.boot.jdbc.autoconfigure.JdbcProperties" : 1,
+ "jdbcTemplate" : 1,
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration" : 4,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration" : 8,
+ "org.springframework.boot.jdbc.autoconfigure.NamedParameterJdbcTemplateConfiguration" : 1,
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration$ThymeleafViewResolverConfiguration" : 1,
+ "openEntityManagerInViewInterceptor" : 1,
+ "org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration" : 2,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration" : 1,
+ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration" : 1,
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$TransactionTemplateConfiguration" : 1,
+ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration" : 3,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration$MeterFilterConfiguration" : 1,
+ "management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties" : 2,
+ "spring.servlet.encoding-org.springframework.boot.servlet.autoconfigure.ServletEncodingProperties" : 1,
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration" : 1,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" : 26,
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration" : 1,
+ "entityManagerFactoryBuilder" : 1,
+ "pricingService" : 2,
+ "dataSourceScriptDatabaseInitializer" : 4,
+ "spring.jpa-org.springframework.boot.jpa.autoconfigure.JpaProperties" : 2,
+ "(inner bean)#4e41b993" : 1,
+ "endpointMediaTypes" : 2,
+ "jacksonMixinModuleEntries" : 1,
+ "springSecurityFilterChain" : 2,
+ "org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration" : 2,
+ "management.metrics.data-org.springframework.boot.data.autoconfigure.metrics.DataMetricsProperties" : 1,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration" : 1,
+ "endpointJsonMapper" : 1,
+ "enableGlobalAuthenticationAutowiredConfigurer" : 1,
+ "spring.ssl-org.springframework.boot.autoconfigure.ssl.SslProperties" : 1,
+ "jsonMapperBuilder" : 1,
+ "repositoryTagsProvider" : 1,
+ "spring.http.converters-org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersProperties" : 1,
+ "org.springframework.scheduling.annotation.ProxyAsyncConfiguration" : 1,
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointWebExtensionConfiguration" : 1,
+ "dbHealthContributor" : 1,
+ "jpa.OrderRepository.fragments#0" : 1,
+ "org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration" : 3,
+ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration" : 3,
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$ThreadPoolTaskSchedulerBuilderConfiguration" : 1,
+ "org.springframework.boot.webmvc.autoconfigure.actuate.endpoint.web.WebMvcHealthEndpointExtensionAutoConfiguration" : 1,
+ "jpa.named-queries#0" : 1,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration" : 5,
+ "org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration" : 1,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration" : 1,
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration" : 3,
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletManagementContextAutoConfiguration" : 1,
+ "org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration" : 2,
+ "spring.servlet.multipart-org.springframework.boot.servlet.autoconfigure.MultipartProperties" : 1,
+ "management.health.diskspace-org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthIndicatorProperties" : 1,
+ "transactionInterceptor" : 1,
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration" : 3,
+ "simpleMeterRegistry" : 3,
+ "entityManagerFactory" : 1,
+ "spring.thymeleaf-org.springframework.boot.thymeleaf.autoconfigure.ThymeleafProperties" : 3,
+ "spring.security.filter-org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterProperties" : 1,
+ "wireDoctorGhostTracker" : 2,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter" : 3,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" : 7,
+ "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration.httpSecurity" : 1,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.startup.StartupTimeMetricsListenerAutoConfiguration" : 1,
+ "spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties" : 2,
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration" : 1,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletConfiguration" : 1,
+ "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateConfiguration" : 1,
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration" : 6,
+ "org.springframework.boot.servlet.autoconfigure.HttpEncodingAutoConfiguration" : 1,
+ "requestMappingHandlerAdapter" : 1,
+ "wiredoctor-com.wiredoctor.WireDoctorProperties" : 2,
+ "org.springframework.boot.health.autoconfigure.application.SslHealthContributorAutoConfiguration" : 2,
+ "server.tomcat-org.springframework.boot.tomcat.autoconfigure.TomcatServerProperties" : 3,
+ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration" : 1,
+ "org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration" : 1,
+ "management.simple.metrics.export-org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleProperties" : 1,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.ssl.SslMetricsAutoConfiguration" : 1,
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonMixinConfiguration" : 1,
+ "spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties" : 1,
+ "org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterAutoConfiguration" : 1,
+ "endpointOperationParameterMapper" : 1,
+ "orderService" : 1,
+ "jpaVendorAdapter" : 1,
+ "sslBundleRegistry" : 2,
+ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration" : 4,
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$ThreadPoolTaskExecutorBuilderConfiguration" : 1,
+ "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonJsonHttpMessageConverterConfiguration" : 1,
+ "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration" : 1,
+ "org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration" : 2,
+ "org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration" : 3,
+ "org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory" : 1,
+ "fileWatcher" : 1,
+ "springDataWebSettings" : 2,
+ "mvcContentNegotiationManager" : 6,
+ "org.springframework.boot.servlet.autoconfigure.MultipartAutoConfiguration" : 2,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration$PooledDataSourceConfiguration" : 1,
+ "environment" : 10,
+ "errorAttributes" : 1,
+ "asyncMailer" : 1,
+ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration" : 2,
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration$MvcRequestMatcherConfiguration" : 1,
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$AsyncConfigurerConfiguration" : 1,
+ "notificationService" : 1,
+ "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e" : 11,
+ "org.springframework.data.web.config.SpringDataJacksonConfiguration" : 2,
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$HikariDataSourceMetricsConfiguration" : 1,
+ "spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties" : 1,
+ "healthContributorRegistry" : 3,
+ "management.health.db-org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthIndicatorProperties" : 1,
+ "orderRepository" : 1,
+ "org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration" : 1,
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JsonProblemDetailsConfiguration" : 1,
+ "jackson2EndpointJsonMapper" : 1,
+ "persistenceManagedTypes" : 1,
+ "micrometerClock" : 2,
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$Hikari" : 1,
+ "legacyExportService" : 1,
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$JpaWebConfiguration" : 2,
+ "demoSecurityConfig" : 1,
+ "jacksonJsonMapper" : 1,
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletConfiguration" : 1,
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$PathPatternRequestMatcherBuilderConfiguration" : 1,
+ "com.wiredoctor.WireDoctorAutoConfiguration$GhostTrackingConfiguration" : 2,
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonJsonCustomizerConfiguration" : 2,
+ "endpointJsonMapperWebMvcConfigurer" : 1,
+ "auditService" : 4,
+ "jsonFactory" : 1,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration" : 4,
+ "livenessStateHealthIndicator" : 1,
+ "org.springframework.boot.tomcat.autoconfigure.metrics.TomcatMetricsAutoConfiguration" : 1,
+ "servletEndpointDiscoverer" : 3,
+ "mvcValidator" : 1,
+ "applicationAvailability" : 2,
+ "spring.jpa.hibernate-org.springframework.boot.hibernate.autoconfigure.HibernateProperties" : 1,
+ "mvcResourceUrlProvider" : 7,
+ "spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties" : 2,
+ "sslInfo" : 1,
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$SimpleAsyncTaskExecutorBuilderConfiguration" : 1,
+ "spring.datasource-org.springframework.boot.jdbc.autoconfigure.DataSourceProperties" : 2,
+ "dispatcherServlet" : 1,
+ "management.metrics-org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties" : 4,
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration" : 3,
+ "spring.jackson-org.springframework.boot.jackson.autoconfigure.JacksonProperties" : 1,
+ "org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration" : 2,
+ "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties" : 6,
+ "demoChain" : 1,
+ "management.observations-org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties" : 3,
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration" : 2,
+ "org.springframework.boot.micrometer.metrics.autoconfigure.logging.logback.LogbackMetricsAutoConfiguration" : 1,
+ "threadPoolTaskExecutorBuilder" : 1,
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$SimpleAsyncTaskSchedulerBuilderConfiguration" : 1,
+ "inventoryService" : 1,
+ "(inner bean)#394e0104" : 1,
+ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" : 20,
+ "org.springframework.boot.security.autoconfigure.SecurityAutoConfiguration" : 1,
+ "transactionAttributeSource" : 2,
+ "org.springframework.boot.health.autoconfigure.contributor.HealthContributorAutoConfiguration" : 1,
+ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration$TomcatWebSocketConfiguration" : 1,
+ "org.springframework.data.web.config.SpringDataWebConfiguration" : 4,
+ "legacyImportService" : 1,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.Jackson2EndpointAutoConfiguration" : 1,
+ "transactionManager" : 1,
+ "org.springframework.data.web.config.SpringDataJackson3Configuration" : 2,
+ "propertiesEndpointAccessResolver" : 3,
+ "org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthContributorAutoConfiguration" : 1,
+ "mvcConversionService" : 9,
+ "endpointJackson2ObjectMapperWebMvcConfigurer" : 1,
+ "initializeAuthenticationProviderBeanManagerConfigurer" : 1,
+ "openEntityManagerInViewInterceptorConfigurer" : 1,
+ "controllerEndpointDiscoverer" : 3,
+ "diskSpaceHealthIndicator" : 1,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration" : 3,
+ "org.springframework.boot.jdbc.autoconfigure.JdbcClientAutoConfiguration" : 1,
+ "org.springframework.boot.thymeleaf.autoconfigure.TemplateEngineConfigurations$DefaultTemplateEngineConfiguration" : 1,
+ "server-org.springframework.boot.web.server.autoconfigure.ServerProperties" : 2,
+ "pingHealthContributor" : 1,
+ "dispatcherServletRegistration" : 4,
+ "dataSource" : 3,
+ "sslHealthIndicator" : 1,
+ "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties" : 6,
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration" : 1,
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorConfiguration" : 1,
+ "com.wiredoctor.WireDoctorAutoConfiguration" : 1,
+ "jpaMappingContext" : 1,
+ "groupsHealthContributorNameValidator" : 1,
+ "mvcApiVersionStrategy" : 2,
+ "namedParameterJdbcTemplate" : 1,
+ "jdbcConnectionDetails" : 1,
+ "spring.web-org.springframework.boot.autoconfigure.web.WebProperties" : 5,
+ "initializeUserDetailsBeanManagerConfigurer" : 1,
+ "spring.mvc-org.springframework.boot.webmvc.autoconfigure.WebMvcProperties" : 4,
+ "org.springframework.boot.micrometer.observation.autoconfigure.ScheduledTasksObservationAutoConfiguration" : 1,
+ "simpleConfig" : 1,
+ "org.springframework.boot.security.autoconfigure.UserDetailsServiceAutoConfiguration" : 1,
+ "org.springframework.boot.health.autoconfigure.registry.HealthContributorRegistryAutoConfiguration" : 1,
+ "org.springframework.boot.web.server.autoconfigure.servlet.ServletWebServerConfiguration" : 1,
+ "observationRegistry" : 2,
+ "management.health.ssl-org.springframework.boot.health.autoconfigure.application.SslHealthIndicatorProperties" : 1,
+ "readinessStateHealthIndicator" : 1,
+ "jpaSharedEM_entityManagerFactory" : 1,
+ "objectPostProcessor" : 4,
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.JacksonEndpointAutoConfiguration" : 1,
+ "templateEngine" : 1,
+ "spring.sql.init-org.springframework.boot.sql.autoconfigure.init.SqlInitializationProperties" : 1
+ }
+ },
+ "dependencies" : {
+ "totalBeans" : 429,
+ "totalEdges" : 436,
+ "cyclesCount" : 1,
+ "cycles" : [ [ "legacyImportService", "legacyExportService" ] ],
+ "orphanBeansCount" : 3,
+ "orphanBeans" : [ "archivedReportExporter", "catalogCacheWarmer", "orderController" ],
+ "graph" : {
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletEndpointManagementContextConfiguration" : [ ],
+ "wireDoctorGhostTrackingPostProcessor" : [ "wireDoctorGhostTracker", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e", "environment" ],
+ "applicationTaskExecutor" : [ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorConfiguration", "threadPoolTaskExecutorBuilder" ],
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration" : [ ],
+ "spring.data.web-org.springframework.boot.data.autoconfigure.web.DataWebProperties" : [ ],
+ "healthEndpointGroups" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303", "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties" ],
+ "org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthContributorAutoConfiguration" : [ ],
+ "hikariDataSourceMeterBinder" : [ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$HikariDataSourceMetricsConfiguration" ],
+ "spring.jdbc-org.springframework.boot.jdbc.autoconfigure.JdbcProperties" : [ ],
+ "jdbcTemplate" : [ "dataSourceScriptDatabaseInitializer", "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateConfiguration", "dataSource", "spring.jdbc-org.springframework.boot.jdbc.autoconfigure.JdbcProperties" ],
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303", "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties" ],
+ "webEndpointPathMapper" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration" ],
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration" : [ ],
+ "org.springframework.context.annotation.internalConfigurationAnnotationProcessor" : [ "org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory" ],
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration" : [ ],
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration$ThymeleafViewResolverConfiguration" : [ ],
+ "openEntityManagerInViewInterceptor" : [ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$JpaWebConfiguration" ],
+ "org.springframework.boot.http.converter.autoconfigure.Jackson2HttpMessageConvertersConfiguration" : [ ],
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration" : [ ],
+ "beanNameViewResolver" : [ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration" ],
+ "pathPatternRequestMatcherBuilder" : [ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$PathPatternRequestMatcherBuilderConfiguration", "dispatcherServletRegistration" ],
+ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration" : [ "spring.data.web-org.springframework.boot.data.autoconfigure.web.DataWebProperties" ],
+ "viewResolver" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e" ],
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration$MeterFilterConfiguration" : [ ],
+ "projectingArgumentResolverBeanPostProcessor" : [ ],
+ "tomcatServletWebServerFactoryCustomizer" : [ "org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration", "server.tomcat-org.springframework.boot.tomcat.autoconfigure.TomcatServerProperties" ],
+ "spring.servlet.encoding-org.springframework.boot.servlet.autoconfigure.ServletEncodingProperties" : [ ],
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration" : [ ],
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration" : [ "spring.thymeleaf-org.springframework.boot.thymeleaf.autoconfigure.ThymeleafProperties", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "pricingService" : [ "auditService" ],
+ "dataSourceScriptDatabaseInitializer" : [ "org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration", "dataSource", "spring.sql.init-org.springframework.boot.sql.autoconfigure.init.SqlInitializationProperties" ],
+ "applicationTaskExecutorAsyncConfigurer" : [ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$AsyncConfigurerConfiguration", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e" ],
+ "meterRegistryPostProcessor" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "endpointMediaTypes" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration" ],
+ "jacksonMixinModuleEntries" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "jvmCompilationMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" ],
+ "orderController" : [ "orderService" ],
+ "jdbcConnectionDetailsHikariBeanPostProcessor" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration" : [ ],
+ "spring.ssl-org.springframework.boot.autoconfigure.ssl.SslProperties" : [ ],
+ "repositoryTagsProvider" : [ "org.springframework.boot.data.autoconfigure.metrics.DataRepositoryMetricsAutoConfiguration" ],
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration" : [ ],
+ "spring.http.converters-org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersProperties" : [ ],
+ "org.springframework.scheduling.annotation.ProxyAsyncConfiguration" : [ ],
+ "org.springframework.boot.context.internalConfigurationPropertiesBinder" : [ ],
+ "dbHealthContributor" : [ "org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthContributorAutoConfiguration", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e", "management.health.db-org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthIndicatorProperties" ],
+ "dataSourcePoolMetadataMeterBinder" : [ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e" ],
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$PersistenceManagedTypesConfiguration" : [ ],
+ "jpa.OrderRepository.fragments#0" : [ ],
+ "catalogCacheWarmer" : [ "pricingService" ],
+ "webServerFactoryCustomizerBeanPostProcessor" : [ ],
+ "controllerEndpointHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration", "controllerEndpointDiscoverer", "management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties", "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties", "propertiesEndpointAccessResolver" ],
+ "org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration" : [ ],
+ "jdbcClient" : [ "dataSourceScriptDatabaseInitializer", "org.springframework.boot.jdbc.autoconfigure.JdbcClientAutoConfiguration", "namedParameterJdbcTemplate" ],
+ "observabilitySchedulingConfigurer" : [ "org.springframework.boot.micrometer.observation.autoconfigure.ScheduledTasksObservationAutoConfiguration", "observationRegistry" ],
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration" : [ ],
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration" : [ ],
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration" : [ ],
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletManagementContextAutoConfiguration" : [ ],
+ "management.health.diskspace-org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthIndicatorProperties" : [ ],
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration" : [ ],
+ "conventionErrorViewResolver" : [ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration" ],
+ "spring.thymeleaf-org.springframework.boot.thymeleaf.autoconfigure.ThymeleafProperties" : [ ],
+ "org.springframework.context.event.internalEventListenerProcessor" : [ ],
+ "wireDoctorGhostTracker" : [ "com.wiredoctor.WireDoctorAutoConfiguration$GhostTrackingConfiguration" ],
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter" : [ "spring.web-org.springframework.boot.autoconfigure.web.WebProperties", "spring.mvc-org.springframework.boot.webmvc.autoconfigure.WebMvcProperties", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e" ],
+ "formContentFilter" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration" ],
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" : [ ],
+ "defaultViewResolver" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter" ],
+ "routerFunctionMapping" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "mvcConversionService", "mvcResourceUrlProvider", "mvcApiVersionStrategy" ],
+ "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration.httpSecurity" : [ "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration" ],
+ "org.springframework.boot.micrometer.metrics.autoconfigure.startup.StartupTimeMetricsListenerAutoConfiguration" : [ ],
+ "spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties" : [ ],
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration" : [ ],
+ "healthEndpointWebExtension" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointWebExtensionConfiguration", "healthContributorRegistry", "healthEndpointGroups", "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties" ],
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$EnableWebSecurityConfiguration" : [ ],
+ "multipartResolver" : [ "org.springframework.boot.servlet.autoconfigure.MultipartAutoConfiguration" ],
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletConfiguration" : [ ],
+ "conversionServicePostProcessor" : [ ],
+ "requestMappingHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "mvcContentNegotiationManager", "mvcApiVersionStrategy", "mvcConversionService", "mvcResourceUrlProvider" ],
+ "webExposeExcludePropertyEndpointFilter" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration" ],
+ "lifecycleProcessor" : [ "org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration", "spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties" ],
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration" : [ ],
+ "org.springframework.aop.config.internalAutoProxyCreator" : [ ],
+ "requestMappingHandlerAdapter" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "mvcContentNegotiationManager", "mvcConversionService", "mvcValidator" ],
+ "org.springframework.boot.servlet.autoconfigure.HttpEncodingAutoConfiguration" : [ ],
+ "tomcatMetricsBinder" : [ "org.springframework.boot.tomcat.autoconfigure.metrics.TomcatMetricsAutoConfiguration", "simpleMeterRegistry" ],
+ "wiredoctor-com.wiredoctor.WireDoctorProperties" : [ ],
+ "server.tomcat-org.springframework.boot.tomcat.autoconfigure.TomcatServerProperties" : [ ],
+ "mvcHandlerMappingIntrospector" : [ ],
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$EnableTransactionManagementConfiguration" : [ ],
+ "org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration" : [ ],
+ "org.springframework.data.jpa.repository.support.JpaEvaluationContextExtension" : [ ],
+ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration" : [ ],
+ "management.simple.metrics.export-org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleProperties" : [ ],
+ "sslMeterBinder" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.ssl.SslMetricsAutoConfiguration", "sslBundleRegistry" ],
+ "org.springframework.boot.micrometer.metrics.autoconfigure.ssl.SslMetricsAutoConfiguration" : [ ],
+ "spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties" : [ ],
+ "org.springframework.context.annotation.internalAutowiredAnnotationProcessor" : [ ],
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$BootstrapExecutorConfiguration" : [ ],
+ "orderService" : [ "orderRepository", "pricingService", "inventoryService", "notificationService", "auditService" ],
+ "metricsRepositoryMethodInvocationListenerBeanPostProcessor" : [ ],
+ "classLoaderMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" ],
+ "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration" : [ ],
+ "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration" : [ "objectPostProcessor", "org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration", "mvcContentNegotiationManager" ],
+ "org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration" : [ ],
+ "org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303", "spring.ssl-org.springframework.boot.autoconfigure.ssl.SslProperties" ],
+ "org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory" : [ ],
+ "org.springframework.boot.transaction.jta.autoconfigure.JtaAutoConfiguration" : [ ],
+ "fileWatcher" : [ "org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration" ],
+ "springDataWebSettings" : [ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration" ],
+ "sortResolver" : [ "org.springframework.data.web.config.SpringDataWebConfiguration" ],
+ "stringHttpMessageConvertersCustomizer" : [ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration", "spring.http.converters-org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersProperties" ],
+ "springSecurityPathPatternParserBeanDefinitionRegistryPostProcessor" : [ ],
+ "org.springframework.boot.servlet.autoconfigure.MultipartAutoConfiguration" : [ "spring.servlet.multipart-org.springframework.boot.servlet.autoconfigure.MultipartProperties" ],
+ "standardJsonMapperBuilderCustomizer" : [ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonJsonCustomizerConfiguration", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e" ],
+ "thymeleafViewResolver" : [ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration$ThymeleafViewResolverConfiguration", "spring.thymeleaf-org.springframework.boot.thymeleaf.autoconfigure.ThymeleafProperties", "templateEngine" ],
+ "errorAttributes" : [ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration" ],
+ "beanNameHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "mvcConversionService", "mvcResourceUrlProvider" ],
+ "org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration" : [ "spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties" ],
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration$MvcRequestMatcherConfiguration" : [ ],
+ "delegatingApplicationListener" : [ ],
+ "org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.methodValidationExcludeFilter" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration" : [ ],
+ "org.springframework.data.web.config.SpringDataJacksonConfiguration" : [ "springDataWebSettings" ],
+ "flashMapManager" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "org.springframework.boot.micrometer.metrics.autoconfigure.task.TaskExecutorMetricsAutoConfiguration" : [ "simpleMeterRegistry" ],
+ "orderRepository" : [ "jpa.named-queries#0", "jpa.OrderRepository.fragments#0", "jpaSharedEM_entityManagerFactory", "jpaMappingContext" ],
+ "org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration" : [ ],
+ "jackson2EndpointJsonMapper" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.Jackson2EndpointAutoConfiguration" ],
+ "requestMatcherProvider" : [ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration$MvcRequestMatcherConfiguration", "dispatcherServletRegistration" ],
+ "legacyExportService" : [ "legacyImportService" ],
+ "healthHttpCodeStatusMapper" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration", "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties" ],
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$PathPatternRequestMatcherBuilderConfiguration" : [ ],
+ "metricsRepositoryMethodInvocationListener" : [ "org.springframework.boot.data.autoconfigure.metrics.DataRepositoryMetricsAutoConfiguration", "repositoryTagsProvider" ],
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonJsonCustomizerConfiguration" : [ "spring.jackson-org.springframework.boot.jackson.autoconfigure.JacksonProperties" ],
+ "uptimeMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration" ],
+ "controllerExposeExcludePropertyEndpointFilter" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration" ],
+ "pathMappedEndpoints" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration", "servletEndpointDiscoverer", "webEndpointDiscoverer", "controllerEndpointDiscoverer" ],
+ "jvmThreadMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" ],
+ "auditService" : [ ],
+ "standardJsonFactoryBuilderCustomizer" : [ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonJsonCustomizerConfiguration" ],
+ "org.springframework.data.web.config.ProjectingArgumentResolverRegistrar" : [ ],
+ "jsonFactory" : [ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration" ],
+ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration" : [ ],
+ "managementServletContext" : [ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletManagementContextAutoConfiguration", "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties" ],
+ "fileDescriptorMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration" ],
+ "livenessStateHealthIndicator" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration", "applicationAvailability" ],
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration$CglibAutoProxyConfiguration" : [ ],
+ "org.springframework.transaction.config.internalTransactionalEventListenerFactory" : [ ],
+ "org.springframework.boot.tomcat.autoconfigure.metrics.TomcatMetricsAutoConfiguration" : [ ],
+ "mvcValidator" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "org.springframework.boot.health.autoconfigure.application.AvailabilityHealthContributorAutoConfiguration" : [ ],
+ "applicationAvailability" : [ "org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration" ],
+ "defaultTemplateResolver" : [ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration" ],
+ "mvcResourceUrlProvider" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "spring.jpa.hibernate-org.springframework.boot.hibernate.autoconfigure.HibernateProperties" : [ ],
+ "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration$EnableSameManagementContextConfiguration" : [ ],
+ "sslInfo" : [ "org.springframework.boot.health.autoconfigure.application.SslHealthContributorAutoConfiguration", "sslBundleRegistry" ],
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$SimpleAsyncTaskExecutorBuilderConfiguration" : [ "spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties" ],
+ "spring.datasource-org.springframework.boot.jdbc.autoconfigure.DataSourceProperties" : [ ],
+ "servletEndpointRegistrar" : [ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration", "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties", "servletEndpointDiscoverer", "dispatcherServletRegistration", "propertiesEndpointAccessResolver" ],
+ "archivedReportExporter" : [ ],
+ "org.springframework.boot.autoconfigure.AutoConfigurationPackages" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration" : [ ],
+ "management.metrics-org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties" : [ ],
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration" : [ "spring.web-org.springframework.boot.autoconfigure.web.WebProperties" ],
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration" : [ ],
+ "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties" : [ ],
+ "jackson3pageModule" : [ "org.springframework.data.web.config.SpringDataJackson3Configuration" ],
+ "management.observations-org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties" : [ ],
+ "hikariPoolDataSourceMetadataProvider" : [ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration" ],
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$SimpleAsyncTaskSchedulerBuilderConfiguration" : [ "spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties" ],
+ "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration" : [ ],
+ "org.springframework.boot.security.autoconfigure.SecurityAutoConfiguration" : [ ],
+ "org.springframework.boot.health.autoconfigure.contributor.HealthContributorAutoConfiguration" : [ ],
+ "org.springframework.data.web.config.SpringDataWebConfiguration" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "legacyImportService" : [ "legacyExportService" ],
+ "propertiesEndpointAccessResolver" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration", "environment" ],
+ "org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthContributorAutoConfiguration" : [ ],
+ "errorPageRegistrarBeanPostProcessor" : [ ],
+ "mvcConversionService" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "initializeAuthenticationProviderBeanManagerConfigurer" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "endpointJackson2ObjectMapperWebMvcConfigurer" : [ "jackson2EndpointJsonMapper" ],
+ "org.springframework.context.annotation.internalPersistenceAnnotationProcessor" : [ ],
+ "controllerEndpointDiscoverer" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration" ],
+ "org.springframework.boot.context.properties.BoundConfigurationProperties" : [ ],
+ "diskSpaceHealthIndicator" : [ "org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthContributorAutoConfiguration", "management.health.diskspace-org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthIndicatorProperties" ],
+ "jvmMemoryMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" ],
+ "org.springframework.boot.jdbc.autoconfigure.JdbcClientAutoConfiguration" : [ ],
+ "mvcPathMatcher" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "handlerExceptionResolver" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "mvcContentNegotiationManager" ],
+ "basicErrorController" : [ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration", "errorAttributes" ],
+ "org.springframework.boot.data.jpa.autoconfigure.DataJpaRepositoriesAutoConfiguration" : [ ],
+ "pingHealthContributor" : [ "org.springframework.boot.health.autoconfigure.contributor.HealthContributorAutoConfiguration" ],
+ "sslHealthIndicator" : [ "org.springframework.boot.health.autoconfigure.application.SslHealthContributorAutoConfiguration", "sslInfo", "management.health.ssl-org.springframework.boot.health.autoconfigure.application.SslHealthIndicatorProperties" ],
+ "healthEndpointGroupMembershipValidator" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration", "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties", "healthContributorRegistry" ],
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303", "spring.web-org.springframework.boot.autoconfigure.web.WebProperties" ],
+ "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration" : [ ],
+ "groupsHealthContributorNameValidator" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration" ],
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration" : [ ],
+ "jpaContext" : [ ],
+ "namedParameterJdbcTemplate" : [ "dataSourceScriptDatabaseInitializer", "org.springframework.boot.jdbc.autoconfigure.NamedParameterJdbcTemplateConfiguration", "jdbcTemplate" ],
+ "simpleAsyncTaskExecutorBuilder" : [ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$SimpleAsyncTaskExecutorBuilderConfiguration" ],
+ "spring.web-org.springframework.boot.autoconfigure.web.WebProperties" : [ ],
+ "spelValueExpressionResolver" : [ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration" ],
+ "org.springframework.scheduling.config.internalAsyncAnnotationProcessor" : [ "org.springframework.scheduling.annotation.ProxyAsyncConfiguration" ],
+ "mvcViewResolver" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "mvcContentNegotiationManager" ],
+ "simpleConfig" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration", "management.simple.metrics.export-org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleProperties" ],
+ "org.springframework.boot.security.autoconfigure.UserDetailsServiceAutoConfiguration" : [ ],
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration$HealthConfiguration" : [ ],
+ "requestDataValueProcessor" : [ "org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration" ],
+ "org.springframework.boot.health.autoconfigure.registry.HealthContributorRegistryAutoConfiguration" : [ ],
+ "observationRegistry" : [ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration" ],
+ "mvcUriComponentsContributor" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "mvcConversionService", "requestMappingHandlerAdapter" ],
+ "management.health.ssl-org.springframework.boot.health.autoconfigure.application.SslHealthIndicatorProperties" : [ ],
+ "webAccessPropertiesOperationFilter" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration", "propertiesEndpointAccessResolver" ],
+ "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration" : [ ],
+ "readinessStateHealthIndicator" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration", "applicationAvailability" ],
+ "jpaSharedEM_entityManagerFactory" : [ "entityManagerFactory" ],
+ "objectPostProcessor" : [ "org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e" ],
+ "wiredoctorDemoApplication" : [ ],
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.JacksonEndpointAutoConfiguration" : [ ],
+ "jackson3GeoModule" : [ "org.springframework.data.web.config.SpringDataJackson3Configuration" ],
+ "templateEngine" : [ "org.springframework.boot.thymeleaf.autoconfigure.TemplateEngineConfigurations$DefaultTemplateEngineConfiguration", "spring.thymeleaf-org.springframework.boot.thymeleaf.autoconfigure.ThymeleafProperties" ],
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointAutoConfiguration" : [ ],
+ "spring.sql.init-org.springframework.boot.sql.autoconfigure.init.SqlInitializationProperties" : [ ],
+ "platformTransactionManagerCustomizers" : [ "org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration" ],
+ "securityFilterChainRegistration" : [ "org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterAutoConfiguration", "spring.security.filter-org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterProperties" ],
+ "data-jpa.repository-aot-processor#0" : [ ],
+ "endpointCachingOperationInvokerAdvisor" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration", "environment" ],
+ "defaultServletHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "org.springframework.boot.data.autoconfigure.metrics.DataRepositoryMetricsAutoConfiguration" : [ "management.metrics.data-org.springframework.boot.data.autoconfigure.metrics.DataMetricsProperties" ],
+ "spring.security-org.springframework.boot.security.autoconfigure.SecurityProperties" : [ ],
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafSecurityDialectConfiguration" : [ ],
+ "persistenceExceptionTranslationPostProcessor" : [ "environment" ],
+ "observationRegistryPostProcessor" : [ ],
+ "characterEncodingFilter" : [ "org.springframework.boot.servlet.autoconfigure.HttpEncodingAutoConfiguration", "spring.servlet.encoding-org.springframework.boot.servlet.autoconfigure.ServletEncodingProperties" ],
+ "sortCustomizer" : [ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration" ],
+ "webEndpointDiscoverer" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration", "endpointOperationParameterMapper", "endpointMediaTypes" ],
+ "org.springframework.security.config.annotation.web.configuration.ObservationConfiguration" : [ ],
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$EnableTransactionManagementConfiguration$CglibAutoProxyConfiguration" : [ ],
+ "preserveErrorControllerTargetClassPostProcessor" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration" : [ ],
+ "logbackMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.logging.logback.LogbackMetricsAutoConfiguration" ],
+ "management.info-org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateAutoConfiguration" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.NamedParameterJdbcTemplateConfiguration" : [ ],
+ "propertySourcesPlaceholderConfigurer" : [ ],
+ "org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration" : [ "enableGlobalAuthenticationAutowiredConfigurer", "initializeUserDetailsBeanManagerConfigurer", "initializeAuthenticationProviderBeanManagerConfigurer", "objectPostProcessor" ],
+ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration" : [ ],
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$TransactionTemplateConfiguration" : [ ],
+ "management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties" : [ ],
+ "methodValidationPostProcessor" : [ "environment" ],
+ "wireDoctorGhostReportWriter" : [ "com.wiredoctor.WireDoctorAutoConfiguration$GhostTrackingConfiguration", "wireDoctorGhostTracker", "wiredoctor-com.wiredoctor.WireDoctorProperties" ],
+ "jsonComponentModule" : [ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration" ],
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" : [ "spring.mvc-org.springframework.boot.webmvc.autoconfigure.WebMvcProperties", "spring.web-org.springframework.boot.autoconfigure.web.WebProperties", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e", "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter", "org.springframework.data.web.config.SpringDataWebConfiguration", "openEntityManagerInViewInterceptorConfigurer", "org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration", "endpointJsonMapperWebMvcConfigurer", "endpointJackson2ObjectMapperWebMvcConfigurer" ],
+ "entityManagerFactoryBuilder" : [ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration", "jpaVendorAdapter", "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e" ],
+ "org.springframework.context.event.internalEventListenerFactory" : [ ],
+ "org.springframework.boot.persistence.autoconfigure.PersistenceExceptionTranslationAutoConfiguration" : [ ],
+ "webSocketWebServerCustomizer" : [ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration$TomcatWebSocketConfiguration" ],
+ "clientConvertersCustomizer" : [ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration" ],
+ "spring.jpa-org.springframework.boot.jpa.autoconfigure.JpaProperties" : [ ],
+ "org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration" : [ "server.tomcat-org.springframework.boot.tomcat.autoconfigure.TomcatServerProperties" ],
+ "springSecurityFilterChain" : [ "(inner bean)#4e41b993", "(inner bean)#394e0104" ],
+ "management.metrics.data-org.springframework.boot.data.autoconfigure.metrics.DataMetricsProperties" : [ ],
+ "healthStatusAggregator" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration", "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties" ],
+ "endpointJsonMapper" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.JacksonEndpointAutoConfiguration" ],
+ "enableGlobalAuthenticationAutowiredConfigurer" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "mvcUrlPathHelper" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "jsonMapperBuilder" : [ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration", "jsonFactory" ],
+ "servletWebServerFactoryCustomizer" : [ "org.springframework.boot.web.server.autoconfigure.servlet.ServletWebServerConfiguration", "server-org.springframework.boot.web.server.autoconfigure.ServerProperties" ],
+ "transactionTemplate" : [ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$TransactionTemplateConfiguration", "transactionManager" ],
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointWebExtensionConfiguration" : [ ],
+ "inMemoryUserDetailsManager" : [ "org.springframework.boot.security.autoconfigure.UserDetailsServiceAutoConfiguration", "spring.security-org.springframework.boot.security.autoconfigure.SecurityProperties" ],
+ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration" : [ ],
+ "org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration" : [ ],
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$ThreadPoolTaskSchedulerBuilderConfiguration" : [ ],
+ "org.springframework.boot.webmvc.autoconfigure.actuate.endpoint.web.WebMvcHealthEndpointExtensionAutoConfiguration" : [ ],
+ "jpa.named-queries#0" : [ ],
+ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration" : [ ],
+ "org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration" : [ ],
+ "filterChainDecoratorPostProcessor" : [ ],
+ "metricsObservationHandlerGroup" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration" ],
+ "org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration" : [ "objectPostProcessor", "demoChain" ],
+ "spring.servlet.multipart-org.springframework.boot.servlet.autoconfigure.MultipartProperties" : [ ],
+ "transactionInterceptor" : [ "org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration", "transactionAttributeSource" ],
+ "simpleMeterRegistry" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration", "simpleConfig", "micrometerClock" ],
+ "authenticationEventPublisher" : [ "org.springframework.boot.security.autoconfigure.SecurityAutoConfiguration", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "bootstrapExecutorAliasPostProcessor" : [ ],
+ "entityManagerFactory" : [ "dataSourceScriptDatabaseInitializer", "org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration", "entityManagerFactoryBuilder", "persistenceManagedTypes" ],
+ "startupTimeMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.startup.StartupTimeMetricsListenerAutoConfiguration", "simpleMeterRegistry" ],
+ "spring.security.filter-org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterProperties" : [ ],
+ "multipartConfigElement" : [ "org.springframework.boot.servlet.autoconfigure.MultipartAutoConfiguration" ],
+ "requestContextFilter" : [ ],
+ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration" : [ ],
+ "pageableResolver" : [ "org.springframework.data.web.config.SpringDataWebConfiguration" ],
+ "availabilityProbesHealthEndpointGroupsPostProcessor" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration", "environment" ],
+ "localeResolver" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "handlerFunctionAdapter" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateConfiguration" : [ ],
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration" : [ ],
+ "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration" : [ "environment" ],
+ "org.springframework.boot.health.autoconfigure.application.SslHealthContributorAutoConfiguration" : [ ],
+ "jvmHeapPressureMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" ],
+ "welcomePageNotAcceptableHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303", "mvcConversionService", "mvcResourceUrlProvider" ],
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonMixinConfiguration" : [ ],
+ "org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterAutoConfiguration" : [ ],
+ "endpointOperationParameterMapper" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration" ],
+ "org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration" : [ ],
+ "sslBundleRegistry" : [ "org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration" ],
+ "spring.transaction-org.springframework.boot.transaction.autoconfigure.TransactionProperties" : [ ],
+ "jpaVendorAdapter" : [ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration" ],
+ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration" : [ "dataSource", "spring.jpa-org.springframework.boot.jpa.autoconfigure.JpaProperties", "spring.jpa.hibernate-org.springframework.boot.hibernate.autoconfigure.HibernateProperties" ],
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$ThreadPoolTaskExecutorBuilderConfiguration" : [ ],
+ "wireDoctorAnalyzer" : [ "com.wiredoctor.WireDoctorAutoConfiguration", "wiredoctor-com.wiredoctor.WireDoctorProperties" ],
+ "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonJsonHttpMessageConverterConfiguration" : [ ],
+ "jacksonGeoModule" : [ "org.springframework.data.web.config.SpringDataJacksonConfiguration" ],
+ "meterRegistryCloser" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "mvcContentNegotiationManager" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration$PooledDataSourceConfiguration" : [ ],
+ "httpRequestHandlerAdapter" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "asyncMailer" : [ ],
+ "org.springframework.aop.framework.autoproxy.defaultProxyConfig" : [ ],
+ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration" : [ ],
+ "sslPropertiesSslBundleRegistrar" : [ "org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration", "fileWatcher" ],
+ "org.springframework.context.annotation.internalCommonAnnotationProcessor" : [ ],
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$AsyncConfigurerConfiguration" : [ ],
+ "defaultMeterObservationHandler" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration", "micrometerClock", "management.metrics-org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties" ],
+ "org.springframework.boot.micrometer.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration" : [ ],
+ "notificationService" : [ "auditService", "asyncMailer" ],
+ "resourceHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "mvcContentNegotiationManager", "mvcConversionService", "mvcResourceUrlProvider" ],
+ "simpleControllerHandlerAdapter" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$HikariDataSourceMetricsConfiguration" : [ ],
+ "simpleAsyncTaskSchedulerBuilder" : [ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$SimpleAsyncTaskSchedulerBuilderConfiguration" ],
+ "spring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties" : [ ],
+ "healthContributorRegistry" : [ "org.springframework.boot.health.autoconfigure.registry.HealthContributorRegistryAutoConfiguration", "livenessStateHealthIndicator", "readinessStateHealthIndicator", "diskSpaceHealthIndicator", "sslHealthIndicator", "pingHealthContributor", "dbHealthContributor", "groupsHealthContributorNameValidator" ],
+ "management.health.db-org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthIndicatorProperties" : [ ],
+ "org.springframework.transaction.config.internalTransactionAdvisor" : [ "org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration", "transactionAttributeSource", "transactionInterceptor" ],
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JsonProblemDetailsConfiguration" : [ ],
+ "eagerJpaMetamodelCacheCleanup" : [ ],
+ "propertiesObservationFilter" : [ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration", "management.observations-org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties" ],
+ "micrometerClock" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration" ],
+ "persistenceManagedTypes" : [ "org.springframework.beans.factory.support.DefaultListableBeanFactory@5c3b6c6e", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$Hikari" : [ ],
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$JpaWebConfiguration" : [ "spring.jpa-org.springframework.boot.jpa.autoconfigure.JpaProperties" ],
+ "propertiesMeterFilter" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration", "management.metrics-org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties" ],
+ "demoSecurityConfig" : [ ],
+ "problemDetailJsonMapperBuilderCustomizer" : [ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JsonProblemDetailsConfiguration" ],
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletConfiguration" : [ ],
+ "jacksonJsonMapper" : [ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration", "jsonMapperBuilder" ],
+ "com.wiredoctor.WireDoctorAutoConfiguration$GhostTrackingConfiguration" : [ ],
+ "endpointJsonMapperWebMvcConfigurer" : [ "endpointJsonMapper" ],
+ "diskSpaceMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration", "management.metrics-org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties" ],
+ "org.springframework.data.jpa.util.JpaMetamodelCacheCleanup" : [ ],
+ "servletEndpointDiscoverer" : [ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletConfiguration", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "metricsHttpServerUriTagFilter" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration$MeterFilterConfiguration", "management.observations-org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties", "management.metrics-org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties" ],
+ "eagerTaskExecutorMetrics" : [ ],
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration" : [ ],
+ "jacksonMixinModule" : [ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JacksonMixinConfiguration", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303", "jacksonMixinModuleEntries" ],
+ "privilegeEvaluator" : [ "springSecurityFilterChain", "org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration" ],
+ "healthEndpoint" : [ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration", "healthContributorRegistry", "healthEndpointGroups", "management.endpoint.health-org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointProperties" ],
+ "spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties" : [ ],
+ "viewControllerHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "mvcConversionService", "mvcResourceUrlProvider" ],
+ "mvcPatternParser" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor" : [ ],
+ "dispatcherServlet" : [ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletConfiguration", "spring.mvc-org.springframework.boot.webmvc.autoconfigure.WebMvcProperties" ],
+ "jvmInfoMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" ],
+ "spring.jackson-org.springframework.boot.jackson.autoconfigure.JacksonProperties" : [ ],
+ "org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration" : [ ],
+ "demoChain" : [ "demoSecurityConfig", "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration.httpSecurity" ],
+ "webEndpointServletHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration", "webEndpointDiscoverer", "servletEndpointDiscoverer", "controllerEndpointDiscoverer", "endpointMediaTypes", "management.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties", "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties", "environment" ],
+ "org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor" : [ ],
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration" : [ ],
+ "threadPoolTaskExecutorBuilder" : [ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$ThreadPoolTaskExecutorBuilderConfiguration", "spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties" ],
+ "org.springframework.boot.micrometer.metrics.autoconfigure.logging.logback.LogbackMetricsAutoConfiguration" : [ ],
+ "processorMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration" ],
+ "inventoryService" : [ "auditService" ],
+ "transactionAttributeSource" : [ "org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration" ],
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration" : [ ],
+ "transactionExecutionListeners" : [ "org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration" ],
+ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration$TomcatWebSocketConfiguration" : [ ],
+ "serverConvertersCustomizer" : [ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration" ],
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.Jackson2EndpointAutoConfiguration" : [ ],
+ "org.springframework.data.web.config.SpringDataJackson3Configuration" : [ "springDataWebSettings" ],
+ "transactionManager" : [ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration" ],
+ "errorPageCustomizer" : [ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration", "dispatcherServletRegistration" ],
+ "openEntityManagerInViewInterceptorConfigurer" : [ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$JpaWebConfiguration", "openEntityManagerInViewInterceptor" ],
+ "tomcatWebServerFactoryCustomizer" : [ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration", "environment", "server-org.springframework.boot.web.server.autoconfigure.ServerProperties", "server.tomcat-org.springframework.boot.tomcat.autoconfigure.TomcatServerProperties", "spring.web-org.springframework.boot.autoconfigure.web.WebProperties" ],
+ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration" : [ ],
+ "authenticationManagerPostProcessor" : [ ],
+ "threadPoolTaskSchedulerBuilder" : [ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$ThreadPoolTaskSchedulerBuilderConfiguration", "spring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties" ],
+ "viewNameTranslator" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "org.springframework.boot.thymeleaf.autoconfigure.TemplateEngineConfigurations$DefaultTemplateEngineConfiguration" : [ ],
+ "server-org.springframework.boot.web.server.autoconfigure.ServerProperties" : [ ],
+ "dispatcherServletRegistration" : [ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration", "dispatcherServlet", "spring.mvc-org.springframework.boot.webmvc.autoconfigure.WebMvcProperties" ],
+ "pageableCustomizer" : [ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration" ],
+ "dataSource" : [ "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$Hikari", "spring.datasource-org.springframework.boot.jdbc.autoconfigure.DataSourceProperties", "jdbcConnectionDetails", "environment" ],
+ "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties" : [ ],
+ "healthEndpointGroupsBeanPostProcessor" : [ ],
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorConfiguration" : [ ],
+ "com.wiredoctor.WireDoctorAutoConfiguration" : [ ],
+ "jpaMappingContext" : [ ],
+ "tomcatServletWebServerFactory" : [ "org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration" ],
+ "mvcApiVersionStrategy" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration" ],
+ "error" : [ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration" ],
+ "webAuthorizationManagerPostProcessor" : [ ],
+ "jdbcConnectionDetails" : [ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration$PooledDataSourceConfiguration", "spring.datasource-org.springframework.boot.jdbc.autoconfigure.DataSourceProperties" ],
+ "spring.mvc-org.springframework.boot.webmvc.autoconfigure.WebMvcProperties" : [ ],
+ "offsetResolver" : [ "org.springframework.data.web.config.SpringDataWebConfiguration" ],
+ "jvmGcMetrics" : [ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" ],
+ "org.springframework.boot.micrometer.observation.autoconfigure.ScheduledTasksObservationAutoConfiguration" : [ ],
+ "initializeUserDetailsBeanManagerConfigurer" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "jacksonJsonHttpMessageConvertersCustomizer" : [ "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonJsonHttpMessageConverterConfiguration", "jacksonJsonMapper" ],
+ "healthEndpointWebMvcHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.actuate.endpoint.web.WebMvcHealthEndpointExtensionAutoConfiguration", "webEndpointDiscoverer", "healthEndpointGroups" ],
+ "defaultValidator" : [ "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "welcomePageHandlerMapping" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303", "mvcConversionService", "mvcResourceUrlProvider" ],
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration" : [ ],
+ "servletExposeExcludePropertyEndpointFilter" : [ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletEndpointManagementContextConfiguration", "management.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties" ],
+ "org.springframework.boot.web.server.autoconfigure.servlet.ServletWebServerConfiguration" : [ ],
+ "authenticationManagerBuilder" : [ "org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration", "objectPostProcessor", "org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext@bcef303" ],
+ "webMvcObservationFilter" : [ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration", "observationRegistry", "management.observations-org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties" ],
+ "securityDialect" : [ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafSecurityDialectConfiguration" ],
+ "pageModule" : [ "org.springframework.data.web.config.SpringDataJacksonConfiguration" ],
+ "webSecurityExpressionHandler" : [ "springSecurityFilterChain", "org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration" ]
+ },
+ "graphTruncated" : false
+ },
+ "lazySuggestions" : [ {
+ "beanName" : "legacyExportService",
+ "breaksCycles" : [ 0 ],
+ "downstreamImpact" : 1
+ }, {
+ "beanName" : "legacyImportService",
+ "breaksCycles" : [ 0 ],
+ "downstreamImpact" : 1
+ } ],
+ "criticalPath" : {
+ "available" : true,
+ "totalMs" : 1169,
+ "percentOfReadiness" : 16.5,
+ "path" : [ {
+ "beanName" : "jackson2EndpointJsonMapper",
+ "ownMs" : 3,
+ "cumulativeMs" : 3
+ }, {
+ "beanName" : "endpointJackson2ObjectMapperWebMvcConfigurer",
+ "ownMs" : 7,
+ "cumulativeMs" : 10
+ }, {
+ "beanName" : "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration",
+ "ownMs" : 32,
+ "cumulativeMs" : 42
+ }, {
+ "beanName" : "mvcContentNegotiationManager",
+ "ownMs" : 173,
+ "cumulativeMs" : 215
+ }, {
+ "beanName" : "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration",
+ "ownMs" : 193,
+ "cumulativeMs" : 408
+ }, {
+ "beanName" : "org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration.httpSecurity",
+ "ownMs" : 341,
+ "cumulativeMs" : 749
+ }, {
+ "beanName" : "demoChain",
+ "ownMs" : 387,
+ "cumulativeMs" : 1136
+ }, {
+ "beanName" : "org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration",
+ "ownMs" : 17,
+ "cumulativeMs" : 1153
+ }, {
+ "beanName" : "webSecurityExpressionHandler",
+ "ownMs" : 16,
+ "cumulativeMs" : 1169
+ } ],
+ "disclaimer" : "Instantiation-weighted approximation; parallel init and background threads are not modeled."
+ },
+ "conditions" : {
+ "com.wiredoctor.WireDoctorAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "com.wiredoctor.WireDoctorAutoConfiguration$GhostTrackingConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.audit.AuditAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBean (types: org.springframework.boot.actuate.audit.AuditEventRepository; SearchStrategy: all) did not find any beans of type org.springframework.boot.actuate.audit.AuditEventRepository"
+ },
+ "org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.beans.BeansEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.condition.ConditionsReportEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.context.ShutdownEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint the configured access for endpoint 'shutdown' is NONE"
+ },
+ "org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration#endpointCachingOperationInvokerAdvisor" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration#endpointOperationParameterMapper" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration#propertiesEndpointAccessResolver" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.Jackson2EndpointAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.Jackson2EndpointAutoConfiguration#jackson2EndpointJsonMapper" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.JacksonEndpointAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jackson.JacksonEndpointAutoConfiguration#endpointJsonMapper" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (spring.jmx.enabled=true) did not find property 'spring.jmx.enabled'"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration#controllerEndpointDiscoverer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration#endpointMediaTypes" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration#pathMappedEndpoints" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration#webEndpointDiscoverer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration$WebEndpointServletConfiguration#servletEndpointDiscoverer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration#buildInfoContributor" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnSingleCandidate (types: org.springframework.boot.info.BuildProperties; SearchStrategy: all) did not find any beans"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration#envInfoContributor" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnEnabledInfoContributor management.info.env.enabled is not true"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration#gitInfoContributor" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnSingleCandidate (types: org.springframework.boot.info.GitProperties; SearchStrategy: all) did not find any beans"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration#javaInfoContributor" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnEnabledInfoContributor management.info.java.enabled is not true"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration#osInfoContributor" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnEnabledInfoContributor management.info.os.enabled is not true"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration#processInfoContributor" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnEnabledInfoContributor management.info.process.enabled is not true"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration#sslInfo" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnEnabledInfoContributor management.info.ssl.enabled is not true"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration#sslInfoContributor" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnEnabledInfoContributor management.info.ssl.enabled is not true"
+ },
+ "org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.logging.LoggersEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint the configured access for endpoint 'heapdump' is NONE"
+ },
+ "org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.sbom.SbomEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.scheduling.ScheduledTasksEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.startup.StartupEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.web.exchanges.HttpExchangesEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.web.mappings.MappingsEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$DifferentManagementContextConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "Management Port actual port type (SAME) did not match required type (DIFFERENT)"
+ },
+ "org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration$SameManagementContextConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (spring.application.admin.enabled=true) did not find property 'spring.application.admin.enabled'"
+ },
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration$CglibAutoProxyConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration$JdkDynamicAutoProxyConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (spring.aop.proxy-target-class=false) did not find property 'spring.aop.proxy-target-class'"
+ },
+ "org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnMissingClass found unwanted class 'org.aspectj.weaver.Advice'"
+ },
+ "org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration#applicationAvailability" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration#defaultLifecycleProcessor" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "ResourceBundle did not find bundle with basename messages"
+ },
+ "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration#buildProperties" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnResource did not find resource '${spring.info.build.location:classpath:META-INF/build-info.properties}'"
+ },
+ "org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration#gitProperties" : {
+ "outcome" : "notMatched",
+ "reason" : "GitResource did not find git info at classpath:git.properties"
+ },
+ "org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (spring.jmx.enabled=true) did not find property 'spring.jmx.enabled'"
+ },
+ "org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration#sslBundleRegistry" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$AsyncConfigurerConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$AsyncConfigurerWrapperConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBean (types: org.springframework.scheduling.annotation.AsyncConfigurer; SearchStrategy: all) did not find any beans of type org.springframework.scheduling.annotation.AsyncConfigurer"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$SimpleAsyncTaskExecutorBuilderConfiguration#simpleAsyncTaskExecutorBuilder" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$SimpleAsyncTaskExecutorBuilderConfiguration#simpleAsyncTaskExecutorBuilderVirtualThreads" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder; SearchStrategy: all) found beans of type 'org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder' simpleAsyncTaskExecutorBuilder"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorConfiguration#applicationTaskExecutor" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorConfiguration#applicationTaskExecutorVirtualThreads" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnThreading did not find VIRTUAL"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$TaskExecutorContextPropagationConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.context.ContextSnapshot'"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskExecutorConfigurations$ThreadPoolTaskExecutorBuilderConfiguration#threadPoolTaskExecutorBuilder" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration#scheduledBeanLazyInitializationExcludeFilter" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBean (names: org.springframework.scheduling.config.internalScheduledAnnotationProcessor; SearchStrategy: all) did not find any beans named org.springframework.scheduling.config.internalScheduledAnnotationProcessor"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$SimpleAsyncTaskSchedulerBuilderConfiguration#simpleAsyncTaskSchedulerBuilder" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$SimpleAsyncTaskSchedulerBuilderConfiguration#simpleAsyncTaskSchedulerBuilderVirtualThreads" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskSchedulerBuilder; SearchStrategy: all) found beans of type 'org.springframework.boot.task.SimpleAsyncTaskSchedulerBuilder' simpleAsyncTaskSchedulerBuilder"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$TaskSchedulerConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBean (names: org.springframework.scheduling.config.internalScheduledAnnotationProcessor; SearchStrategy: all) did not find any beans named org.springframework.scheduling.config.internalScheduledAnnotationProcessor"
+ },
+ "org.springframework.boot.autoconfigure.task.TaskSchedulingConfigurations$ThreadPoolTaskSchedulerBuilderConfiguration#threadPoolTaskSchedulerBuilder" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.data.autoconfigure.metrics.DataRepositoryMetricsAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.data.autoconfigure.metrics.DataRepositoryMetricsAutoConfiguration#metricsRepositoryMethodInvocationListener" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.data.autoconfigure.metrics.DataRepositoryMetricsAutoConfiguration#repositoryTagsProvider" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration#pageableCustomizer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration#sortCustomizer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.data.autoconfigure.web.DataWebAutoConfiguration#springDataWebSettings" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.data.jpa.autoconfigure.DataJpaRepositoriesAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.data.jpa.autoconfigure.DataJpaRepositoriesAutoConfiguration#entityManagerFactoryBootstrapExecutorCustomizer" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnProperty (spring.data.jpa.repositories.bootstrap-mode=deferred) did not find property 'spring.data.jpa.repositories.bootstrap-mode'"
+ },
+ "org.springframework.boot.h2console.autoconfigure.H2ConsoleAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (spring.h2.console.enabled=true) did not find property 'spring.h2.console.enabled'"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration#livenessStateHealthIndicator" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.AvailabilityProbesAutoConfiguration#readinessStateHealthIndicator" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration#healthEndpoint" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration#healthEndpointGroupMembershipValidator" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration#healthEndpointGroups" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration#healthHttpCodeStatusMapper" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointConfiguration#healthStatusAggregator" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointReactiveWebExtensionConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "did not find reactive web application classes"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointWebExtensionConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.actuate.endpoint.HealthEndpointWebExtensionConfiguration#healthEndpointWebExtension" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.application.AvailabilityHealthContributorAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.application.AvailabilityHealthContributorAutoConfiguration#livenessStateHealthIndicator" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (management.health.livenessstate.enabled=true) did not find property 'management.health.livenessstate.enabled'"
+ },
+ "org.springframework.boot.health.autoconfigure.application.AvailabilityHealthContributorAutoConfiguration#readinessStateHealthIndicator" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (management.health.readinessstate.enabled=true) did not find property 'management.health.readinessstate.enabled'"
+ },
+ "org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthContributorAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.application.DiskSpaceHealthContributorAutoConfiguration#diskSpaceHealthIndicator" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.application.SslHealthContributorAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.application.SslHealthContributorAutoConfiguration#sslHealthIndicator" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.application.SslHealthContributorAutoConfiguration#sslInfo" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.contributor.HealthContributorAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.health.autoconfigure.contributor.HealthContributorAutoConfiguration#pingHealthContributor" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.registry.HealthContributorRegistryAutoConfiguration" : {
+ "outcome" : "unconditional"
+ },
+ "org.springframework.boot.health.autoconfigure.registry.HealthContributorRegistryAutoConfiguration#healthContributorRegistry" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.health.autoconfigure.registry.HealthContributorRegistryAutoConfiguration$ReactiveHealthContributorRegistryConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'reactor.core.publisher.Flux'"
+ },
+ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.hibernate.autoconfigure.HibernateJpaConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.hibernate.autoconfigure.metrics.HibernateMetricsAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.hibernate.orm.micrometer.HibernateMetrics'"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.GsonHttpMessageConvertersConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'com.google.gson.Gson'"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration#stringHttpMessageConvertersCustomizer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.Jackson2HttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "AnyNestedCondition 0 matched 2 did not; NestedCondition on Jackson2HttpMessageConvertersConfiguration.PreferJackson2OrJacksonUnavailableCondition.JacksonUnavailable @ConditionalOnMissingBean (types: org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonJsonHttpMessageConvertersCustomizer; SearchStrategy: all) found beans of type 'org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonJsonHttpMessageConvertersCustomizer' jacksonJsonHttpMessageConvertersCustomizer; NestedCondition on Jackson2HttpMessageConvertersConfiguration.PreferJackson2OrJacksonUnavailableCondition.Jackson2Preferred @ConditionalOnProperty (spring.http.converters.preferred-json-mapper=jackson2) did not find property 'spring.http.converters.preferred-json-mapper'"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.Jackson2HttpMessageConvertersConfiguration$MappingJackson2XmlHttpMessageConverterConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'com.fasterxml.jackson.dataformat.xml.XmlMapper'"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonJsonHttpMessageConverterConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonJsonHttpMessageConverterConfiguration#jacksonJsonHttpMessageConvertersCustomizer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.JacksonHttpMessageConvertersConfiguration$JacksonXmlHttpMessageConverterConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'tools.jackson.dataformat.xml.XmlMapper'"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.JsonbHttpMessageConvertersConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'jakarta.json.bind.Jsonb'"
+ },
+ "org.springframework.boot.http.converter.autoconfigure.KotlinSerializationHttpMessageConvertersConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required classes 'kotlinx.serialization.Serializable', 'kotlinx.serialization.json.Json'"
+ },
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration#jacksonJsonMapper" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration#jsonFactory" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration#jsonMapperBuilder" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$CborConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'tools.jackson.dataformat.cbor.CBORMapper'"
+ },
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$JsonProblemDetailsConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration$XmlConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'tools.jackson.dataformat.xml.XmlMapper'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration$EmbeddedDatabaseConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "EmbeddedDataSource spring.datasource.url is set"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration$PooledDataSourceConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration$PooledDataSourceConfiguration#jdbcConnectionDetails" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceCheckpointRestoreConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.crac.Resource'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$Dbcp2" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$Generic" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnProperty (spring.datasource.type) did not find property 'spring.datasource.type'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$Hikari" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$OracleUcp" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSourceImpl', 'oracle.jdbc.OracleConnection'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceConfiguration$Tomcat" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceJmxConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (spring.jmx.enabled=true) did not find property 'spring.jmx.enabled'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration$CommonsDbcp2PoolDataSourceMetadataProviderConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration$OracleUcpPoolDataSourceMetadataProviderConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSource', 'oracle.jdbc.OracleConnection'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourcePoolMetadataProvidersConfiguration$TomcatDataSourcePoolMetadataProviderConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration$JdbcTransactionManagerConfiguration#transactionManager" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnMissingBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) found beans of type 'org.springframework.transaction.TransactionManager' transactionManager"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.JdbcClientAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.JdbcTemplateConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.JndiDataSourceAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnProperty (spring.datasource.jndi-name) did not find property 'spring.datasource.jndi-name'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.LazyConnectionDataSourceConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnProperty (spring.datasource.connection-fetch=lazy) did not find property 'spring.datasource.connection-fetch'"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.NamedParameterJdbcTemplateConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.XADataSourceAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBean (types: org.springframework.boot.jdbc.XADataSourceWrapper; SearchStrategy: all) did not find any beans of type org.springframework.boot.jdbc.XADataSourceWrapper"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthContributorAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.health.DataSourceHealthContributorAutoConfiguration#dbHealthContributor" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$DataSourcePoolMetadataMetricsConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jdbc.autoconfigure.metrics.DataSourcePoolMetricsAutoConfiguration$HikariDataSourceMetricsConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration#entityManagerFactory" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration#entityManagerFactoryBuilder" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration#jpaVendorAdapter" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration#transactionManager" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$JpaWebConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$PersistenceManagedTypesConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.jpa.autoconfigure.JpaBaseConfiguration$PersistenceManagedTypesConfiguration#persistenceManagedTypes" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.CompositeMeterRegistryConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "NoneNestedConditions 1 matched 1 did not; NestedCondition on CompositeMeterRegistryConfiguration.MultipleNonPrimaryMeterRegistriesCondition.SingleInjectableMeterRegistry @ConditionalOnSingleCandidate (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found a single bean 'simpleMeterRegistry'; NestedCondition on CompositeMeterRegistryConfiguration.MultipleNonPrimaryMeterRegistriesCondition.NoMeterRegistryCondition @ConditionalOnMissingBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found beans of type 'io.micrometer.core.instrument.MeterRegistry' simpleMeterRegistry"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAspectsAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (management.observations.annotations.enabled=true) did not find property 'management.observations.annotations.enabled'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration#micrometerClock" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsEndpointAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.NoOpMeterRegistryConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnMissingBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found beans of type 'io.micrometer.core.instrument.MeterRegistry' simpleMeterRegistry"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.appoptics.AppOpticsMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.appoptics.AppOpticsMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.atlas.AtlasMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.atlas.AtlasMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.datadog.DatadogMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.datadog.DatadogMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.dynatrace.DynatraceMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.dynatrace.DynatraceMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.elastic.ElasticMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.elastic.ElasticMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.ganglia.GangliaMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.ganglia.GangliaMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.graphite.GraphiteMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.graphite.GraphiteMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.humio.HumioMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.humio.HumioMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.influx.InfluxMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.influx.InfluxMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.jmx.JmxMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.jmx.JmxMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.kairos.KairosMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.kairos.KairosMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.newrelic.NewRelicMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.newrelic.NewRelicMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.otlp.OtlpMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.registry.otlp.OtlpMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.prometheus.PrometheusMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.prometheusmetrics.PrometheusMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration#simpleConfig" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.stackdriver.StackdriverMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.stackdriver.StackdriverMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.export.statsd.StatsdMetricsExportAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.statsd.StatsdMeterRegistry'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration#classLoaderMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration#jvmCompilationMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration#jvmGcMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration#jvmHeapPressureMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration#jvmInfoMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration#jvmMemoryMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration#jvmThreadMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration$VirtualThreadMetricsConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'io.micrometer.java21.instrument.binder.jdk.VirtualThreadMetrics'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.logging.log4j2.Log4J2MetricsAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.apache.logging.log4j.core.LoggerContext'"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.logging.logback.LogbackMetricsAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.logging.logback.LogbackMetricsAutoConfiguration#logbackMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.ssl.SslMetricsAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.startup.StartupTimeMetricsListenerAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.startup.StartupTimeMetricsListenerAutoConfiguration#startupTimeMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration#diskSpaceMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration#fileDescriptorMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration#processorMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration#uptimeMetrics" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.metrics.autoconfigure.task.TaskExecutorMetricsAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration#observationRegistry" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration#spelValueExpressionResolver" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration$ObservedAspectConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (management.observations.annotations.enabled=true) did not find property 'management.observations.annotations.enabled'"
+ },
+ "org.springframework.boot.micrometer.observation.autoconfigure.ScheduledTasksObservationAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.persistence.autoconfigure.PersistenceExceptionTranslationAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.persistence.autoconfigure.PersistenceExceptionTranslationAutoConfiguration#persistenceExceptionTranslationPostProcessor" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.ReactiveUserDetailsServiceAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "AnyNestedCondition 0 matched 2 did not; NestedCondition on ReactiveUserDetailsServiceAutoConfiguration.RSocketEnabledOrReactiveWebApplication.ReactiveWebApplicationCondition did not find reactive web application classes; NestedCondition on ReactiveUserDetailsServiceAutoConfiguration.RSocketEnabledOrReactiveWebApplication.RSocketSecurityEnabledCondition @ConditionalOnBean (types: org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler; SearchStrategy: all) did not find any beans of type org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler"
+ },
+ "org.springframework.boot.security.autoconfigure.SecurityAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.SecurityAutoConfiguration#authenticationEventPublisher" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.SecurityAutoConfiguration$SecurityDataConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.springframework.security.data.repository.query.SecurityEvaluationContextExtension'"
+ },
+ "org.springframework.boot.security.autoconfigure.UserDetailsServiceAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.actuate.web.reactive.ReactiveManagementWebSecurityAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnWebApplication did not find reactive web application classes"
+ },
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.ManagementWebSecurityAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "AllNestedConditions 1 matched 1 did not; NestedCondition on DefaultWebSecurityCondition.Beans @ConditionalOnMissingBean (types: org.springframework.security.web.SecurityFilterChain; SearchStrategy: all) found beans of type 'org.springframework.security.web.SecurityFilterChain' demoChain; NestedCondition on DefaultWebSecurityCondition.Classes @ConditionalOnClass found required classes 'org.springframework.security.web.SecurityFilterChain', 'org.springframework.security.config.annotation.web.builders.HttpSecurity'"
+ },
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration$JerseyRequestMatcherConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.glassfish.jersey.server.ResourceConfig'"
+ },
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration$MvcRequestMatcherConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.actuate.web.servlet.SecurityRequestMatchersManagementContextConfiguration$MvcRequestMatcherConfiguration#requestMatcherProvider" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.rsocket.RSocketSecurityAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'org.springframework.boot.rsocket.server.RSocketServerCustomizer'"
+ },
+ "org.springframework.boot.security.autoconfigure.web.reactive.ReactiveWebSecurityAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'reactor.core.publisher.Flux'"
+ },
+ "org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.web.servlet.SecurityFilterAutoConfiguration#securityFilterChainRegistration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$EnableWebSecurityConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$PathPatternRequestMatcherBuilderConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$PathPatternRequestMatcherBuilderConfiguration#pathPatternRequestMatcherBuilder" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.security.autoconfigure.web.servlet.ServletWebSecurityAutoConfiguration$SecurityFilterChainConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "AllNestedConditions 1 matched 1 did not; NestedCondition on DefaultWebSecurityCondition.Beans @ConditionalOnMissingBean (types: org.springframework.security.web.SecurityFilterChain; SearchStrategy: all) found beans of type 'org.springframework.security.web.SecurityFilterChain' demoChain; NestedCondition on DefaultWebSecurityCondition.Classes @ConditionalOnClass found required classes 'org.springframework.security.web.SecurityFilterChain', 'org.springframework.security.config.annotation.web.builders.HttpSecurity'"
+ },
+ "org.springframework.boot.servlet.autoconfigure.HttpEncodingAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.servlet.autoconfigure.HttpEncodingAutoConfiguration#characterEncodingFilter" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.servlet.autoconfigure.MultipartAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.servlet.autoconfigure.MultipartAutoConfiguration#multipartConfigElement" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.servlet.autoconfigure.MultipartAutoConfiguration#multipartResolver" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletEndpointManagementContextConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletManagementContextAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.ServletManagementContextAutoConfiguration$ApplicationContextFilterConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (management.server.add-application-context-header=true) did not find property 'management.server.add-application-context-header'"
+ },
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.exchanges.ServletHttpExchangesAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBean (types: org.springframework.boot.actuate.web.exchanges.HttpExchangeRepository; SearchStrategy: all) did not find any beans of type org.springframework.boot.actuate.web.exchanges.HttpExchangeRepository"
+ },
+ "org.springframework.boot.servlet.autoconfigure.actuate.web.mappings.ServletMappingsAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.TemplateEngineConfigurations$DefaultTemplateEngineConfiguration#templateEngine" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.TemplateEngineConfigurations$ReactiveTemplateEngineConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "did not find reactive web application classes"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$DataAttributeDialectConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'com.github.mxab.thymeleaf.extras.dataattribute.dialect.DataAttributeDialect'"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafSecurityDialectConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafSecurityDialectConfiguration#securityDialect" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebFluxConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "did not find reactive web application classes"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebLayoutConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnClass did not find required class 'nz.net.ultraq.thymeleaf.layoutdialect.LayoutDialect'"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration#resourceUrlEncodingFilter" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnEnabledResourceChain did not find class org.webjars.WebJarVersionLocator"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration$ThymeleafViewResolverConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.thymeleaf.autoconfigure.ThymeleafAutoConfiguration$ThymeleafWebMvcConfiguration$ThymeleafViewResolverConfiguration#thymeleafViewResolver" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration#tomcatVirtualThreadsProtocolHandlerCustomizer" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnThreading did not find VIRTUAL"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.TomcatWebServerConfiguration$TomcatWebSocketConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.actuate.web.server.TomcatReactiveManagementContextAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnWebApplication did not find reactive web application classes"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.actuate.web.server.TomcatServletManagementContextAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "Management Port actual port type (SAME) did not match required type (DIFFERENT)"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.metrics.TomcatMetricsAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.metrics.TomcatMetricsAutoConfiguration#tomcatMetricsBinder" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.reactive.TomcatReactiveWebServerAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnWebApplication did not find reactive web application classes"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration#tomcatForwardedHeaderFilterCustomizer" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnProperty (server.forward-headers-strategy=framework) did not find property 'server.forward-headers-strategy'"
+ },
+ "org.springframework.boot.tomcat.autoconfigure.servlet.TomcatServletWebServerAutoConfiguration#tomcatServletWebServerFactory" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration#transactionalOperator" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnSingleCandidate (types: org.springframework.transaction.ReactiveTransactionManager; SearchStrategy: all) did not find any beans"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$AspectJTransactionManagementConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBean (types: org.springframework.transaction.aspectj.AbstractTransactionAspect; SearchStrategy: all) did not find any beans of type org.springframework.transaction.aspectj.AbstractTransactionAspect"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$EnableTransactionManagementConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$EnableTransactionManagementConfiguration$CglibAutoProxyConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$EnableTransactionManagementConfiguration$JdkDynamicAutoProxyConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (spring.aop.proxy-target-class=false) did not find property 'spring.aop.proxy-target-class'"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$TransactionTemplateConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration$TransactionTemplateConfiguration#transactionTemplate" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.transaction.autoconfigure.TransactionManagerCustomizationAutoConfiguration#platformTransactionManagerCustomizers" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.transaction.jta.autoconfigure.JndiJtaConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnJndi JNDI environment is not available"
+ },
+ "org.springframework.boot.transaction.jta.autoconfigure.JtaAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration#defaultValidator" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration#methodValidationPostProcessor" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.web.server.autoconfigure.servlet.ServletWebServerConfiguration#forwardedHeaderFilter" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnProperty (server.forward-headers-strategy=framework) did not find property 'server.forward-headers-strategy'"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletConfiguration#multipartResolver" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans of type org.springframework.web.multipart.MultipartResolver"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration#dispatcherServletRegistration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration#formContentFilter" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration#hiddenHttpMethodFilter" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (spring.mvc.hiddenmethod.filter.enabled=true) did not find property 'spring.mvc.hiddenmethod.filter.enabled'"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration#flashMapManager" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration#localeResolver" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$EnableWebMvcConfiguration#viewNameTranslator" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$ProblemDetailsErrorHandlingConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnBooleanProperty (spring.mvc.problemdetails.enabled=true) did not find property 'spring.mvc.problemdetails.enabled'"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$ResourceChainCustomizerConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnEnabledResourceChain did not find class org.webjars.WebJarVersionLocator"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter#beanNameViewResolver" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) found beans of type 'org.springframework.web.servlet.view.BeanNameViewResolver' beanNameViewResolver"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter#defaultViewResolver" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter#requestContextFilter" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter#viewResolver" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration#webMvcObservationFilter" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.WebMvcObservationAutoConfiguration$MeterFilterConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.actuate.endpoint.web.WebMvcHealthEndpointExtensionAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration#controllerEndpointHandlerMapping" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration#endpointJackson2ObjectMapperWebMvcConfigurer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration#endpointJsonMapperWebMvcConfigurer" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration#webEndpointServletHandlerMapping" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration$HealthConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.WebMvcEndpointManagementContextConfiguration$HealthConfiguration#managementHealthEndpointWebMvcHandlerMapping" : {
+ "outcome" : "notMatched",
+ "reason" : "Management Port actual port type (SAME) did not match required type (DIFFERENT)"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.actuate.web.mappings.WebMvcMappingsAutoConfiguration" : {
+ "outcome" : "notMatched",
+ "reason" : "@ConditionalOnAvailableEndpoint not exposed"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration#basicErrorController" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration#errorAttributes" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration#conventionErrorViewResolver" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration#beanNameViewResolver" : {
+ "outcome" : "matched"
+ },
+ "org.springframework.boot.webmvc.autoconfigure.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration#defaultErrorView" : {
+ "outcome" : "matched"
+ }
+ },
+ "gates" : {
+ "baselineConfigured" : true,
+ "mode" : "diff",
+ "armed" : [ ],
+ "config" : {
+ "startupTimeAbsoluteThresholdMs" : 500,
+ "startupTimeRelativePercent" : 20.0,
+ "slowBeanThresholdMs" : 100,
+ "slowBeanMarginMs" : 20
+ },
+ "baseline" : "wiredoctor-baseline.json",
+ "failed" : [ ],
+ "startupTime" : {
+ "baselineMs" : 7210,
+ "currentMs" : 7067,
+ "deltaMs" : -143,
+ "percentChange" : -1.9833564493758666
+ }
+ },
+ "trendHistory" : [ {
+ "timestamp" : 1787595868889,
+ "totalStartupMs" : 6747,
+ "slowBeanCount" : 13,
+ "beanCount" : 429
+ }, {
+ "timestamp" : 1787595880167,
+ "totalStartupMs" : 7100,
+ "slowBeanCount" : 15,
+ "beanCount" : 429
+ }, {
+ "timestamp" : 1787595891310,
+ "totalStartupMs" : 7210,
+ "slowBeanCount" : 14,
+ "beanCount" : 429
+ } ]
+}
\ No newline at end of file
diff --git a/tools/capture-media.js b/tools/capture-media.js
new file mode 100644
index 0000000..76cfc03
--- /dev/null
+++ b/tools/capture-media.js
@@ -0,0 +1,213 @@
+#!/usr/bin/env node
+/*
+ * Captures every screenshot, GIF and video that README.md and docs/ embed,
+ * straight out of a real generated wiredoctor-report.html — so the media can
+ * never drift from what the report actually renders.
+ *
+ * npm i --no-save playwright gifenc pngjs
+ * node tools/capture-media.js
[outDir]
+ *
+ * outDir defaults to docs/images. PNGs keep the filenames the docs already
+ * reference, so refreshing them needs no markdown edits.
+ *
+ * GIFs are built by screenshotting the page while a scripted tour drives it,
+ * then encoding those frames directly — Playwright's bundled ffmpeg has no GIF
+ * muxer, and requiring a system ffmpeg for a docs refresh is not worth it.
+ */
+const fs = require('fs');
+const path = require('path');
+const os = require('os');
+const { chromium } = require('playwright');
+const { GIFEncoder, quantize, applyPalette } = require('gifenc');
+const { PNG } = require('pngjs');
+
+const reportArg = process.argv[2];
+const outDir = path.resolve(process.argv[3] || path.join(__dirname, '..', 'docs', 'images'));
+if (!reportArg) {
+ console.error('usage: node tools/capture-media.js [outDir]');
+ process.exit(2);
+}
+const reportUrl = 'file://' + path.resolve(reportArg);
+fs.mkdirSync(outDir, { recursive: true });
+
+const VIEWPORT = { width: 1440, height: 940 };
+const GRAPH_SETTLE_MS = 3500;
+
+/* One entry per PNG the docs embed. `open` runs inside the page; `full`
+ captures the whole scroll height, for tabs whose charts sit below the fold. */
+const SHOTS = [
+ { name: 'overview.png', tab: 'overview', full: true },
+ {
+ name: 'cycle-detection.png', tab: 'graph',
+ open: () => focusBean('legacyImportService'),
+ },
+ {
+ name: 'graph-focus.png', tab: 'graph',
+ open: () => focusBean('orderService'),
+ },
+ { name: 'ghosts.png', tab: 'ghosts' },
+ { name: 'smells.png', tab: 'smells' },
+ { name: 'timing.png', tab: 'timing', full: true },
+ { name: 'conditions.png', tab: 'conditions' },
+];
+
+/** Waits for the report script to have built its tabs. */
+async function ready(page) {
+ await page.waitForFunction(() => document.querySelectorAll('.nav-item').length > 0);
+}
+
+/** Opens a tab and lets the graph settle when that tab draws one. */
+async function openTab(page, tab, open) {
+ await page.evaluate(t => activate(t), tab);
+ if (tab === 'graph') await page.waitForTimeout(GRAPH_SETTLE_MS);
+ if (open) {
+ await page.evaluate(open);
+ await page.waitForTimeout(1400);
+ }
+ await page.waitForTimeout(400);
+}
+
+async function screenshots(browser) {
+ const page = await browser.newPage({ viewport: VIEWPORT, deviceScaleFactor: 2 });
+ await page.goto(reportUrl, { waitUntil: 'load' });
+ await ready(page);
+ for (const shot of SHOTS) {
+ await openTab(page, shot.tab, shot.open);
+ const file = path.join(outDir, shot.name);
+ if (shot.full) {
+ // The tab bodies scroll inside a fixed-height pane, so fullPage sees only
+ // the viewport. Grow the window to the pane's content height instead.
+ const h = await page.evaluate(t => {
+ const el = document.querySelector('#tab-' + t);
+ return Math.ceil(el.scrollHeight + 90);
+ }, shot.tab);
+ await page.setViewportSize({ width: VIEWPORT.width, height: Math.min(h, 6000) });
+ await page.waitForTimeout(600);
+ }
+ await page.screenshot({ path: file });
+ if (shot.full) await page.setViewportSize(VIEWPORT);
+ console.log('png ' + shot.name + ' ' + (fs.statSync(file).size / 1024).toFixed(0) + 'KB');
+ }
+ await page.close();
+}
+
+/**
+ * Encodes captured frames as a GIF. One global palette keeps the file small —
+ * the report is flat UI colour, so 128 colours is plenty — and each frame keeps
+ * its real delay so the GIF plays at the speed the tour actually ran.
+ */
+function encodeGif(frames, file) {
+ const gif = GIFEncoder();
+ let palette = null;
+ frames.forEach((frame, i) => {
+ const { data, width: w, height: h } = frame;
+ if (!palette) palette = quantize(data, 128);
+ const indexed = applyPalette(data, palette);
+ const delay = i + 1 < frames.length
+ ? Math.max(40, Math.round(frames[i + 1].t - frame.t))
+ : 900; // hold the last frame before the loop restarts
+ gif.writeFrame(indexed, w, h, { palette: i === 0 ? palette : undefined, delay });
+ });
+ gif.finish();
+ fs.writeFileSync(file, Buffer.from(gif.bytes()));
+}
+
+/** Decodes a PNG screenshot to the RGBA buffer the encoder wants. */
+function decode(buffer) {
+ const png = PNG.sync.read(buffer);
+ return { data: new Uint8ClampedArray(png.data), width: png.width, height: png.height };
+}
+
+/**
+ * Drives the page through `steps` while screenshotting it, then writes the GIF.
+ * Screenshotting rather than recording video keeps the whole pipeline in-process
+ * and makes every frame a real rendered state instead of a re-encoded one.
+ */
+async function animate(browser, name, steps) {
+ // The GIF is whatever the viewport is — no resampling step, and 1000px keeps
+ // the desktop layout (the nav collapses into a drawer below 860px).
+ const page = await browser.newPage({ viewport: { width: 1000, height: 640 } });
+ await page.goto(reportUrl, { waitUntil: 'load' });
+ await ready(page);
+ await page.waitForTimeout(700);
+
+ const frames = [];
+ let capturing = true;
+ const grab = (async () => {
+ while (capturing) {
+ const t = Date.now();
+ let shot;
+ try {
+ shot = await page.screenshot({ type: 'png' });
+ } catch { break; } // page closed mid-capture
+ const frame = decode(shot);
+ frame.t = t;
+ frames.push(frame);
+ await page.waitForTimeout(120);
+ }
+ })();
+
+ await steps(page);
+ capturing = false;
+ await grab;
+
+ const file = path.join(outDir, name + '.gif');
+ encodeGif(frames, file);
+ await page.close();
+ console.log('gif ' + name + '.gif ' + (fs.statSync(file).size / 1024 / 1024).toFixed(2)
+ + 'MB ' + frames.length + ' frames');
+}
+
+const hold = (page, ms) => page.waitForTimeout(ms);
+const go = async (page, tab, ms = 2000) => {
+ await page.evaluate(t => activate(t), tab);
+ await hold(page, tab === 'graph' ? GRAPH_SETTLE_MS : ms);
+};
+
+/* The README hero: one pass over every tab, ending on the cycle in the graph. */
+async function tourSteps(page) {
+ await hold(page, 1200);
+ await go(page, 'cycles', 2400);
+ await go(page, 'ghosts', 2600);
+ await go(page, 'smells', 2600);
+ await go(page, 'timing', 2800);
+ await go(page, 'graph');
+ await page.evaluate(() => focusBean('legacyImportService'));
+ await hold(page, 2600);
+}
+
+/* Search a bean, focus it, read the panel — the graph's actual workflow. */
+async function graphSteps(page) {
+ await go(page, 'graph');
+ await page.fill('#g-search', 'orderService');
+ await hold(page, 900);
+ await page.press('#g-search', 'Enter');
+ await hold(page, 2600);
+ await page.evaluate(() => focusBean('auditService'));
+ await hold(page, 2600);
+}
+
+/* The three charts the Timing tab draws, scrolled through in order. */
+async function timingSteps(page) {
+ await go(page, 'timing', 1800);
+ for (const y of [500, 1100, 1700, 2300]) {
+ await page.evaluate(top => {
+ const pane = document.querySelector('#tab-timing');
+ (pane.scrollHeight > pane.clientHeight ? pane : document.scrollingElement).scrollTo({ top, behavior: 'smooth' });
+ }, y);
+ await hold(page, 1500);
+ }
+}
+
+(async () => {
+ const browser = await chromium.launch();
+ try {
+ await screenshots(browser);
+ await animate(browser, 'report-tour', tourSteps);
+ await animate(browser, 'graph-drilldown', graphSteps);
+ await animate(browser, 'timing-charts', timingSteps);
+ } finally {
+ await browser.close();
+ }
+ console.log('\nwrote to ' + outDir);
+})();
diff --git a/wiredoctor-actuator/pom.xml b/wiredoctor-actuator/pom.xml
index 09b85b0..53e5455 100644
--- a/wiredoctor-actuator/pom.xml
+++ b/wiredoctor-actuator/pom.xml
@@ -6,7 +6,7 @@
io.github.ddsha441981
wiredoctor-parent
- 1.1.3
+ 1.1.4
wiredoctor-actuator
WireDoctor Actuator
diff --git a/wiredoctor-autoconfigure/pom.xml b/wiredoctor-autoconfigure/pom.xml
index 62aa840..bbfe760 100644
--- a/wiredoctor-autoconfigure/pom.xml
+++ b/wiredoctor-autoconfigure/pom.xml
@@ -6,7 +6,7 @@
io.github.ddsha441981
wiredoctor-parent
- 1.1.3
+ 1.1.4
wiredoctor-autoconfigure
WireDoctor AutoConfiguration
diff --git a/wiredoctor-autoconfigure/src/main/java/com/wiredoctor/WireDoctorAnalyzer.java b/wiredoctor-autoconfigure/src/main/java/com/wiredoctor/WireDoctorAnalyzer.java
index 02e135a..ddeee03 100644
--- a/wiredoctor-autoconfigure/src/main/java/com/wiredoctor/WireDoctorAnalyzer.java
+++ b/wiredoctor-autoconfigure/src/main/java/com/wiredoctor/WireDoctorAnalyzer.java
@@ -790,34 +790,9 @@ private WireDoctorRegressionException runRegressionGuard(Map g
// v1.1.0: append trend-history entry before writing the baseline
try {
int trendCap = properties.resolveTrendHistorySize();
- @SuppressWarnings("unchecked")
+ // Carry forward prior trend entries from the existing baseline
java.util.List> trendHistory =
- new java.util.ArrayList<>();
- // Read existing baseline to carry forward prior trend entries
- if (baselineFile.isFile()) {
- try {
- JsonNode root = mapper.readTree(baselineFile);
- JsonNode trendNode = root.path("trendHistory");
- if (trendNode.isArray()) {
- for (JsonNode entry : trendNode) {
- java.util.Map map = new java.util.LinkedHashMap<>();
- JsonNode ts = entry.get("timestamp");
- JsonNode ms = entry.get("totalStartupMs");
- JsonNode sb = entry.get("slowBeanCount");
- // v1.1.3: absent in pre-1.1.3 entries — carried
- // forward only when present, never invented.
- JsonNode bc = entry.get("beanCount");
- if (ts != null) map.put("timestamp", ts.asLong());
- if (ms != null) map.put("totalStartupMs", ms.asLong());
- if (sb != null) map.put("slowBeanCount", sb.asInt());
- if (bc != null) map.put("beanCount", bc.asInt());
- if (!map.isEmpty()) trendHistory.add(map);
- }
- }
- } catch (Exception ignored) {
- // Corrupt baseline trend section — start fresh
- }
- }
+ readTrendHistory(mapper, baselineFile);
// Append current entry
java.util.Map currentEntry = new java.util.LinkedHashMap<>();
currentEntry.put("timestamp", System.currentTimeMillis());
@@ -866,6 +841,17 @@ private WireDoctorRegressionException runRegressionGuard(Map g
try {
baselineJsonRoot = mapper.readTree(baselineFile);
baseline = WireDoctorBaselineDiff.Snapshot.fromJson(baselineJsonRoot);
+ // v1.1.4: the trend chart reads reportData.trendHistory, and only a
+ // baseline-write run used to put it there — so the diff run you
+ // actually do day to day rendered an empty chart. The history lives
+ // in the baseline either way; hand it to the report here too. No
+ // current entry is appended: these are baseline entries, and this
+ // run is not one.
+ java.util.List> baselineTrend =
+ readTrendHistory(baselineJsonRoot);
+ if (!baselineTrend.isEmpty()) {
+ report.put("trendHistory", baselineTrend);
+ }
} catch (Exception e) {
gatesMap.put("mode", "baseline-unreadable"); // v0.7.1
log.warn(WireDoctorMessages.BASELINE_UNREADABLE,
@@ -1205,4 +1191,60 @@ static String signed(long value) {
static String oneDecimal(double value) {
return String.format(Locale.ROOT, "%.1f", value);
}
+
+ /**
+ * Reads {@code trendHistory[]} out of a baseline file, tolerating a missing
+ * or unreadable file by returning an empty, mutable list.
+ *
+ * @param mapper the mapper to parse with
+ * @param baselineFile the baseline to read; may not exist
+ * @return the entries found, oldest first; never {@code null}
+ */
+ private static java.util.List> readTrendHistory(
+ ObjectMapper mapper, File baselineFile) {
+ if (baselineFile == null || !baselineFile.isFile()) {
+ return new java.util.ArrayList<>();
+ }
+ try {
+ return readTrendHistory(mapper.readTree(baselineFile));
+ } catch (Exception ignored) {
+ // Unreadable baseline — start fresh rather than fail the run
+ return new java.util.ArrayList<>();
+ }
+ }
+
+ /**
+ * Reads {@code trendHistory[]} out of an already-parsed baseline document.
+ * Every field is copied only when present: entries written by older versions
+ * lack {@code beanCount}, and that gap is carried through rather than
+ * invented so the chart can say "unknown" instead of guessing.
+ *
+ * @param baselineRoot the parsed baseline document; may be {@code null}
+ * @return the entries found, oldest first; never {@code null}
+ */
+ private static java.util.List> readTrendHistory(JsonNode baselineRoot) {
+ java.util.List> history = new java.util.ArrayList<>();
+ if (baselineRoot == null) {
+ return history;
+ }
+ JsonNode trendNode = baselineRoot.path("trendHistory");
+ if (!trendNode.isArray()) {
+ return history;
+ }
+ for (JsonNode entry : trendNode) {
+ java.util.Map map = new java.util.LinkedHashMap<>();
+ JsonNode ts = entry.get("timestamp");
+ JsonNode ms = entry.get("totalStartupMs");
+ JsonNode sb = entry.get("slowBeanCount");
+ // v1.1.3: absent in pre-1.1.3 entries — carried forward only when
+ // present, never invented.
+ JsonNode bc = entry.get("beanCount");
+ if (ts != null) map.put("timestamp", ts.asLong());
+ if (ms != null) map.put("totalStartupMs", ms.asLong());
+ if (sb != null) map.put("slowBeanCount", sb.asInt());
+ if (bc != null) map.put("beanCount", bc.asInt());
+ if (!map.isEmpty()) history.add(map);
+ }
+ return history;
+ }
}
diff --git a/wiredoctor-autoconfigure/src/test/java/com/wiredoctor/WireDoctorAnalyzerIntegrationTest.java b/wiredoctor-autoconfigure/src/test/java/com/wiredoctor/WireDoctorAnalyzerIntegrationTest.java
index cfceb99..e1a6aff 100644
--- a/wiredoctor-autoconfigure/src/test/java/com/wiredoctor/WireDoctorAnalyzerIntegrationTest.java
+++ b/wiredoctor-autoconfigure/src/test/java/com/wiredoctor/WireDoctorAnalyzerIntegrationTest.java
@@ -18,6 +18,7 @@
import org.springframework.context.annotation.Lazy;
import java.io.File;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -309,6 +310,56 @@ void baselineWriteProducesTrendHistory(@TempDir Path tempDir) throws Exception {
}
}
+ // ── v1.1.4: the trend chart is fed on diff runs too ──────────────────────
+
+ @Test
+ void diffRunPutsBaselineTrendHistoryOnTheReport(@TempDir Path tempDir) throws Exception {
+ // Two write runs build a two-entry history in the baseline...
+ for (int i = 0; i < 2; i++) {
+ try (ConfigurableApplicationContext ctx = boot(
+ "wiredoctor.output-path=" + tempDir,
+ "wiredoctor.baseline=" + tempDir.resolve("baseline.json"),
+ "wiredoctor.baseline-write=true")) {
+ assertThat(tempDir.resolve("baseline.json")).exists();
+ }
+ }
+ // ...and the diff run that follows must hand that history to the report,
+ // or the Timing tab's trend chart is empty in the only mode most
+ // projects ever run.
+ try (ConfigurableApplicationContext ctx = boot(
+ "wiredoctor.output-path=" + tempDir,
+ "wiredoctor.baseline=" + tempDir.resolve("baseline.json"),
+ "wiredoctor.baseline-write=false")) {
+ JsonNode report = new ObjectMapper()
+ .readTree(tempDir.resolve("wiredoctor-report.json").toFile());
+ JsonNode trend = report.path("trendHistory");
+ assertThat(trend.isArray()).isTrue();
+ // Exactly the baseline's entries: the current run is not a baseline
+ // entry and must not be appended as one.
+ assertThat(trend).hasSize(2);
+ trend.forEach(e -> {
+ assertThat(e.has("timestamp")).isTrue();
+ assertThat(e.path("totalStartupMs").asLong()).isNotNegative();
+ });
+ }
+ }
+
+ @Test
+ void diffRunWithoutTrendHistoryLeavesTheKeyOff(@TempDir Path tempDir) throws Exception {
+ // A baseline written before v1.1.0 has no trendHistory[] — the diff run
+ // must not invent an empty one.
+ Files.writeString(tempDir.resolve("baseline.json"),
+ "{\"dependencies\":{\"totalBeans\":1,\"graph\":{\"nodes\":[],\"edges\":[]}}}");
+ try (ConfigurableApplicationContext ctx = boot(
+ "wiredoctor.output-path=" + tempDir,
+ "wiredoctor.baseline=" + tempDir.resolve("baseline.json"),
+ "wiredoctor.baseline-write=false")) {
+ JsonNode report = new ObjectMapper()
+ .readTree(tempDir.resolve("wiredoctor-report.json").toFile());
+ assertThat(report.has("trendHistory")).isFalse();
+ }
+ }
+
@Test
void trendHistoryPreservesBeanCountAcrossWrites(@TempDir Path tempDir) throws Exception {
for (int i = 0; i < 2; i++) {
diff --git a/wiredoctor-test/pom.xml b/wiredoctor-test/pom.xml
index 166a96b..884fba1 100644
--- a/wiredoctor-test/pom.xml
+++ b/wiredoctor-test/pom.xml
@@ -6,7 +6,7 @@
io.github.ddsha441981
wiredoctor-parent
- 1.1.3
+ 1.1.4
wiredoctor-test