# 출하 파일 안의 같은 이름, 다른 타입 — 네임스페이스와 함께 37: hikari: connection-timeout: ${APP_DATASOURCE_CONNECTION_TIMEOUT:5000} 322: tomcat: connection-timeout: ${APP_SERVER_TOMCAT_CONNECTION_TIMEOUT:20s} # 앞쪽이 바인딩되는 세터 public long getConnectionTimeout(); public void setConnectionTimeout(long); # 같은 키를 읽는 시작 검증기는 다른 규칙으로 읽는다 16:public class HikariPoolConstraintValidator implements SmartInitializingSingleton { 18: static final String CONNECTION_TIMEOUT_KEY = "spring.datasource.hikari.connection-timeout"; 26: static final String CONNECTION_TIMEOUT_ENV_KEY = "APP_DATASOURCE_CONNECTION_TIMEOUT"; 8:import org.springframework.boot.convert.DurationStyle; 125: return DurationStyle.detectAndParse(raw.trim(), ChronoUnit.MILLIS).toMillis(); # 지금은 정적 가드가 이 형식을 막는다 private static final List PLAIN_MILLISECOND_KEYS = List.of( "spring.datasource.hikari.connection-timeout", "spring.datasource.hikari.validation-timeout", "spring.datasource.hikari.idle-timeout", "spring.datasource.hikari.keepalive-time", "spring.datasource.hikari.max-lifetime", "spring.datasource.hikari.leak-detection-threshold", "spring.datasource.hikari.initialization-fail-timeout"); (그 가드가 한 번 헛짚었던 자리) *

An earlier version matched the key's leaf name with a regex and reported {@code * server.tomcat.connection-timeout: 20s} — a genuine {@code Duration} — as a defect. Flattening * through the real loader means the check is about the property this list names and not about