Java 无法从War文件外部找到application.properties文件

Java 无法从War文件外部找到application.properties文件,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,在将application.properties文件外部化的过程中。当我通过jenkins创建war文件时显示错误 启动ApplicationContext时出错。显示条件报告的步骤 在启用“调试”的情况下重新运行应用程序。2019-11-28 18:06:07.900 错误22612---[main] o、 s.b.d.记录故障分析报告员: 应用程序无法启动 说明: 未能配置数据源:“url”属性未指定且 无法配置嵌入式数据源 原因:无法确定合适的驱动程序类别 行动: 考虑以下事项:如果您

在将application.properties文件外部化的过程中。当我通过jenkins创建war文件时显示错误

启动ApplicationContext时出错。显示条件报告的步骤 在启用“调试”的情况下重新运行应用程序。2019-11-28 18:06:07.900 错误22612---[main] o、 s.b.d.记录故障分析报告员:


应用程序无法启动


说明:

未能配置数据源:“url”属性未指定且 无法配置嵌入式数据源

原因:无法确定合适的驱动程序类别

行动:

考虑以下事项:如果您想要一个嵌入式数据库(H2、HSQL或 Derby),请将其放在类路径上。如果你有数据库设置 要从特定配置文件加载,您可能需要激活它(否 配置文件当前处于活动状态)

2019-11-28 18:06:07.909错误22612---[main] o、 s.test.context.TestContextManager:在 允许TestExecutionListener [org.springframework.test.context.web。ServletTestExecutionListener@233795b6] 准备测试实例 [com.assessmentAggregator.api。AssessmentAggregatorApiApplicationTests@74024f3]

java.lang.IllegalStateException:无法在处加载ApplicationContext org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125) ~[spring-test-5.1.6.释放罐:5.1.6.释放]在 org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108) ~[spring-test-5.1.6.释放罐:5.1.6.释放]在 org.springframework.test.context.web.ServletTestExecutionListener.SetupRequestContextIfEssential(ServletTestExecutionListener.java:190) ~[spring-test-5.1.6.释放罐:5.1.6.释放]在 org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) ~[spring-test-5.1.6.释放罐:5.1.6.释放]在 org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246) ~[spring-test-5.1.6.释放罐:5.1.6.释放]在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)[spring-test-5.1.6.RELEASE.jar:5.1.6.RELEASE] org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectCall(SpringJUnit4ClassRunner.java:289) [spring-test-5.1.6.RELEASE.jar:5.1.6.RELEASE]位于 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12] org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) [spring-test-5.1.6.RELEASE.jar:5.1.6.RELEASE]位于 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) [spring-test-5.1.6.RELEASE.jar:5.1.6.RELEASE]位于 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) [spring-test-5.1.6.RELEASE.jar:5.1.6.RELEASE]位于 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12] org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12] org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12] org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12] org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12]

对于外部化属性文件,我使用了以下代码

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder
            .properties("spring.config.name:" + AppConstants.Config.APPLICATION_PROPERTY_NAME,
                    "spring.config.location:" + AppConstants.Config.APPLICATION_PROPERTY_SOURCE_PATH)
            .sources(AssessmentAggregatorApiApplication.class);
}
以及
AppConstants.Config.APPLICATION\u PROPERTY\u NAME=String APPLICATION\u PROPERTY\u NAME=“foxmatrixapp.properties”
AppConstants.Config.APPLICATION\u PROPERTY\u SOURCE\u PATH=字符串APPLICATION\u PROPERTY\u SOURCE\u PATH=”file:////mnt/assessment_aggregator/data/pdf/"; 并在
pom.xml
文件中添加了此代码,以便从我使用的war文件中排除
application.properties
文件

 <resources>
     <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
            <exclude>**/*.properties</exclude>
        </excludes>
    </resource> 
   </resources>

src/main/resources
真的
**/*.物业

您可以使用放置在目标文件夹中的其他属性源和点

比如说

@PropertySources({@PropertySource(value="file:somefolder/conf/bootstrap.properties", ignoreResourceNotFound=true), 
    @PropertySource(value="file:conf/bootstrap.properties", ignoreResourceNotFound=true)})
在保存在somefolder/conf中的服务器文件中,然后加载文件中定义的属性

@Value("${datasource.url}")
private String url;

@Value("${datasource.username}")
private String username;

@Value("${datasource.password}")
private String password;
一旦加载,它可以在任何地方使用


ignoreResourceNotFound=true被合理放置,以防在中找不到属性,则不会发生异常,所有异常都基于场景。您可以更改回false

那些在过程中加载得太晚。@M.Deinum在配置时加载如何?这些属性是否在所述属性文件中?此外,这是一个失败的测试,这意味着它无法加载属性。测试不会使用
configure
方法,因此对这些属性一无所知(我认为它也不应该知道)。