在服务启动完成时,如果需要执行一些特定的预加载任务,则可以通过实现 CommandLineRunner 接口来实现。
实现
@Component public class Started implements CommandLineRunner{ private static final Logger LOGGER = LoggerFactory.getLogger(Started.class); @Override public void run(String... strings) throws Exception { LOGGER.info("App Starting ... "); LOGGER.info("------------------------------------------------------------------------------"); LOGGER.info("| | |"); LOGGER.info("| --====|====-- |"); LOGGER.info("| | |"); LOGGER.info("| |"); LOGGER.info("| .-'''''-. |"); LOGGER.info("| .'_________'. |"); LOGGER.info("| /_/_|__|__|_\_\ |"); LOGGER.info("| ;'-._ _.-'; |"); LOGGER.info("| ,--------------------| `-. .-' |--------------------, |"); LOGGER.info("| ``''--..__ ___ ; ' ; ___ __..--''`` |"); LOGGER.info("| `'-// \\.._\ /_..// \\-'` |"); LOGGER.info("| \\_// '._ _.' \\_// |"); LOGGER.info("| `-` ``---`` `-` |"); LOGGER.info("------------------------------------------------------------------------------"); } }
效果:
如上,在应用中,可以通过加入明显日志的形式,提示是否发布成功。
可以看到,其输出在 StartupInfoLogger 之前。
优先级
如果存在多个 CommandLineRunner 实现类时,可以通过 @Order 来规定它们的加载顺序,如下所示:
@Component @Order(1) public class Started implements CommandLineRunner{ ... }
其中注解的 value 指运行的优先级,越小则越优先。