云朵偷喝我酒啊 2022-08-13 15:03 采纳率: 62.5%
浏览 182
已结题

@Autowired注解导入对象实例时出现null的情况

sysParamService.getParam("FACILITY_ID");报null异常,sysParamService为空


public class SchedulingRunnable implements Runnable {

    @Autowired
    private JpaRepository jpaRepository;

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired
    private SysParamService sysParamService;

    private ReeferTimerSet cron;

    public SchedulingRunnable(ReeferTimerSet cron) {
        this.cron = cron;
    }

    @Override
    public void run() {

        //执行任务
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");//定义格式,不显示毫秒

        Timestamp now = new Timestamp(System.currentTimeMillis());//获取系统当前时间
        String facilityId=sysParamService.getParam("FACILITY_ID");
        String str = df.format(now);
        String sql = "SELECT unitNo,unitVisitId" +
                "        FROM YardUnit " +
                "        WHERE isReefer = '1'";
        List<YardUnit> list = jpaRepository.findListByJpql(sql, null);
        String instertSql = "insert into REEFER_INSPECT_COMMAND (" +
                "INSPECT_COMMAND_ID, " +
                "TIMER, " +
                "INSPECT_STATE, " +
                "UNIT_VISIT_ID, " +
                "UNIT_NO, " +
                "NOTES, " +
                "FACILITY_ID," +
                "CREATOR, " +
                "CREATED_ON, " +
                "CHANGER, " +
                "CHANGED_ON)" +
                "Values(sys_guid(),?,'PLAN',?,?,'',?,'AUTO',?,'AUTO',?)";
        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                YardUnit yardUnit = list.get(i);
                ps.setString(1, str);
                ps.setString(2, yardUnit.getUnitVisitId());
                ps.setString(3, yardUnit.getUnitNo());
                ps.setString(4, facilityId);
                ps.setTimestamp(5, now);
                ps.setTimestamp(6, now);
            }

            @Override
            public int getBatchSize() {
                return list.size();
            }
        });
        System.out.println("***********");
        System.out.println("执行完成");
        System.out.println("执行完成");
        System.out.println("***********");


    }
}
  • 写回答

8条回答 默认 最新

  • carl-zhao 博客专家认证 2022-08-15 10:37
    关注

    原因分析

    1. 从 SchedulingRunnable 这个类上面没有添加 Spring Bean 注解,你这个对象其实是没有纳入 Spring Bean 的管理
    2. 当你试图当你在 SchedulingRunnable 上面添加了 Spring Bean 注解的时候报了 Consider defining a bean of type 'net.huadong.citos.bom.server.scheduled.entity.ReeferTimerSet' in your configuration. 这个错误,这个原因是因为 Spring 在创建 bean 的时候,因为你没有定义无参构建器,只定义了 ReeferTimerSet 这个参数的构建器。而且你并没有定义 ReeferTimerSet 这个类型的 bean 在Spring 当中,所以报了以上报错。
    3. SchedulingRunnable 这个类其实是实现了 Runnable 接口的,对于线程这种消耗资源的操作,我猜测你应该使用了线程池这种技术。
    4. 综上可得,你的 SchedulingRunnable 这个对象并没有纳入 Spring 容器的管理,但是你使用了 Spring 的依赖注入(@Autowired).这本身就不可能。

    解决方案

    1. 构建 SchedulingRunnable 这个对象你可以使用构建器方式来传递上面三个使用 Spring @Autowired 来构建对象。如下所示:
    public class SchedulingRunnable implements Runnable {
     
        private JpaRepository jpaRepository;
     
        private JdbcTemplate jdbcTemplate;
     
        private SysParamService sysParamService;
     
        private ReeferTimerSet cron;
     
        public SchedulingRunnable(JpaRepository jpaRepository, JdbcTemplate jdbcTemplate, 
                                    SysParamService sysParamService, ReeferTimerSet cron) {
            this.jpaRepository = jpaRepository;
            this.jdbcTemplate = jdbcTemplate;
            this.sysParamService = sysParamService;
            this.cron = cron;
        }
    
    
        ...
        
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(7条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月15日
  • 已采纳回答 8月15日
  • 创建了问题 8月13日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境