spring boot 中运用quartz开发定时任务

1、新建项目


spring boot 中运用quartz开发定时任务

2、添加依赖(按需要连接的数据库驱动,添加依赖)


spring boot 中运用quartz开发定时任务


3、添加jdbc数据库配置文件:src\main\resource\application.yml

spring:
  datasource:
    jdbc-url: jdbc:oracle:thin:@//IP地址:端口/SERVICENAME
    username: 用户名
    password: 密码
    driverClassName: oracle.jdbc.OracleDriver

  datasourcepg:
    jdbc-url: jdbc:postgresql://IP地址:端口/数据库名称
    username: 用户名
    password: 密码
    driverClassName: org.postgresql.Driver

  datasourcemysql:
    jdbc-url: jdbc:mysql://IP地址:端口/数据库名称?useUnicode=true&characterEncoding=GBK
    username: 用户名
    password: 密码
    driverClassName: com.mysql.jdbc.Driver

4、添加数据源配置类 src\main\DataSourceConfig.java

该类关联 application.yml中的数据库参数

@Configuration
public class DataSourceConfig {
    @Bean("dataSourceOracle")
    @ConfigurationProperties("spring.datasource")
    public DataSource mDataSourceOracle(){
        return DataSourceBuilder.create().build();
    }

    @Bean("dataSourcePg")
    @ConfigurationProperties("spring.datasourcepg")
    public DataSource mDataSourcePg(){
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean("jdbcTemplateOracle")
    public JdbcTemplate mJdbcTemplateOracle(@Qualifier("dataSourceOracle") DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }

    @Bean("jdbcTemplatePg")
    public JdbcTemplate mJdbcTemplatePg(@Qualifier("dataSourcePg") DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
}

5、添加数据操作逻辑类 src\main\CollectItem.java

getData 实现要操作的数据;getCron 获取CRON格式指定的执行时间。

@Service
public class CollectItem {
    @Autowired
    @Qualifier("jdbcTemplateOracle")
    JdbcTemplate jdbcTemplate;

    @Autowired
    @Qualifier("jdbcTemplatePg")
    JdbcTemplate jdbcTemplatePg;

    public void getData() throws InterruptedException {

        int i;
        List rs0 = jdbcTemplatePg.queryForList("select * from XXXXXXXX");
        Map m0= (Map) rs0.get(0);

        Map m1;
        rs0 = jdbcTemplatePg.queryForList("select * from XXXXXX");
        for(int j=0;j -1) {
                    SqlRowSet rs1 = jdbcTemplate.queryForRowSet(m1.get("sql1").toString());
                    while (rs1.next()) {
                        i = jdbcTemplatePg.update(m1.get("sql2").toString(), rs1.getString(1), rs1.getString(2), rs1.getDate(3), rs1.getDate(4), rs1.getInt(5));
                    }
                }
                i = jdbcTemplatePg.update(m0.get("sql2").toString(), proj_id);
            }
            i = jdbcTemplatePg.update(m1.get("sql3").toString());
            i = jdbcTemplatePg.update(m0.get("sql5").toString());
        }
        i = jdbcTemplatePg.update(m0.get("sql3").toString());
        i = jdbcTemplatePg.update(m0.get("sql4").toString());
    }

    public String getCron() throws InterruptedException {
        SqlRowSet rs0 = jdbcTemplatePg.queryForRowSet("select * from XXXXXXXXXXX");
        String s="";
        if (rs0.next()) {
            s = rs0.getString("sql5");
        }
        return s;
    }

}

6、添加 定时任务配置类 src\main\AutoJob.java

生成 CollectItem 的实例并调用 getData 进行数据处理。

public class AutoJob extends QuartzJobBean {
    @Autowired
    CollectItem collectItem;

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        try {
            collectItem.getData();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

7、添加定时任务配置类 src\main\QuartzConfig.java

指定执行时间,并指定调用 AutoJob

@Configuration
public class QuartzConfig {
    @Bean
    public JobDetail printTimeJobDetail(){
        return JobBuilder.newJob(AutoJob.class)
                .withIdentity("AutoJob")
                .usingJobData("msg", "AutoJob Quartz")//关联键值对
                .storeDurably()
                .build();
    }

    @Autowired
    CollectItem collectItem;

    @Bean
    public Trigger printTimeJobTrigger() {
        String s="";
        try {
            s=collectItem.getCron();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //s = "0 39 14 * * ?"; 每天的14:39:00 执行
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(s);
        return TriggerBuilder.newTrigger()
                .forJob(printTimeJobDetail())
                .withIdentity("quartzTaskService")
                .withSchedule(cronScheduleBuilder)
                .build();
    }

}
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章