我们正在使用Spring MVC +内置支持上传文件。我想利用SpEL设置最大上传大小。问题是这个值来自我们的数据库。因此,在我们的旧应用程序代码中,一旦我们使用以下内容上传文件,我们会进行检查:
appManager.getAppConfiguration().getMaximumAllowedAttachmentSize();
然后检查文件是否大于此值,并根据大小继续。
我想在我们的servlet配置中使用以下调用替换该代码,如:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver>
<property name="maxUploadSize" value="#{appManager.getAppConfiguration().getMaximumAllowedAttachmentSize()}" />
</bean>
问题是在初始化时我收到以下异常:
Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.hibernate.LazyInitializationException: could not initialize proxy - no Session
有没有办法实现这个目标?
答案 0 :(得分:2)
我会尝试不同的方法:
org.springframework.web.multipart.commons.CommonsMultipartResolver
org.springframework.beans.factory.InitializingBean
或使用@PostConstruct
编写一个方法,在解析配置文件之后调用appManager
并在bean初始化阶段设置maxUploadSize
依赖注入例如:
public class MyMultipartResolver extends CommonsMultipartResolver {
@Autowired
private AppManager appManager;
@PostConstruct
public void init() {
setMaxUploadSize(
appManager.getAppConfiguration().getMaximumAllowedAttachmentSize());
}
}
在应用程序上下文初始化期间,仍然会在多部分解析程序上设置最大上载大小。如果数据库中的值发生更改,则需要重新启动应用程序以重新配置解析程序以获取新值。
考虑一下您是否需要覆盖这样的CommonsFileUploadSupport#prepareFileUpload()
:
public class MyMultipartResolver extends CommonsMultipartResolver {
@Autowired
private AppManager appManager;
@Override
protected FileUpload prepareFileUpload(String encoding) {
FileUpload fileUpload = super.prepareFileUpload(encoding);
fileUpload.setSizeMax(
appManager.getAppConfiguration().getMaximumAllowedAttachmentSize());
return fileUpload;
}
}
答案 1 :(得分:0)
根据您的情况,还有其他选项可能很有用。您可以扩展PropertiesFactoryBean
或PropertyPlaceholderConfigurer
并从数据库中获取一些属性。