0

I want to replace StandardServletMultipartResolver configuration in Runtime. To achieve this I want to replace MultipartConfigElement bean.

Actually I want to change values inside MultipartProperties

I tried to google this question but I saw only this topic:

Replace a bean inside the spring container during run-time

But this method is applicable only for my beans. I could not understand how to apply this for my case.

I've found in code spring source way how does spring create these beans:

@Configuration
@ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class,
        MultipartConfigElement.class })
@ConditionalOnProperty(prefix = "spring.http.multipart", name = "enabled", matchIfMissing = true)
@EnableConfigurationProperties(MultipartProperties.class)
public class MultipartAutoConfiguration {

    private final MultipartProperties multipartProperties;

    public MultipartAutoConfiguration(MultipartProperties multipartProperties) {
        this.multipartProperties = multipartProperties;
    }

    @Bean
    @ConditionalOnMissingBean
    public MultipartConfigElement multipartConfigElement() {
        return this.multipartProperties.createMultipartConfig();
    }

    @Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
    @ConditionalOnMissingBean(MultipartResolver.class)
    public StandardServletMultipartResolver multipartResolver() {
        StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
        multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
        return multipartResolver;
    }

}

I want to write something like this:

multipartProperties = ...
applicationContext.putBean(multipartProperties.createMultipartConfig())

How to replace bean in context?

gstackoverflow
  • 36,709
  • 117
  • 359
  • 710

1 Answers1

0
You try to add-commons-fileupload.jar to pom.xml 


<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>

and in WebConfig:

@Bean public CommonsMultipartResolver multipartResolver() {

    CommonsMultipartResolver cmr = new CommonsMultipartResolver();
    cmr.setMaxUploadSize(maxUploadSizeInMb * 2);
    cmr.setMaxUploadSizePerFile(maxUploadSizeInMb); //bytes
    return cmr;

}