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所必需的。