Spring 静态资源位置动态映射
目前,我使用Spring MVC的“MVC:resources…”标记为我的webapp提供静态内容,在我的servlet上下文中设置URL映射和资源位置,如下所示:Spring 静态资源位置动态映射,spring,spring-mvc,Spring,Spring Mvc,目前,我使用Spring MVC的“MVC:resources…”标记为我的webapp提供静态内容,在我的servlet上下文中设置URL映射和资源位置,如下所示: <resources mapping="/resources/**" location="/resources/" /> 这可以很好地工作,但我希望能够将“位置”设置为在应用程序中动态配置的文件系统路径(存储在数据库中)。这可能吗?(我认为这需要在spring上下文初始化之后发生,这样我就可以从服务调用中获取结果
<resources mapping="/resources/**" location="/resources/" />
这可以很好地工作,但我希望能够将“位置”设置为在应用程序中动态配置的文件系统路径(存储在数据库中)。这可能吗?(我认为这需要在spring上下文初始化之后发生,这样我就可以从服务调用中获取结果,但我似乎无法找到一种方法使其工作。)这应该足够了
@Configuration
@EnableWebMvc
public class Bootstrap extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String path = "file:" + ...; // 'file:/' or 'file:' depending on how your path is formatted
registry.addResourceHandler("/resources/**").addResourceLocations(path);
}
}
如何获得路径是另一回事。可能使用
@Autowired
或@Bean
数据源来获取连接并查询数据库中的路径。现在考虑一下,出于安全原因,我认为它不允许您获取文件系统相对路径,只允许获取与应用程序上下文相关的路径。此
标记用于css、js、图标,即web应用程序资源。谢谢,Sotirios。如果我正确地阅读了文档,那么如果使用“file:/”前缀,似乎可以在应用程序根目录之外指定一个位置。这里的问题是,我事先不知道该路径,希望能够动态设置它…使用扩展此类的编程配置:。是否有任何方法可以在应用程序上下文初始化后执行该路径(即,如果资源位置在运行时更改)?谢谢我想更好的表达这个问题的方式是,我是否可以将ResourceHandlerRegistry注入我在运行时使用的bean…?@BillMarkmann我不知道你可以,可能是一个黑客。这是在servlet容器初始化应用程序时完成的。你说的运行时间是什么意思?在您的配置类中,您可以有其他@Bean
s。你可以用这个方法里面的那些。谢谢——让我试试这个;如果成功的话,我会把你作为答案。谢谢,我成功了。在应用程序初始化之后,您似乎无法更新ResourceHandler,但这并不是我的用例的一个障碍(为了我自己的利益,我试图变得有点太狡猾)。任何后来遇到这个问题的人,我要做的唯一一件事就是将cglib和asm添加到我的Maven POM中。