首页 > 解决方案 > 为什么在春季调度程序中更新时更改未反映在数据库中?

问题描述

我的更改未反映在数据库中。我正在尝试对此 TasksScheduler 类进行更改。但没有任何变化反映在数据库中。如果我做:

System.out.println(bannerRepo.save(banner))

然后它显示输出。但是没有发生数据库更改。但是,如果我尝试保存或删除外部调度程序类,则会发生更改。我的 TasksScheduler 类:

package com.shopKpr.apps.medicine.repositories.admin.jpa;

import com.shopKpr.apps.medicine.model.admin.Banner;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

@Component
@Slf4j
@EnableScheduling
public class TasksScheduler {

    private final BannerRepo bannerRepo;

    public TasksScheduler( BannerRepo bannerRepo ) {
        this.bannerRepo = bannerRepo;
    }

    //sec, min, hour
    @Scheduled(cron = "0 14 3 * * *", zone = "Asia/Dacca") //Schedule at night 1 AM
    public void schedulerTask() {
        updateOfferState();
    }


    @Transactional
    void updateOfferState() {

        java.sql.Date today = new java.sql.Date(new java.util.Date().getTime());

        List<Banner> bannerList = bannerRepo.findAll();

        bannerList.parallelStream()
                .filter(banner -> today.after(banner.getBannerStartDate()))
                .forEach(banner -> {
                    banner.setEnabled(true);
                    bannerRepo.save(banner);
                });

        List<Banner> deletableBanners = bannerList.stream()
                .filter(banner -> today.after(banner.getBannerEndDate()))
                .collect(Collectors.toList());

        deletableBanners.forEach(banner -> bannerRepo.deleteById(banner.getBannerId()));


    }
}

我的横幅类:

package com.shopKpr.apps.medicine.model.admin;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Table
@Entity
public class Banner implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long bannerId;
    @Column(nullable = false)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MMM dd, yyyy", timezone = "Asia/Dhaka")
    private Date bannerStartDate;
    @Column(nullable = false)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MMM dd, yyyy", timezone = "Asia/Dhaka")
    private Date bannerEndDate;
    @Column(nullable = false, columnDefinition = "TEXT")
    private String bannerImage;
    @Column(nullable = false)
    private boolean enabled;
    private String hyperLinkId;
}

横幅存储库:

package com.shopKpr.apps.medicine.repositories.admin.jpa;

import com.shopKpr.apps.medicine.model.admin.Banner;
import org.springframework.data.jpa.repository.JpaRepository;

public interface BannerRepo extends JpaRepository<Banner, Long> {

}

标签: javapostgresqlspring-bootspring-data-jpaspring-scheduled

解决方案


推荐阅读