2017-07-28 86 views
0

我有一個處理常見問題和應用方面的核心項目,名爲「Common」。服務項目將這個核心項目用於通用流程。如何訪問從屬文件夾的屬性

我必須在「常用」中管理異常處理,並且還必須從共同的屬性文件中讀取消息。但服務也可以有自定義消息。

所以我把一個MessageUtils普通

MessageUtils.java 
@Component 
public class MessageUtils { 
    @Autowired 
    private MessageSource messageSource; 

    private static MessageSourceAccessor accessor; 


    @PostConstruct 
    private void init() { 
     accessor = new MessageSourceAccessor(messageSource, Locale.ENGLISH); 
    } 

    public static String getMessage(String messageKey) { 
     return accessor.getMessage(messageKey); 
    } 

}

共同點,我有common-messages.properties

|-src/main/resources 
    |--common-messages_en.properties 

讓一個被命名SERVICE_1服務,它依賴通用。

SERVICE_1也有service-messages_en.properties

|-src/main/resources 
    |--service-messages_en.properties 

要注入常見的具體配置,我宣佈一個共同的配置類並將其導入服務的春季啓動初始化類。我還將common-messages_en.properties定義爲CommonConfig中的Property Source。

CommonConfig.java

@ComponentScan({ "com.example.common.core"}) 
@EntityScan({ "com.example.common.entity" }) 
@EnableJpaRepositories(basePackages = { "com.example.common.dao" }) 
@PropertySource(value = { "classpath:common-messages_en.properties"}) 
public class CommonConfig { 

} 

所以,在SERVICE_1我有這將啓動SpringBoot應用BOOTAPP類。 CommonConfig也在那裏導入。

@SpringBootApplication 
@Import(CommonConfig.class) 
public class BootApp extends SpringBootServletInitializer { 

    public static void main(String[] args) { 
     SpringApplication.run(BootApp.class, args); 
    } 
} 

當我打電話

MessageUtils.getMessage("someMessageKey.thatDefinedIn.Service"); 

這沒關係,我可以閱讀服務的消息。

但是,當我想要讀取服務中的常見消息;

MessageUtils.getMessage("someMessageKey.thatDefinedIn.Common"); 

它得到NoSuchMessageException。

如何合併不同屬性的不同屬性文件?

回答

0

好的。當我像啓動時一樣初始化ReloadableResourceBundleMessageResource時;

@Bean 
public ReloadableResourceBundleMessageSource messageSource() { 
    ReloadableResourceBundleMessageSource messageSource = new 
    ReloadableResourceBundleMessageSource(); 

    messageSource.setBasenames("classpath:service-messages","classpath:common-messages"); 
    messageSource.setCacheSeconds(3600); //refresh cache once per hour 
    return messageSource; 
} 

(假設默認語言環境是「en」)我可以在運行時訪問公共消息和服務消息。