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

Spring 4-在jar>war中加载属性文件

勾俊
2023-03-14

我无法加载位于jar (project.service.jar)中的db.properties,它被war文件(project-web.war)引用。输出war将jar放在we b-INF/lib/project . service . jar中。rest war也使用jar,它使用jar中的一些服务。当战争开始时,我无法加载位于服务的jar文件中的db.properties。prop文件具有要在jndi中查找的数据源名称。

战争配置

AppConfig.java

@Bean
public static PropertyPlaceholderConfigurer propertyConfigurer()
        throws IOException {
    PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
    props.setLocations(new Resource[] { new ClassPathResource(
            "application.properties") });
    return props;
}

service.jar

@Component
@Configuration
//@ComponentScan(basePackages={ "com.mgage.mvoice" })
@PropertySource(value = { "classpath:db.properties" })
public class DatabaseConfig {
    @Autowired
    Environment environment;

    private @Value(value = "${voice.datasource}") String dataSourceString;

    @Bean
public DataSource getDataSource() {
    JndiDataSourceLookup lookup = new JndiDataSourceLookup();
    try {
        DataSource dataSource = lookup.getDataSource(dataSourceString); //this always is null
        return dataSource;
    } catch (DataSourceLookupFailureException e) {
        return null;
    }
}

    @Bean
    public PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

如果应用配置.java导入数据源配置.java,我试过,但我仍然得到环境空值。我错过了什么吗?将服务分离为 jar 文件以使其可用于 REST、Web 应用和报告应用程序是否正确?还是建议与所有服务,Rest,报告类进行一次战争?

共有2个答案

许自强
2023-03-14

您需要在任何jar中指定类路径,请尝试这样做:@PropertySource(value={“classpath*:db.properties”})

安建木
2023-03-14

AFAIK中,spring应用程序上下文仅使用一个属性资源占位符配置器。由于@PropertySource(value={“classpath:db.properties”}似乎没有填充环境,我只能看到另一种解决方案:明确地将其添加到AppConfig中的位置列表中。java

    props.setLocations(new Resource[] { new ClassPathResource(
        "application.properties"), new ClassPathResource("db.properties")});

但我必须承认,这与其说是一个干净的解决方案,不如说是一个变通的办法。

编辑:

但通常是<code>数据源配置。java由spring配置机器扫描时,@PropertySource(value={“classpath:db.properties”}应填充环境。

 类似资料:
  • 我需要从spring boot war外部加载application.properties文件,该文件将部署在Tomcat中。 我试过各种解决方案,遗漏了一些东西 > 尝试在windows中设置环境变量,如下所示 尝试将上下文参数设置为tomcat,如下文所述,请回答https://stackoverflow.com/A/44697239/2751962 尝试在扩展SpringBootServle

  • 如何加载放置在可执行jar文件的资源文件夹中的属性文件。在这里,我的应用程序本身就是一个jar,它自己执行。它需要在运行时根据代码中提到的路径找到这个属性文件(放在资源文件夹下)。我用过以下两种方法,但都没用。这里的重点是,当我在eclipse中执行时,这两个选项都可以正常工作,但当我将其打包到可执行jar中时,这两个选项都不起作用。它抛出NullPointerException。我在这里看到的唯

  • 问题内容: 我手动将属性文件注入到jar中。如何从Java 1.7之前的jar文件中加载属性?我尝试了许多解决方法,但到目前为止没有任何效果。 关于它有很多问题,但是所有内容都集中在Java 1.7的ClassLoader方法上。 问题答案: 当您在类路径中或jar文件中具有属性文件时,它将成为资源。其他任何情况都是一个简单的文件。 在打包jar文件之前,需要做的是将属性文件所在的文件夹(即myp

  • 我在尝试添加

  • 问题内容: 我已经看过几次,并尝试了一些建议,但都没有成功(到目前为止)。我在以下路径上有一个maven项目和属性文件: 我正在尝试将其加载到Singleton类中以通过键访问属性 但是我在运行时遇到了NullPointerError的问题。我已经完成了所有可以想到的操作,但是无法找到/加载文件。 有任何想法吗? 堆栈跟踪: 问题答案: 您应该实例化您的对象。另外,您还应该使用以下路径加载资源文件

  • 问题内容: 我正在尝试执行JUnit测试期间从我的类路径中加载sample.properties,它在类路径中找不到文件。如果编写Java Main类,则可以很好地加载文件。我正在使用以下ant任务执行我的JUnit。 JUnit: 输出: 问题答案: 您需要添加到。 更新 :根据评论中的交流,事实证明不是问题所在。而是使用了错误的类加载器。 根据加载类的类加载器查找资源的路径。事实证明,该类是由