有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

春季开机大战中来自${catalina.home}的java静态资源

在我的春季MVC项目中

<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/, file:${catalina.home}/myresources/" />

配置为从多个位置提供静态资源。 然而,在春季

@Configuration
public class ResourceConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/", "file:${catalina.home}/myresources/");
    }
}

没有按预期工作。请帮忙


共 (2) 个答案

  1. # 1 楼答案

        @Configuration
    public class ResourceConfig implements WebMvcConfigurer {
    
        private static final Log LOG = LogFactory.getLog(ResourceConfig.class);
    
        @Override
        public void addResourceHandlers(final ResourceHandlerRegistry registry) {
            String catalinaHome;
            try {
                catalinaHome = System.getenv("CATALINA_HOME");
            } catch (Exception e) {
                LOG.error(e);
                catalinaHome = "";
            }
            registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/", "file:" + catalinaHome + "/myresources/");    
        }
    }
    
  2. # 2 楼答案

    Spring不会直接在字符串中读取此属性${Catalina.home}。但您可以通过以下方式使用@Value:

    @Configuration
    public class ResourceConfig implements 
    WebMvcConfigurer {
        @Value("${catalina.home}" )
        private String catalinaHome;
        @Override
        public void addResourceHandlers(final ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/", "file:" + catalinaHome + "/myresources/");
        }
    }