如何从依赖jar访问属性

时间:2017-07-28 14:55:04

标签: spring-boot properties message

我是一个处理常见问题和应用方面的核心项目,名为" Common"。服务项目将此核心项目用于常见流程。

我必须在" Common"中管理异常处理。我还必须从属性文件中共同阅读消息。但是服务也可以有自定义消息。

所以我把MessageUtils放在Common

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中,我有common-messages.properties

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

允许将服务命名为Service_1,它取决于Common。

Service_1也有service-messages_en.properties

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

为了注入常见的特定配置,我已经公开了一个Config类,并将其导入服务的Spring Boot初始化程序类中。我还定义了" common-messages_en.properties"作为CommonConfig中的属性源。

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。

如何正确合并不同jar中的不同属性文件?

1 个答案:

答案 0 :(得分: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")我可以在运行时访问公共和服务消息。