动态配置Spring批处理执行时间和通过数据库配置的参数得到的参数

问题描述 投票:0回答:1

我是春季新手用户,请帮助我。这是我的要求:

  1. 我已经完成了多个不同名称的春季批处理工作。我想使用不同的作业参数执行这些作业,并且希望可以在数据库中动态配置这些参数,以便可以使用不同的作业名称和参数添加新的作业执行。
  2. 此外,我想安排在不同时间执行作业,并且还可以配置crontab表达式。

也许数据库结构像:

  • id
  • 任务名称
  • spring_batch_job_name
  • cron_expression

想知道是否有人可以指导我。非常感谢!

spring-batch quartz-scheduler
1个回答
0
投票

您可以使用创建一些Util类(在@PostConstruct上)来从DB加载您的作业配置。

例如:

     @Entity
        public class Configuration{

            @Id 
            private long id;

            private String field;


            private String value;
        // getter and setter

        }


    @Component
    public interface ConfigurationRepo extends JpaRepository<Configuration, Long> {

    }



  public final class ConfigurationUtil {
        private ConfigurationUtil() {

        }

        private static List<Configuration> defaultConfiguration;

        /**
         * @return the defaultConfiguration
         */
        public static List<Configuration> getDefaultConfiguration() {
        return defaultConfiguration;
        }

        /**
         * @param defaultConfiguration the defaultConfiguration to set
         */
        public static void setDefaultConfiguration(List<Configuration> defaultConfiguration) {
        ConfigurationUtil.defaultConfiguration = defaultConfiguration;
        }

        public static String getValueByField(String field) {
        return defaultConfiguration.stream()
            .filter(s -> s.getField()
                .equalsIgnoreCase(field))
            .findFirst()
            .get()
            .getValue();
        }



    }

    @Component
    public class ConfigurationContextInitializer {

        @Autowired
        ConfigurationRepo configurationRepo;



        @PostConstruct
        public void init() {
        ConfigurationUtil.setDefaultConfiguration(configurationRepo.findAll()); 


        }
    }

//To access DB value
ConfigurationUtil.getValueByField("JOB_NAME"); // depends on your DB key
© www.soinside.com 2019 - 2024. All rights reserved.