使用Java应用运行后台进程

时间:2018-09-24 23:35:14

标签: java background-process

因此,我有这张地图,其中以雇员的名字及其凭证的金额为键和值。

现在,我希望在每个新月的第一天将特定的金额添加到值中。

我有一个可以做到这一点的有效代码,但是我正在寻找一种使它变得更好的方法

import java.time.LocalDateTime;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class VoucherManager {
    private static double newVoucher = 2500.00;
    private Map<String, Double> employeeVoucher = new TreeMap<>();
    private  LocalDateTime now = LocalDateTime.now();

    public static VoucherManager getInstance() {
        return new VoucherManager();
    }
    public void incrementVoucher() {
        employeeVoucher.put("Olatunji Oniyide", 200.00);
        employeeVoucher.put("Andrew Mbata", 500.00);
        employeeVoucher.put("Opeyemi Oniyide", 700.00);

        Set<Map.Entry<String, Double>> set = employeeVoucher.entrySet();
        int day = now.getDayOfMonth();
        if((day == 1) || (day == 2)) {
            for(Map.Entry<String, Double> map : set)
               System.out.println(map.getKey() + ":" + (map.getValue() + newVoucher));
        } else {
            throw new AssertionError();
        }
    }

    public static void main(String[] args) {
        VoucherManager voucher = VoucherManager.getInstance();
        voucher.incrementVoucher();
    }
    }

当我将系统上的当前日期更改为新月的第一天时,它可以正确地完成工作,否则就不能。

但这仅在用户在每月的第一天或第二天运行代码时才会发生。当用户在每月的第3或第4天运行代码时,会引发错误。

所以我想问问是否有一种方法可以让我的应用程序创建一个后台进程,即使没有使用该应用程序,该进程也会自动使用新数字更新值。

1 个答案:

答案 0 :(得分:0)

您可以通过几种不同的方式执行此操作:

  • 计算已过去的月数,然后将其乘以每月增量值。

  • 另一种选择是将值存储在轻量级数据库(例如H2sqlite)中,并使用计划的作业根据需要进行更新。