복붙노트

[SPRING] 스프링 설정으로 기본 지역 및 시간대 초기화

SPRING

스프링 설정으로 기본 지역 및 시간대 초기화

PropertyPlaceholderConfigurer를 사용하여 속성 파일에서 JDBC 연결 정보와 같은 응용 프로그램 설정을로드하고 있습니다. 또한 기본 로케일 및 시간대와 같은 다른 설정을 속성으로 사용하고 싶습니다.

하지만 Locale.setDefault () 및 TimeZone.setDefault ()를 실행하는 가장 좋은 방법이 확실하지 않습니다. 나는 그들이 초기에 단지 한 번만 뛰길 바란다. 다른 코드가 실행되기 전에 먼저 Spring에서 적절한 코드가 실행되고 있습니까? 어떤 제안?

명령 줄에서 기본값을 지정할 수 있지만이 응용 프로그램은 여러 위치에 설치 될 것이고 누군가가 -Duser.timezone = UTC 등을 지정하지 않는 것을 막기 위해 문제를 피하고자합니다.

해결법

  1. ==============================

    1.나는 ServletContextListener를 사용했다. contextInitialized (..)에서 TimeZone.setDefault (..)가 호출됩니다.

    나는 ServletContextListener를 사용했다. contextInitialized (..)에서 TimeZone.setDefault (..)가 호출됩니다.

    어떤 생성자 나 @PostConstruct / afterPropertiesSet ()에서 타임 존에 의존한다면 그것은 고려되지 않을 것입니다.

    필요한 경우이 질문을 살펴보십시오.

  2. ==============================

    2.나는 contextInitialized 메소드를 호출하기 전에 다른 bean을 포함하여 기본 bean을로드하는 것을 발견했다. 그래서 생각해 볼 수있는 더 나은 접근 방법 인 "draft"가있다.

    나는 contextInitialized 메소드를 호출하기 전에 다른 bean을 포함하여 기본 bean을로드하는 것을 발견했다. 그래서 생각해 볼 수있는 더 나은 접근 방법 인 "draft"가있다.

    public class SystemPropertyDefaultsInitializer 
        implements WebApplicationInitializer{
    
        private static final Logger logger = Logger
                .getLogger(SystemPropertyDefaultsInitializer.class);
    
        @Override
        public void onStartup(ServletContext servletContext)
                throws ServletException {
            logger.info("SystemPropertyWebApplicationInitializer onStartup called");
    
            // can be set runtime before Spring instantiates any beans
            // TimeZone.setDefault(TimeZone.getTimeZone("GMT+00:00"));
            TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    
            // cannot override encoding in Spring at runtime as some strings have already been read
            // however, we can assert and ensure right values are loaded here
    
            // verify system property is set
            Assert.isTrue("UTF-8".equals(System.getProperty("file.encoding")));
    
            // and actually verify it is being used
            Charset charset = Charset.defaultCharset();
            Assert.isTrue(charset.equals(Charset.forName("UTF-8")));
    
            // locale
            // set and verify language
    
        }
    
    }
    
  3. ==============================

    3.독립형 스프링 부트 응용 프로그램은 어떻습니까? Java 응용 프로그램은 다음과 같습니다.

    독립형 스프링 부트 응용 프로그램은 어떻습니까? Java 응용 프로그램은 다음과 같습니다.

    @SpringBootApplication
    @EnableScheduling
    @EnableConfigurationProperties(TaskProperty.class)
    public class JobApplication {
    
    /*  @Autowired
        private TaskProperty taskProperty;
    */  
        public static void main(String[] args) {
            SpringApplication.run(JobApplication.class, args);
        }
    } 
    
  4. from https://stackoverflow.com/questions/4416955/initialize-default-locale-and-timezone-with-spring-configuration by cc-by-sa and MIT license