java - SpringBoot CommandLineRunner run() 方法未被调用
问题描述
我正在学习SpringBoot。我的(微不足道的)问题是我无法从 SpringBoot 调用的 CommandLineRunner 接口中获取 run() 方法。我正在使用 Java 8、Eclipse Oxygen、Maven,并且我正在将我的项目作为“Spring Boot App”运行。代码是:
package com.clarivate.dataviewer;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DvMain implements CommandLineRunner{
static Logger logger = LogManager.getRootLogger();
public static void main(String[] args) {
logger.debug("DS1A in main()");
//SpringApplication.run(DvMain.class, args);
SpringApplication app = new SpringApplication(DvMain.class);
//ConfigurableApplicationContext app = SpringApplication.run(DvMain.class, args);
logger.debug("DS1B in main()");
app.run(args);
}
@Override
public void run(String... args) throws Exception {
// This does not get called
logger.debug("DS4 this line is never printed");
}
}
覆盖的 run() 方法不会被调用。我尝试创建一个单独的类来实现 CommandLineRunner 但同样的问题。控制台跟踪是:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/44/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/44/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.10.0/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
12:58:42.225 [main] DEBUG - DS1A in main()
12:58:42.289 [main] DEBUG - DS1B in main()
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.2.RELEASE)
2018-06-20 12:58:42.614 INFO 16924 --- [ main] com.clarivate.dataviewer.DvMain : Starting DvMain on 44-TPD-A with PID 16924 (C:\workspace_oxyegen\dataviewer\target\classes started by 44 in C:\workspace_oxyegen\dataviewer)
2018-06-20 12:58:42.615 INFO 16924 --- [ main] com.clarivate.dataviewer.DvMain : No active profile set, falling back to default profiles: default
2018-06-20 12:58:42.655 INFO 16924 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6b4a4e18: startup date [Wed Jun 20 12:58:42 BST 2018]; root of context hierarchy
2018-06-20 12:58:43.266 INFO 16924 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-06-20 12:58:43.279 INFO 16924 --- [ main] com.clarivate.dataviewer.DvMain : Started DvMain in 0.988 seconds (JVM running for 1.684)
2018-06-20 12:58:43.294 INFO 16924 --- [ Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6b4a4e18: startup date [Wed Jun 20 12:58:42 BST 2018]; root of context hierarchy
2018-06-20 12:58:43.296 INFO 16924 --- [ Thread-2] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
我确定我犯了一个简单的错误,但我就是看不到它。任何帮助表示赞赏。
解决方案
首先,调用来自您的 run 方法。但不记录任何内容,因为您的记录器存在一些问题。您可以使用System.out.println(...)
来确认这一点。
如下更改您的 Logger 声明。
private static final Logger logger = LoggerFactory.getLogger(DvMain.class);
您没有使用正确的库。使用来自slf4j而不是log4j的 Logger
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
推荐阅读
- android - 如何从jetpack compose中的惰性列中删除项目
- python - 如果在数据帧的另一行中满足特定条件,则在数据帧中追加行
- java - Java Stream 减少泛型类型的 ArrayList
- javascript - 更改 Javascript 以兼容 Rails Turbolinks
- android - Android ANR,同时在应用更新时解析文件提供程序的路径策略
- java - Wicket:高亮数据视图中的所有行
- kedro - 从数据集 SQLQueryDataSet 加载数据时失败
- java - Android 中的 JSONArray 到 ArrayList
- python - 列表项 (Kivy & KivyMD) 循环值的回调
- javascript - 在 Puppeteer 的评估函数中使用 setInterval 的异步函数无法正确执行