Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot SpringBoot Autowired仅适用于嵌入式Tomcat_Spring Boot_Nullpointerexception_Vaadin_Autowired - Fatal编程技术网

Spring boot SpringBoot Autowired仅适用于嵌入式Tomcat

Spring boot SpringBoot Autowired仅适用于嵌入式Tomcat,spring-boot,nullpointerexception,vaadin,autowired,Spring Boot,Nullpointerexception,Vaadin,Autowired,我有一个springboot/vaadin14应用程序,它真的让我抓狂。我已经做了一千次了,但似乎找不到我缺少的东西 当我使用嵌入式Tomcat运行应用程序时(spring-boot:run),一切正常。但当我使用外部Tomcat9(在同一台机器上)运行它时,我的自动关联依赖项为空 我的代码: AppConfig.java @SpringBootConfiguration @ComponentScan("com.example.myapp") @EnableVaadin pu

我有一个
springboot/vaadin14
应用程序,它真的让我抓狂。我已经做了一千次了,但似乎找不到我缺少的东西

当我使用嵌入式Tomcat运行应用程序时(
spring-boot:run
),一切正常。但当我使用外部Tomcat9(在同一台机器上)运行它时,我的自动关联依赖项为空

我的代码:

AppConfig.java

@SpringBootConfiguration
@ComponentScan("com.example.myapp")
@EnableVaadin
public class AppConfig implements Serializable {
    private static final long serialVersionUID = -2113829779705972298L;
}
Vaadin ETL视图:

@Route(value = "etl", layout = MainView.class)
@PageTitle("ETL")
@RouteAlias(value = "", layout = MainView.class)
public class EtlView extends Div implements Serializable {
    private static final long serialVersionUID = -6417032793665450391L;

    @Autowired
    private AsyncRestClientService service;   // this works with embedded.  NULL with external.
    ...
@Service
public class AsyncRestClientService implements Serializable {
    ...
@SpringBootApplication
public class MyAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyAppApplication .class, args);
    }

}
AsyncRestClientService:

@Route(value = "etl", layout = MainView.class)
@PageTitle("ETL")
@RouteAlias(value = "", layout = MainView.class)
public class EtlView extends Div implements Serializable {
    private static final long serialVersionUID = -6417032793665450391L;

    @Autowired
    private AsyncRestClientService service;   // this works with embedded.  NULL with external.
    ...
@Service
public class AsyncRestClientService implements Serializable {
    ...
@SpringBootApplication
public class MyAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyAppApplication .class, args);
    }

}
MyApplication:

@Route(value = "etl", layout = MainView.class)
@PageTitle("ETL")
@RouteAlias(value = "", layout = MainView.class)
public class EtlView extends Div implements Serializable {
    private static final long serialVersionUID = -6417032793665450391L;

    @Autowired
    private AsyncRestClientService service;   // this works with embedded.  NULL with external.
    ...
@Service
public class AsyncRestClientService implements Serializable {
    ...
@SpringBootApplication
public class MyAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyAppApplication .class, args);
    }

}
所有的类都在
com.example.myapp
包中,所以组件扫描应该会发现这个。 你知道我遗漏了什么吗

顺便说一句,我正在用Vaadin 8应用程序做同样的事情,一切都正常。即使使用外部Tomcat 9

谢谢

编辑


注意,我在pom.xml中将其打包为一个
WAR

在将Spring Boot应用程序部署到外部Tomcat时,您可能需要将该应用程序打包为一个WAR而不是JAR。检查此项:

也许您应该:类MyAppApplication扩展SpringBootServletInitializer@9dan成功了。但我不明白为什么?你介意用简短的描述作为回答吗?我将把它标为答案。谢谢您是否构建了用于部署到外部Tomcat的生产模式应用程序?实际上,我忘了提到这一点。我包装成一场战争。我将编辑我的问题以反映这一点。您是否更改了
、添加了
spring boot starter tomcat
以及扩展
SpringBootServletilizer
?AFAIK所有这些都是将Spring Boot应用程序打包为WAR所必需的。