У меня есть простое приложение загрузки Spring, которое получает сообщения из очереди JMS и сохраняет некоторые данные в файле журнала, но не нуждается в веб-сервере. Есть ли способ запуска Spring Загрузка без веб-сервера?
Spring Загрузка без веб-сервера
Ответ 1
Spring boot не будет включать встроенный tomcat, если у вас нет зависимостей Tomcat от пути к классам.
Вы можете просмотреть этот факт самостоятельно в классе EmbeddedServletContainerAutoConfiguration
, источник которого вы можете найти здесь.
Мяч кода - это использование аннотации @ConditionalOnClass
для класса EmbeddedTomcat
Кроме того, для получения дополнительной информации ознакомьтесь с этим и этим руководством и этой части документации
Ответ 2
если вы хотите запустить загрузку spring без контейнера сервлета, но с одним из путей к классам (например, для тестов), используйте следующее, как описано в spring загрузочная документация:
@Configuration
@EnableAutoConfiguration
public class MyClass{
public static void main(String[] args) throws JAXBException {
SpringApplication app = new SpringApplication(MyClass.class);
app.setWebEnvironment(false); //<<<<<<<<<
ConfigurableApplicationContext ctx = app.run(args);
}
}
также, я просто наткнулся на это свойство:
spring.main.web-environment=false
Ответ 3
Spring Boot 2.x
-
spring.main.web-application-type=NONE # REACTIVE, SERVLET
-
@SpringBootApplication public class MyApplication { public static void main(String[] args) { new SpringApplicationBuilder(MyApplication.class) .web(WebApplicationType.NONE) // .REACTIVE, .SERVLET .run(args); } }
Где WebApplicationType:
NONE
- приложение не должно запускаться как веб-приложение и не должно запускать встроенный веб-сервер.REACTIVE
- Приложение должно работать как реактивное веб-приложение и запускать встроенный реактивный веб-сервер.SERVLET
- приложение должно работать как веб-приложение на основе сервлета и должно запускать встроенный веб-сервер сервлета.
Ответ 4
Вы можете создать что-то вроде этого:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(false).run(args);
}
}
и
@Component
public class CommandLiner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// Put your logic here
}
}
Зависимость все еще существует, но не используется.
Ответ 5
Самое простое решение. в вашем файле application.properties. добавьте следующее свойство, как указано в предыдущем ответе:
spring.main.web-среда = ложь
Для версии 2.0.0 загрузчика Spring используйте следующее свойство:
не spring.main.web-приложений типа = нет
Для документации по всем свойствам используйте эту ссылку: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
Ответ 6
Если вы хотите использовать один из шаблонов "Начало работы" с сайта spring.io, но вам не нужен какой-либо материал, связанный с сервлетом, который поставляется со значением "по умолчанию" ( "gs/spring -boot" ), вы можете попробовать шаблон scheduling-tasks (чей pom * содержит spring -boot-starter и т.д.):
https://spring.io/guides/gs/scheduling-tasks/
Это дает вам Spring Boot, и приложение работает как автономное (сервлеты или spring -webmvc и т.д. не включены в pom). Это то, что вы хотели (хотя вам может понадобиться добавить некоторые JMS-специфические вещи, как уже указывает кто-то другой).
[* Я использую Maven, но предположим, что сборка Gradle будет работать аналогично].
Ответ 7
Если вам требуется веб-функциональность в вашем приложении (например, org.springframework.web.client.RestTemplate
для вызовов REST), но вы не хотите запускать сервер TOMCAT, просто исключите его в POM:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
Ответ 8
Для Spring boot v2.1.3.RELEASE просто добавьте следующие свойства в application.propertes:
spring.main.web-application-type=none
Ответ 9
-
Через программу:
ConfigurableApplicationContext ctx = new SpringApplicationBuilder(YourApplicationMain.class) .web(WebApplicationType.NONE) .run(args);
-
Через файл application.properties:
spring.main.web-environment=false
-
Через файл application.yml:
spring: main: web-environment:false
Ответ 10
Удаление следующей зависимости от вашего pom файла будет работать для меня
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>