首页 > 解决方案 > Spring Boot 应用程序在外部 tomcat 上运行时未读取特定于环境的 yaml 文件作为战争

问题描述

我正在开发一个 Spring 启动应用程序,我在外部 Tomcat 上作为战争包装运行,在 Tomcat 启动期间传递 spring 活动环境,使用-Dspring.profiles.active它被 Spring 应用程序接受(在日志中可见)但是当我试图读取任何应用程序中定义application-dev.yaml的属性无法读取 dev yaml 中定义的任何属性。

我已经设置了外部 Tomcat,并且在构建了 war 文件之后,我将它放在了 tomcat 中并启动了 tomcat。在 tomcatcatalina.bat中,我设置了set "JAVA_OPTS=%JAVA_OPTS% -Dspring.profiles.active=dev".

日志:

2019-07-21 17:16:50.472  INFO 26228 --- [ost-startStop-1] c.f.purge.PurgeServiceApplication        : Starting PurgeServiceApplication v1.0.0 on BLR-LT-101133 with PID 26228 (C:\Users\skumar8\Documents\Tomcat\apache-tomcat-8.5.41\webapps\purge-service\WEB-INF\classes started by SKumar8 in **C:\Users\skumar8\Documents\Tomcat\apache-tomcat-8.5.41\bin)
2019-07-21 17:16:50.481  INFO 26228 --- [ost-startStop-1] c.f.purge.PurgeServiceApplication        : The following profiles are active: dev**
2019-07-21 17:16:53.626  INFO 26228 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-07-21 17:16:53.715  INFO 26228 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 60ms. Found 0 repository interfaces.
2019-07-21 17:16:54.922  INFO 26228 --- [ost-startStop-1] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$ac299624] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-07-21 17:16:55.244  INFO 26228 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4652 ms
2019-07-21 17:16:58.855  INFO 26228 --- [ost-startStop-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
        name: default
        ...]
2019-07-21 17:16:59.223  INFO 26228 --- [ost-startStop-1] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.9.Final}
2019-07-21 17:16:59.228  INFO 26228 --- [ost-startStop-1] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2019-07-21 17:16:59.702  INFO 26228 --- [ost-startStop-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-07-21 17:17:01.641  INFO 26228 --- [ost-startStop-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.InformixDialect
2019-07-21 17:17:01.779  INFO 26228 --- [ost-startStop-1] o.h.e.j.e.i.LobCreatorBuilderImpl        : HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
2019-07-21 17:17:02.556  INFO 26228 --- [ost-startStop-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-07-21 17:17:03.399  INFO 26228 --- [ost-startStop-1] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-07-21 17:17:03.609  WARN 26228 --- [ost-startStop-1] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2019-07-21 17:17:04.300  INFO 26228 --- [ost-startStop-1] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2019-07-21 17:17:04.397  INFO 26228 --- [ost-startStop-1] c.f.purge.PurgeServiceApplication        : Started PurgeServiceApplication in 15.37 seconds (JVM running for 61.826)
2019-07-21 17:16:50.472  INFO 26228 --- [ost-startStop-1] c.f.purge.PurgeServiceApplication        : Starting PurgeServiceApplication v1.0.0 on BLR-LT-101133 with PID 26228 (C:\Users\skumar8\Documents\Tomcat\apache-tomcat-8.5.41\webapps\purge-service\WEB-INF\classes started by SKumar8 in C:\Users\skumar8\Documents\Tomcat\apache-tomcat-8.5.41\bin)
2019-07-21 17:16:50.481  INFO 26228 --- [ost-startStop-1] c.f.purge.PurgeServiceApplication        : The following profiles are active: dev
2019-07-21 17:16:53.626  INFO 26228 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-07-21 17:16:53.715  INFO 26228 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 60ms. Found 0 repository interfaces.
2019-07-21 17:16:54.922  INFO 26228 --- [ost-startStop-1] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$ac299624] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-07-21 17:16:55.244  INFO 26228 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4652 ms
2019-07-21 17:16:58.855  INFO 26228 --- [ost-startStop-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
        name: default
        ...]
2019-07-21 17:16:59.223  INFO 26228 --- [ost-startStop-1] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.9.Final}
2019-07-21 17:16:59.228  INFO 26228 --- [ost-startStop-1] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2019-07-21 17:16:59.702  INFO 26228 --- [ost-startStop-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-07-21 17:17:01.641  INFO 26228 --- [ost-startStop-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.InformixDialect
2019-07-21 17:17:01.779  INFO 26228 --- [ost-startStop-1] o.h.e.j.e.i.LobCreatorBuilderImpl        : HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
2019-07-21 17:17:02.556  INFO 26228 --- [ost-startStop-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-07-21 17:17:03.399  INFO 26228 --- [ost-startStop-1] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-07-21 17:17:03.609  WARN 26228 --- [ost-startStop-1] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2019-07-21 17:17:04.300  INFO 26228 --- [ost-startStop-1] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2019-07-21 17:17:04.397  INFO 26228 --- [ost-startStop-1] c.f.purge.PurgeServiceApplication        : Started PurgeServiceApplication in 15.37 seconds (JVM running for 61.826)

**Properties defined in application-dev.yaml**
spring:
  cache:
    jcache:
      config: classpath:ehcache.xml
**Error log**
java.lang.IllegalArgumentException: Cannot find cache named 'akamaiSecretCache' for Builder

**Debug Option tried**

我确实尝试过在中定义的一些简单的单行属性,application-dev.yaml但也没有运气。

标签: javaspring-boot

解决方案


您能否确认 application-***.yml 文件是否打包在生成的 war 文件中?您可以简单地提取计算机上的war文件进行检查。如果它不包括在内,使用它来包括

<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <warName>${app.jvm}</warName>
    <webResources>
        <resource>
            <directory>${basedir}/src/main/resources/config</directory>
            <targetPath>WEB-INF</targetPath>
            <filtering>true</filtering>
        </resource>
    </webResources>
</configuration>
</plugin>

推荐阅读