programing

SonarQube SpringBoot 프로젝트의 "구성 가능한 이 응용프로그램 컨텍스트 닫기"

magicmemo 2023. 7. 15. 10:02
반응형

SonarQube SpringBoot 프로젝트의 "구성 가능한 이 응용프로그램 컨텍스트 닫기"

차단기 문제가 있습니다. 주요 메서드에서 "이 "구성 가능한 응용프로그램 컨텍스트" 닫기"

public static void main(String[] args)
{
    SpringApplication.run(MyApplication.class, args);
}

SonarQube 예제의 코드를 사용해 보았습니다.

public static void main(String[] args)
{
    ConfigurableApplicationContext context = null;
    try
    {
        context = SpringApplication.run(MyApplication.class, args);
    }
    finally
    {
        if (context != null) {
            context.close();
        }
    }
}

시작하자마자 컨텍스트가 닫힙니다.

이 문제를 해결하는 방법은 무엇입니까?

SonarQube가 보고하는 문제는 잘못된 긍정이므로 무시해야 합니다.SonarQube의 FAQ에는 잘못된 긍정을 제거하기 위한 몇 가지 옵션이 나와 있습니다.

거짓 양성 및 수정하지 않음

문제 인터페이스를 통해 개별 문제를 False Positive 또는 Won't Fix로 표시할 수 있습니다.그러나 이 솔루션은 분기에 걸쳐 작동하지 않습니다. 분석 중인 각 분기에 대해 문제를 False Positive로 다시 표시해야 합니다.따라서 프로젝트의 여러 분기가 분석 중인 경우 코드 내 접근 방식이 선호될 수 있습니다.

//NOSONAR

규칙 엔진에 포함된 메커니즘(/NOPMD...) 또는 SonarQube에 구현된 일반 메커니즘(/NOSONAR을 이슈의 줄 끝에 배치)을 사용할 수 있습니다.이렇게 하면 문제가 발생하지 않습니다.

문제 끄기

문제를 검토하여 사용자 인터페이스에서 직접 false positive로 플래그를 지정할 수 있습니다.

웹 애플리케이션이 있으면 애플리케이션 컨텍스트가 파괴됩니다(제 생각에는ContextLoaderListener확실하지 않음), 명시적 코드가 필요하지 않습니다.

명령줄 응용 프로그램의 경우 컨텍스트를 수동으로 파괴해야 합니다. 그렇지 않으면 빈이 제대로 파괴되지 않습니다. @PreDestroy 메서드가 호출되지 않습니다.예:

@Bean
public ApplicationRunner applicationRunner() {
    return new ApplicationRunner() {
        public void run(ApplicationArguments args) throws Exception {

            try {
                doStuff();
            } finally {
                context.close();
            }
        }

봄 부팅 명령줄 응용 프로그램이 완료된 후에도 카산드라 세션이 열려 있을 때 이를 알게 되었습니다.

나는 항상 그것이 거짓/긍정적이라고 생각했습니다.

하지만 이 몇 줄로 테스트할 수 있습니다.

@RunWith(SpringRunner.class)
@SpringBootTest
public class YourApplicationTest {

    @Test
    public void shouldLoadApplicationContext() {
    }

    @Test
    public void applicationTest() {
        YourApplication.main(new String[] {});
    }

}

이제 소나가 말하길, 이것은 시험된 것입니다!
(Kudos는 Robert @ https://stackoverflow.com/a/41775613/863403) 로 나갑니다.

언급URL : https://stackoverflow.com/questions/37071032/sonarqube-close-this-configurableapplicationcontext-in-spring-boot-project

반응형