2010-12-11 21 views
11

Wczytywanie ustawień aplikacji, takich jak informacje o połączeniu JDBC, z pliku właściwości za pomocą PropertyPlaceholderConfigurer. Chciałbym również mieć inne ustawienia, takie jak domyślne ustawienia regionalne i strefa czasowa jako właściwości.Inicjalizuj domyślne ustawienia regionalne i strefę czasową z konfiguracją sprężyny

Ale nie jestem pewien najlepszej metody wykonywania Locale.setDefault() i TimeZone.setDefault(). Chcę, aby działały wcześnie w starcie i tylko raz. Czy na wiosnę istnieje odpowiedni sposób na wykonanie kodu PIERWSZY, zanim zostanie wykonany inny kod? Jakieś sugestie?

Wiem, że mogę określić wartości domyślne w wierszu poleceń, ale ta aplikacja zostanie zainstalowana w wielu miejscach i chcę uniknąć problemów spowodowanych przez kogoś, kto zapomniał podać -Duser.timezone = UTC lub cokolwiek innego.

Odpowiedz

5

Używam ServletContextListener. W trybie contextInitialized(..)TimeZone.setDefault(..) jest wywoływana.

Nie będzie brana pod uwagę, jeśli korzystasz ze strefy czasowej w dowolnym konstruktorze lub @PostConstruct/afterPropertiesSet().

Jeśli jest to potrzebne, przyjrzeć this question

+0

Dzięki, to może zadziałać. Jednak mam jeden InitializingBean i może potrzebować strefy czasowej w nim. Jeśli tak jest, to czy ma sens umieszczenie mojego 'setDefault()' kod w '@ PostConstruct' /' afterPropertiesSet() 'zamiast? Czy te InitializingBeans są wykonywane w kolejności zdefiniowanej w pliku xml? – Tauren

+0

Możesz spróbować użyć atrybutu 'order' dla fasoli. lub zobacz odpowiedź, którą podłączyłem. – Bozho

10

znalazłem Wiosenne ładunki niektórych swoich domyślnych fasoli oraz innych ziaren przed wywołaniem metody contextInitialized, tak, tutaj jest lepsze podejście „projekt”, że mogę myśleć , daj mi znać, jeśli zauważysz jakiekolwiek wątpliwości:

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 

    } 

} 
-5

Co powiesz na samodzielną aplikację rozruchową? Aplikacja Java wygląda następująco:

@SpringBootApplication 
@EnableScheduling 
@EnableConfigurationProperties(TaskProperty.class) 
public class JobApplication { 

/* @Autowired 
    private TaskProperty taskProperty; 
*/ 
    public static void main(String[] args) { 
     SpringApplication.run(JobApplication.class, args); 
    } 
} 
+1

To nie jest odpowiednia odpowiedź. – nixgadgets

Powiązane problemy