Does Spring MessageSource Support Multiple Class Path?

后端 未结 6 2196
终归单人心
终归单人心 2020-12-05 08:08

I am designing a plugin system for our web based application using Spring framework. Plugins are jars on classpath. So I am able to get sources such as jsp, see below

<
6条回答
  •  萌比男神i
    2020-12-05 08:38

    As alternative, you could override refreshProperties method from ReloadableResourceBundleMessageSource class like below example:

    public class MultipleMessageSource extends ReloadableResourceBundleMessageSource {
      private static final String PROPERTIES_SUFFIX = ".properties";
      private PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    
      @Override
      protected PropertiesHolder refreshProperties(String filename, PropertiesHolder propHolder) {
        Properties properties = new Properties();
        long lastModified = -1;
        try {
          Resource[] resources = resolver.getResources(filename + PROPERTIES_SUFFIX);
          for (Resource resource : resources) {
            String sourcePath = resource.getURI().toString().replace(PROPERTIES_SUFFIX, "");
            PropertiesHolder holder = super.refreshProperties(sourcePath, propHolder);
            properties.putAll(holder.getProperties());
            if (lastModified < resource.lastModified())
              lastModified = resource.lastModified();
          }
        } catch (IOException ignored) { }
        return new PropertiesHolder(properties, lastModified);
      }
    }
    

    and use it with spring context configuration like ReloadableResourceBundleMessageSource:

      
        
          
            classpath:/messages/validation
            classpath:/messages/messages
          
        
        
        
      
    

    I think this should do the trick.

提交回复
热议问题