我用spring boot来做样品服务。当我运行它时,它工作正常 命令行中的“java -jar DemoLibrary.war”命令。我得到了“图书馆应用程序已启动”的正确信息。
我在Appplication.java文件中确实如下;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Application.class, args);
LogService.info(Application.class.getName(), "Library Application Has Started.");
}
}
当我在外部tomcat中运行它时,它启动正常并且工作正常。但我不会看到相同的消息,因为它不再使用该主要方法。我只看到spring应用程序启动消息。
有没有办法可以改变那条消息并按照我的意愿给出?
答案 0 :(得分:5)
添加ApplicationListener<ContextRefreshedEvent>
类型的类并将其注册为@Bean
。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ApplicationListener<ContextRefreshedEvent> startupLoggingListener() {
return new ApplicationListener<ContextRefreshedEvent>() {
public void onApplicationEvent(ContextRefreshedEvent event) {
LogService.info(Application.class.getName(), "Library Application Has Started.");
}
};
}
}
这样的事情应该在两种情况下都能正常工作而不会重复代码(尽管代码并不复杂但仍然如此)。
答案 1 :(得分:1)
您可以使用onStartup
,例如:
@Override
public void onStartup(final ServletContext servletContext) throws ServletException {
LogService.info(Application.class.getName(), "Library Application Has Started.");
super.onStartup(servletContext);
}