SpringBoot应用启动时自动执行定制初始化
在Spring Boot项目中,为了确保项目启动时自动执行一段特定的逻辑,可以利用Spring框架提供的ApplicationListener接口。这个接口允许你在Spring容器完成初始化后,即应用程序上下文刷新完毕时自动触发一个自定义的方法。以下是如何在Spring Boot项目中实现这一功能的详细步骤: 1. 实现`ApplicationListener`接口: 首先,创建一个名为`ApplicationStartup`的类,它实现了`ApplicationListener<ContextRefreshedEvent>`接口。这表示你需要监听`ContextRefreshedEvent`事件,这是Spring在应用程序上下文完全初始化后的信号。 ```java @Service // 注册该类为Spring管理的服务,确保在Linux环境下也能正常运行 public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> { private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationStartup.class); private String busId; // ...其他方法... } ``` 2. 添加`@Service`注解: 注册为`@Service`是为了确保该类及其方法可以在生产环境中被Spring管理。如果不添加此注解,在开发环境下可能不会出现问题,但在Linux等服务器环境下,没有这个注解可能会导致类无法正确加载和初始化。 3. `onApplicationEvent`方法: 当`ContextRefreshedEvent`发生时,`onApplicationEvent`方法会被调用。在这个方法里,你可以执行你的自定义逻辑,比如获取配置信息或者初始化数据。在这个例子中,代码获取了`WxConfigService`和`Environment` bean,并且根据`busId`查询所有企业的文件。 ```java @Override public void onApplicationEvent(ContextRefreshedEvent event) { WxConfigService configService = (WxConfigService) event.getApplicationContext().getBean(WxConfigService.class); Environment bean = event.getApplicationContext().getBean(Environment.class); busId = bean.getProperty("wxAuth.busId"); QueryWxConfigListInput input = new QueryWxConfigListInput(); input.setBusId(busId); input.setRows(1000); QueryWxConfigListOutput queryWxConfigListOutput = configService.queryAll(input); // 日志记录查询结果 LOGGER.info("查询所有企业文件结果:"); LOGGER.info("..."); } ``` 通过实现`ApplicationListener`接口并在其中重写`onApplicationEvent`方法,我们可以确保Spring Boot项目启动时自动执行预先设置好的自定义逻辑。这种方式非常实用,特别是在处理初始化数据、配置检查或与外部系统交互等场景中。记得在关键代码块添加日志以便于调试和监控。
如果不加 @Service 在开发环境是可以的。在linux就不行了
public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> {
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationStartup.class);
private String busId;
@Override
@Service
public void onApplicationEvent(ContextRefreshedEvent event) {
LOGGER.info("==============================需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法=======================================================");
try {
WxConfigService configService = (WxConfigService)event.getApplicationContext().getBean(WxConfigService.class);
Environment bean = event.getApplicationContext().getBean(Environment.class);
busId = bean.getProperty("wxAuth.busId");
//查询所有企业的文件
QueryWxConfigListInput input = new QueryWxConfigListInput();
input.setBusId(busId);
input.setRows(1000);
QueryWxConfigListOutput queryWxConfigListOutput = configService.queryAll(input);
LOGGER.info("=====================================================================================");
LOGGER.info("=================================启动 listener"+busId+"================================");
LOGGER.info("=====================================================================================");
if(queryWxConfigListOutput != null && queryWxConfigListOutput.getRows() != null && queryWxConfigListOutput.getRows().size()>0){
LOGGER.info("需要下载的数量{}",queryWxConfigListOutput.getRows().size());
WxConfigInput inputDto = null;
for(WxConfigOutput config : queryWxConfigListOutput.getRows()){
//新增
if(StringUtil.isNotNullOrEmpty(config.getFileName())&& StringUtil.isNotNullOrEmpty(config.getFileUrl())){
inputDto = new WxConfigInput();
下载后可阅读完整内容,剩余2页未读,立即下载
- 粉丝: 16
- 资源: 41
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展