尝试设置一个简单的Web应用程序调度程序。这是我的配置:
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>scheduler</artifactId>
<version>0.1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>1.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>1.1.7.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<properties>
<start-class>hello.Application</start-class>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>hello.Application</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>http://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>http://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
我的课程如下所示
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application implements WebApplicationInitializer {
public static void main(String[] args) throws Exception {
SpringApplication.run(ScheduledTasks.class);
}
public void onStartup(ServletContext arg0) throws ServletException {
SpringApplication.run(ScheduledTasks.class);
}
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.setPort(8081);
factory.setSessionTimeout(50, TimeUnit.MINUTES);
return factory;
}
}
@EnableScheduling
public class ScheduledTasks {
@Scheduled(fixedRate = 500)
public void reportCurrentTime() {
System.out.println("Testing successful ");
}
}
但是当我试图启动容器时我看到了异常
ERROR 2592 --- [ost-startStop-1] o.s.boot.SpringApplication : Application startup failed
...
...
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:174)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:147)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:121)
... 20 more
我尝试遵循Spring Boot测试:由于缺少EmbeddedServletContainerFactorybean,无法启动EmbeddedWebApplicationContext,但没有成功。
谢谢你的建议
使用此依赖项修复了我的问题:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</dependency>
此外,安迪·威尔金森指出,这在OP的案件中是正确的,但在我的案件中不是
我看到我的Spring靴启动器公猫和
<scope>provided</scope>
(因为我添加了一个servlet初始化器来运行它在野飞)我注释了这一点,并删除了从sping-boo-starter-tomcat依赖中提供的,它开始工作。在这里加上,以防其他人也有同样的问题
您只运行了ScheduledTasks
:
SpringApplication.run(ScheduledTasks.class);
当您应该运行:
SpringApplication.run(Application.class);
运行ScheduledTasks意味着Spring Boot不知道应用程序中的配置。重要的是,这意味着它看不到
@EnableAutoConfiguration
,而这正是打开自动配置的原因,因为类路径上有Tomcat,所以创建了嵌入式Tomcat实例。
我将通过将
@EnableScheduling
注释从ScheduledTasks
移动到Application
,运行应用程序来解决这个问题。类而不是
计划任务。类
,并使用@组件
注释计划任务
:
pplication.class:
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableScheduling
public class Application implements WebApplicationInitializer {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class);
}
// …
}
计划任务。类别:
@Component
public class ScheduledTasks {
@Scheduled(fixedRate = 500)
public void reportCurrentTime() {
System.out.println("Testing successful ");
}
}
移动
注释@EnableScheduling
意味着它在它所属的配置类上。运行pplication.class意味着Spring Boot可以看到其所有配置,包括启用组件扫描和启用自动配置。用@Component执行任务
意味着它是通过组件扫描找到的,并且检测到它的@计划的
方法。
这应该会让事情开始运转起来。我还想纠正您的pom,这样您就不会混合使用Spring Boot的版本(目前有1.1.6和1.1.7版本),并摆脱
EmbeddedServletContainerFactory
bean,而使用应用程序配置端口和会话超时。改为在
src/main/resources
中的属性:
application.properties:
server.port = 8081
server.session-timeout = 3000
我正在尝试启动一个简单的spring应用程序 我有主管道。java文件就在这里: 这是pom。xml: 最后一个错误是: 据我所知我少了一颗豆子?然而,看起来好像我有罐子春豆。
Maven build成功了,但当我尝试运行它时失败了: 我有带 一切似乎都准备就绪。发生了什么? pom.xml 更新1 使用IntelliJ构建jar工件时也是如此。 更新2 好的,我设法运行了它,但现在我有: 更新3 通过添加到应用程序使其正常工作。爪哇:
我有一个新的springboot应用程序,我试图开始。 我收到的错误是 src/main/Java/bubble shadow/root controller . Java src/test/java/test/RootControllerTest.java
我已经编写了一个使用Spring Boot的Spring批处理应用程序。当我试图在本地系统上使用命令行和类路径运行该应用程序时,它运行良好。然而,当我试图在linux服务器上运行它时,它给我以下异常 下面是我运行它的方式:
问题内容: 我已经使用Spring Boot编写了Spring Batch应用程序。当我尝试在本地系统上使用命令行和类路径运行该应用程序时,它运行良好。但是,当我尝试在linux服务器上运行它时,出现以下异常 下面是我的运行方式: 问题答案: 可能你缺少Spring Boot入门类。
我检查了它引用的目录,有一个catalina.sh文件,但没有。bat文件。有谁知道获取这个文件的提示或者如何让NetBeans运行。sh文件吗?