[英]How does a Spring Boot console based application work?
If I am developing a rather simple Spring Boot console-based application, I am unsure about the placement of the main execution code.如果我正在开发一个相当简单的基于 Spring Boot 控制台的应用程序,我不确定主要执行代码的位置。 Should I place it in the public static void main(String[] args)
method, or have the main application class implement the CommandLineRunner
interface and place the code in the run(String... args)
method?我应该将它放在public static void main(String[] args)
方法中,还是让主应用程序类实现CommandLineRunner
接口并将代码放在run(String... args)
方法中?
I will use an example as the context.我将使用一个例子作为上下文。 Say I have the following [rudimentary] application ( coded to interfaces, Spring style ):假设我有以下 [基本] 应用程序(编码为接口,Spring 风格):
Application.java应用程序.java
public class Application {
@Autowired
private GreeterService greeterService;
public static void main(String[] args) {
// ******
// *** Where do I place the following line of code
// *** in a Spring Boot version of this application?
// ******
System.out.println(greeterService.greet(args));
}
}
GreeterService.java (interface) GreeterService.java (接口)
public interface GreeterService {
String greet(String[] tokens);
}
GreeterServiceImpl.java (implementation class) GreeterServiceImpl.java (实现类)
@Service
public class GreeterServiceImpl implements GreeterService {
public String greet(String[] tokens) {
String defaultMessage = "hello world";
if (args == null || args.length == 0) {
return defaultMessage;
}
StringBuilder message = new StringBuilder();
for (String token : tokens) {
if (token == null) continue;
message.append(token).append('-');
}
return message.length() > 0 ? message.toString() : defaultMessage;
}
}
The equivalent Spring Boot version of Application.java
would be something along the lines: GreeterServiceImpl.java (implementation class) Application.java
的等效 Spring Boot 版本是这样的: GreeterServiceImpl.java (实现类)
@EnableAutoConfiguration
public class Application
// *** Should I bother to implement this interface for this simple app?
implements CommandLineRunner {
@Autowired
private GreeterService greeterService;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println(greeterService.greet(args)); // here?
}
// Only if I implement the CommandLineRunner interface...
public void run(String... args) throws Exception {
System.out.println(greeterService.greet(args)); // or here?
}
}
You should have a standard loader:你应该有一个标准的加载器:
@SpringBootApplication
public class MyDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MyDemoApplication.class, args);
}
}
and implement a CommandLineRunner
interface with @Component
annotation并使用@Component
注释实现CommandLineRunner
接口
@Component
public class MyRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
}
}
@EnableAutoConfiguration
will do the usual SpringBoot magic. @EnableAutoConfiguration
将执行通常的 SpringBoot 魔法。
UPDATE:更新:
As @jeton suggests the latest Springboot implements a straight:正如@jeton 所建议的,最新的 Springboot 实现了一个直接的:
spring.main.web-environment=false
spring.main.banner-mode=off
See docs at 72.2请参阅72.2 处的文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.