当前位置: 首页 > 知识库问答 >
问题:

如何从依赖jar访问属性

慕胡媚
2023-03-14

我有一个核心项目,处理常见问题并应用方面,称为“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-messages.properties

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

允许将服务命名为service\u 1,该服务依赖于Common。

Service\u 1还有Service-messages\u en。属性

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

为了注入常见的特定配置,我声明了一个Config类,并将其导入服务的Spring Boot初始化程序类中。我还将“common-messages_en.properties”定义为Common Config中的属性源。

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\u 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个答案

仲孙献
2023-03-14

好啊当我在这样引导时初始化一个可重新加载的ResourceBundleMessageResource时;

 @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”)我可以在运行时访问公共消息和服务消息。

 类似资料:
  • 我有2个项目: 项目A在src/main/resources中有folder/file.ext。构建时,它存在于a.jar中。 项目B引用了代码中的某个位置的folder/file.ext。 我不能改变项目A或B或它们的构建方式。 从命令行运行project B时: 我正在获得一个FileNotFoundException。 我想知道,是否有一种方法可以使它工作,使folder/file.ext对

  • 问题内容: 有没有一种工具可以列出包含JAR中引用的(第三方)类的第三方“软件包”?假设它将从JAR文件定义中识别出什么是“ home”包,并且它将打印出JAR中引用的最高3级的第三方类的标准名称的列表。 目的是我需要找到该JAR文件的Maven依赖项并将其部署为Maven工件。 问题答案: JarAnalyzer: jar文件的依赖项管理实用程序。它的主要目的是遍历目录,解析该目录中的每个jar

  • 在阅读了关于这个主题的大约50个不同的线程后,我还没有能够有任何解决方案工作。 我正在尝试访问JAR中的config.properties文件。 null null file.jar MyApp 此处的files.class 等… icon.jpg config.properties

  • 问题内容: 如何访问组件的属性。我以为会在this.props中,但事实并非如此。 例如 并在产品列表中 退货 没有任何关键属性。我可以创建另一个属性并为其分配相同的值,但是由于key属性已经被使用,因此这似乎是多余的。 另外,键属性在整个组件中是否必须是唯一的,还是仅在其要呈现的循环或集合中是唯一的? 问题答案: 该属性由React在后台使用,并且不会暴露给您。您将要使用自定义属性并将该数据传递

  • 我在网络空间自由 17.0.0.4 上运行。部署了位于 目录下的 Web 应用程序和自定义身份验证模块。该jar文件被标记为服务器.xml文件中的。以下是它在服务器中的外观.xml 现在的问题是,我想使用文件位于文件到Web应用程序。 已尝试访问以下代码片段: 但是,两者都不起作用。 知道如何访问位于库jar文件中的属性文件吗?