burada mesele değildir çoklu Sınıf yollarıyla veya classloaders ile ancak kod belirli bir yol denemek ve yük kaç kaynaklar beraberdir.
classpath*
sözdizimi bir yay mekanizması, belirli bir yol için birden fazla kaynak yüklemek için bir kod mümkün kılar. Çok kullanışlı. Ancak, ResourceBundleMessageSource
, kaynakları yüklemek için java.util.ResourceBundle
standardını kullanır ve bu, belirli bir yol için ilk kaynağı yükleyecek ve diğer her şeyi göz ardı edecek çok daha basit, bir araç mekanizmasıdır.
Gerçekten sizin için kolay bir düzeltme yok. Ben ResourceBundleMessageSource
hendek ve MessageSource
(büyük olasılıkla AbstractMessageSource
alt sınıflandırma tarafından özel bir uygulama) PathMatchingResourcePatternResolver
kullanarak çeşitli kaynakları bulmak ve MessageSource
arabirim aracılığıyla bunları göstermek için kullanacağız sanırım. ResourceBundle
çok fazla yardımcı olmayacak.
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);
}
}
ve ReloadableResourceBundleMessageSource
gibi bahar bağlam yapılandırma ile kullanmak:
<bean id="messageSource" class="common.utils.MultipleMessageSource">
<property name="basenames">
<list>
<value>classpath:/messages/validation</value>
<value>classpath:/messages/messages</value>
</list>
</property>
<property name="fileEncodings" value="UTF-8"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
ben bu hileyi yapmak gerektiğini düşünüyorum örneğin aşağıda gibi
refreshProperties
yöntem sınıf
ReloadableResourceBundleMessageSource
dan geçersiz olabilir alternatif olarak
Teşekkürler! Endişelendiğim bir şey. – banterCZ
[ajaristi'nin cevabı] 'na bakarak çalışan bir çözüm için (http://stackoverflow.com/a/27532814/606662) –