【问题标题】:Autowire of Spring Boot's application.properties is throwing a NPE when deployed in TomcatSpring Boot 的 application.properties 的 Autowire 在 Tomcat 中部署时抛出 NPE
【发布时间】:2017-11-05 23:17:20
【问题描述】:

我正在构建一个 Spring Boot 应用程序,这是我的目录结构:

src
 main
  java
    com.company.appp
 resources
  application.properties
  log4j2.xml

使用以下自动装配代码可以很好地读取 application.properties 中的属性:

@ServletComponentScan
@SpringBootApplication
public class MyApplication {

  @Autowired
  private Environment env;

  this.env.getProperty("test");
}

它在其他类中也以相同的方式加载。当我像这样运行应用程序时,这很好用:

mvn spring:boot run 或直接来自 IntelliJ,没有问题。但是我尝试使用mvn clean install 打包WAR,结果如下:

war
  WEB-INF
    lib
    classses
      com
      log4j2.xml
      application.properties
  org
  META-INF

并将其部署在 Tomcat 中。访问应用程序 URL 后,我在 env.getProperty 收到了一个 NullPointerException

为什么我在 tomcat 中部署它时会发生这种情况?在tomcat中部署spring boot war时如何加载属性?

【问题讨论】:

  • 你的pom文件中是否排除了内嵌web容器的依赖?
  • 你说的是哪一个?
  • @NEO 请发布至少可以编译的代码!您的 MyApplication 类甚至无法编译。您需要向我们展示 pom 依赖项。 2.尝试使用@Value("${propertyname}")绑定属性

标签: java maven tomcat spring-boot


【解决方案1】:

您为什么要将其打包为 war ,有什么具体原因吗? Spring Boot 可以部署为 jar 文件,请参考 spring 参考指南。

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-packaging-for-production

源代码 主要的 java --java 类。

资源 应用程序属性

【讨论】:

    猜你喜欢
    • 2016-02-13
    • 1970-01-01
    • 2021-05-14
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2022-11-24
    相关资源
    最近更新 更多