#spring-boot #nullpointerexception #vaadin #autowired
#весенняя загрузка #исключение nullpointerexception #vaadin #автоматическая загрузка
Вопрос:
У меня есть Spring Boot / Vaadin 14
приложение, которое действительно заставляет меня чесать голову. Я делал это тысячу раз, но, похоже, не могу найти то, чего мне не хватает.
Когда я запускаю приложение со встроенным Tomcat ( spring-boot:run
), все работает. Но когда я запускаю его с помощью внешнего Tomcat 9 (на моем же компьютере), мои автоматически подключаемые зависимости равны нулю.
Мой код:
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.
...
AsyncRestClientService:
@Service
public class AsyncRestClientService implements Serializable {
...
MyApplication:
@SpringBootApplication
public class MyAppApplication {
public static void main(String[] args) {
SpringApplication.run(MyAppApplication .class, args);
}
}
Все классы находятся в com.example.myapp
пакете, поэтому сканирование компонентов должно выявить это.
Есть идеи, чего мне не хватает?
Кстати, я делаю то же самое с приложением Vaadin 8, и все работает. Даже с моим внешним Tomcat 9.
Спасибо
Редактировать
Обратите внимание, я упаковываю это как WAR
в моем pom.xml .
Комментарии:
1. возможно, вам следует: класс MyAppApplication расширяет SpringBootServletInitializer
2. @9dan это сработало. Но я в тупике, почему? Не могли бы вы сформулировать это как ответ, возможно, с кратким описанием? Я отмечу это как ответ. Спасибо!
3. docs.spring.io/spring-boot/docs/2.3.x/reference/html/…
4. Вы создали приложение в рабочем режиме для развертывания на внешнем Tomcat?
Ответ №1:
Вероятно, вам нужно упаковать приложение как WAR вместо JAR при развертывании приложения Spring Boot на внешнем Tomcat. Проверьте это:https://spring.io/guides/gs/convert-jar-to-war
Комментарии:
1. На самом деле, я забыл упомянуть об этом. Я упаковываю как войну. Я отредактирую свой вопрос, чтобы отразить это.
2. Вы изменили
<packaging>
, добавилиspring-boot-starter-tomcat
и расширилиSpringBootServletInitializer
? AFAIK все это требуется для упаковки приложения Spring Boot в качестве WAR.