@Component
public class CommandLineAppStartupRunner implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(CommandLineAppStartupRunner.class);
@Override
public void run(String...args) throws Exception {
logger.info("Application started with command-line arguments: {} . \n To kill this application, press Ctrl + C.", Arrays.toString(args));
}
}
73
尝试这个,它将在应用程序上下文完全启动时运行您的代码 .
@Component
public class OnStartServer implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent arg0) {
// EXECUTE YOUR CODE HERE
}
}
2
这很简单:
@EventListener(ApplicationReadyEvent.class)
public void doSomethingAfterStartup() {
System.out.println("hello world, I have just started up");
}
import org.springframework.boot.ApplicationRunner;
@Component
public class ServerInitializer implements ApplicationRunner {
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
//code goes here
}
}
11
只需为Spring启动应用程序实现CommandLineRunner . 你需要实现run方法,
public classs SpringBootApplication implements CommandLineRunner{
@Override
public void run(String... arg0) throws Exception {
// write your logic here
}
}
135
你试过ApplicationReadyEvent吗?
@Component
public class ApplicationStartup
implements ApplicationListener<ApplicationReadyEvent> {
/**
* This event is executed as late as conceivably possible to indicate that
* the application is ready to service requests.
*/
@Override
public void onApplicationEvent(final ApplicationReadyEvent event) {
// here your code ...
return;
}
}
@Configuration
public class ProjectConfiguration {
private static final Logger log =
LoggerFactory.getLogger(ProjectConfiguration.class);
@EventListener(ApplicationReadyEvent.class)
public void doSomethingAfterStartup() {
log.info("hello world, I have just started up");
}
}
26
为什么不创建一个在初始化时启动监视器的bean,例如:
@Component
public class Monitor {
@Autowired private SomeService service
@PostConstruct
public void init(){
// start your monitoring in here
}
}
在为bean完成任何自动装配之前,不会调用 init 方法 .
8
尝试:
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {
@SuppressWarnings("resource")
public static void main(final String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
context.getBean(Table.class).fillWithTestdata(); // <-- here
}
}
12 回答
在spring> 4.1中使用
SmartInitializingSingleton
bean作为替代方案,可以使用
@PostConstruct
实现CommandLineRunner
bean或使用@PostConstruct
注释bean方法 .为Dave Syer提供一个例子,它就像一个魅力:
尝试这个,它将在应用程序上下文完全启动时运行您的代码 .
这很简单:
测试版
1.5.1.RELEASE
您可以使用ApplicationRunner扩展类,重写
run()
方法并在那里添加代码 .只需为Spring启动应用程序实现CommandLineRunner . 你需要实现run方法,
你试过ApplicationReadyEvent吗?
代码自:http://blog.netgloo.com/2014/11/13/run-code-at-spring-boot-startup/
这就是documentation提到的启动事件:
ApplicationReadyEvent
仅在您要执行的任务不是正确的服务器操作要求时才有用 . 启动异步任务以监视某些更改是一个很好的例子 .但是,如果您的服务器处于'not ready'状态,直到任务完成,那么最好实现
SmartInitializingSingleton
,因为您将在REST端口打开并且服务器开放营业之前获得回调 .不要试图将
@PostConstruct
用于只应该发生过一次的任务 . 当你注意到它被多次调用时,你会得到一个粗鲁的惊喜......配 spring 配置:
为什么不创建一个在初始化时启动监视器的bean,例如:
在为bean完成任何自动装配之前,不会调用
init
方法 .尝试:
"Spring Boot"方式是使用
CommandLineRunner
. 只需添加那种类型的 beans 子就可以了 . 在Spring 4.1(Boot 1.2)中,还有一个SmartInitializingBean
,在所有内容初始化后都会收到回调 . 并且有SmartLifecycle
(从 Spring 季开始) .