使用Spring配置初始化默认的Locale和Timezone

Tau*_*ren 13 java timezone spring

我正在使用PropertyPlaceholderConfigurer从属性文件加载应用程序设置,例如JDBC连接信息.我还想将其他设置(如默认语言环境和时区)作为属性.

但我不确定最好的执行方法Locale.setDefault()TimeZone.setDefault().我希望他们在启动时早点运行一次.在其他代码执行之前,Spring是否有正确的方法执行某些代码?有什么建议?

我知道我可以在命令行上指定默认值,但是这个应用程序将安装在很多地方,我想避免因忘记指定-Duser.timezone = UTC或其他原因而引起的问题.

kis*_*sna 11

我发现Spring在调用contextInitialized方法之前加载了一些默认bean,包括其他bean,所以,这是一个更好的方法"草案",我能想到,如果你发现任何问题,请告诉我:

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

    }

}
Run Code Online (Sandbox Code Playgroud)


Boz*_*zho 6

我用了一个ServletContextListener.在contextInitialized(..) TimeZone.setDefault(..)被称为.

如果您依赖任何构造函数中的时区或者@PostConstruct/ afterPropertiesSet()但是它将不会被考虑在内.

如果您需要,请查看此问题