使用 Spring Boot 服务作为批处理作业中的依赖项的空指针异常
Posted
技术标签:
【中文标题】使用 Spring Boot 服务作为批处理作业中的依赖项的空指针异常【英文标题】:Null Pointer Exception using Spring Boot service as a dependency in a batch job 【发布时间】:2021-09-28 08:27:20 【问题描述】:我正在重新使用一个旧的、独立的、基于 AWT 的 Java 类,它可以备份和恢复 mysql 数据库。
它需要做的一件事是解密从属性文件中读取的密码。
此逻辑包含在 Spring Boot 应用程序中。
我在独立类中实例化加密服务和解密器,如下所示:
DecryptionService decryptionService = new DecryptionService();
decryptionService 使用@AutoWired 注解创建解密器:
@Autowired
private IRSADecryptor decryptor;
现在,我在与服务相同的项目中运行 Eclipse。
当我尝试如下解密密码时:
String decryptedPassword = decryptionService.decryptTextUsingProductKeys("abc");
调试器显示decryptionService为空。
这是堆栈跟踪的前几行:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.ap.services.decryption.service.DecryptionService.decryptTextUsingProductKeys(DecryptionService.java:21)
at com.ilcore.util.SosaMaintenanceJFrame.jButtonDatabaseBackupActionPerformed(SosaMaintenanceJFrame.java:529)
at com.ilcore.util.SosaMaintenanceJFrame$6.actionPerformed(SosaMaintenanceJFrame.java:207)
我很确定我不会以正确的方式进行此操作,但我不想导入解密逻辑。我有哪些选择?
【问题讨论】:
您是否设法解决了依赖注入问题? 是的,实际上我需要实例化的是解密服务中的解密器。 如果我的回答对你有帮助,请采纳为正确答案,谢谢! 【参考方案1】:@Autowired
注释不会创建您的解密器对象,但会尝试定位该类型的Bean
并将其注入您的DecryptionService
。这意味着您不应该使用构造函数来实例化您的DecryptionService
。 DecryptionService
应定义为 @Service
并注入另一个组件(@Component
、@Controller
等),您将在其中调用特定方法来解密数据。
【讨论】:
谢谢。对于历史,我确实实例化了它,但这有帮助。以上是关于使用 Spring Boot 服务作为批处理作业中的依赖项的空指针异常的主要内容,如果未能解决你的问题,请参考以下文章
如果从计划的作业中调用,Spring Boot 存储库不会保存到数据库
在 Spring Batch 中以最后处理的记录作为 jobParameter 启动一个新的作业实例?