spring cloud task + spring batch+ spring boot 調(diào)度批處理應(yīng)用

1、spring boot啟動(dòng)類加注解@EnableTask 颠猴、 @EnableBatchProcessing洛巢。
2、基于注解@Configuration 的配置類中,定義Job和step援岩,二者需要加@Bean注解歼狼,注入到spring 的容器中
3、eclipse啟動(dòng)時(shí)享怀,在springboot主類啟動(dòng)參數(shù)中加 spring.batch.job.names=jobname 羽峰, spring.cloud.task.name=taskname。 其中添瓷,spring.batch.job.names為指定需要執(zhí)行的job梅屉,job在多次執(zhí)行過程中不變,spring.cloud.task.name為執(zhí)行本次任務(wù)的命名鳞贷,未配置可重復(fù)執(zhí)行屬性時(shí)坯汤,task命名不變時(shí),只允許執(zhí)行一次悄晃。多次執(zhí)行需要修改該屬性名玫霎。或者清理spring batch / spring cloud task提供的數(shù)據(jù)表妈橄,測試階段可進(jìn)行這種騷操作庶近,正式代碼需要參考官網(wǎng)文檔進(jìn)行實(shí)際的處理

mybatis + spring batch 鏈接數(shù)據(jù)庫配置,參考:mybatis-spring

springboot啟動(dòng)類 Application

@EnableBatchProcessing
@EnableTask
@SpringBootApplication
public class Application {
    public static void mian(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • @EnableBatchProcessing眷蚓,該注解在應(yīng)用中只需要出現(xiàn)一次鼻种,就能提供JobRepository開箱即用的功能。單獨(dú)使用該注解沙热,job的啟動(dòng)可通過restful接口調(diào)用方式啟動(dòng)job叉钥。或者命名行方式啟動(dòng)篙贸,具體使用參考spring batch官方文檔投队。
  • @EnableTask,該注解在應(yīng)用中只需要出現(xiàn)一次爵川,就能提供TaskRepository的功能敷鸦。
  • @EnableBatchProcessing、@EnableTask同時(shí)使用寝贡,job可通過任務(wù)調(diào)度方式啟動(dòng)扒披。依賴spring cloud task的調(diào)度,指定job執(zhí)行圃泡。

基于Configuration的配置類TestConfiguration

定義了job=testjob碟案。

@Lazy
@Configuration
public class TestConfiguration {
    
    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    
    @Autowired
    private StepBuildFactory stepBuildFactory;
    
    @Autowired
    private SqlSessionFactory sqlSessionFactory


    //@Bean注解不能少,需要在spring啟動(dòng)時(shí)颇蜡,將構(gòu)建的命名為testjob的Job注入到容器中价说,以便啟動(dòng)時(shí)能被調(diào)用到
    @Bean 
    public Job testJob() throws Exception {
    
        return jobBuilderFactory.get("testjob")  //定義job辆亏,指定job命名為testjob, 定義多個(gè)job時(shí)熔任,可在啟動(dòng)時(shí)通過spring.batch.job.names=testjob褒链,指定待啟動(dòng)job
                .start(testStep())
                .build();
    
    }
    
    //@Bean注解不能少,需要在spring啟動(dòng)時(shí)疑苔,將構(gòu)建的命名為testjob的Job注入到容器中甫匹,以便啟動(dòng)時(shí)能被調(diào)用到
    @Bean
    public Step testStep() throws Exception {
        
        return stepBuildFactory.get("teststep")
        .<Car, Car> chunk(1) //三個(gè)參數(shù), 泛型的I/O, 括號內(nèi)的為commit interval惦费,一般從配置文件讀取兵迅。
        .reader(reader())
        .processor(processor())
        .write(writer())
        .build();
    }
    
    @Bean
    @StepScope
    public MyBatisCursorItemReader<Car> reader() throws Exception {
        
        return new MyBatisCursorItemReaderBuilder<Car>()
        .sqlSessionFactory(sqlSessionFactory)
        .queryId("com.test.mapper.Itestquery.queryCar")
        .build();
    }
    
    @Bean
    @StepScope
    public CarProcessor processor() {
    
        return new CarProcessor();
    }
    
    @Bean
    @StepScope
    public CarWriter processor() {
    
        return new CarWriter();
    }
}


public class CarProcessor  implements ItemProcessor<Car, Car> {

    @Override
    public Car process(Car item) {
        
        System.out.println("執(zhí)行計(jì)劃,薪贫,恍箭,,");
    }
}

public class CarWriter<T> implements ItemWriter<T> {

    @Override
    public void write(List<? extends T> items ) throws Exception {
    
        System.out.println("執(zhí)行wirter計(jì)劃瞧省,扯夭,,");
        for(T t:items) {
            Car car = (Car)t;
            System.out.println(car.toString());
        }
    }
}

public class Car{

    private String carname;
    
    private String price;
    
    private String getCarname() {
        return carname;
    }
    
    private void setCarname(String carname) {
        this.carname = carname;
    }
    
    private String getPrice() {
        return price;
    }
    
    private void setPrice(String price) {
        this.price = price;
    }
}

TestConfiguration中數(shù)據(jù)庫的連接配置
hql語句定義在 com.test.mapper.TestMapper.xml中鞍匾,存放路徑為classpath下的src/main/resource

<?xml version="1.0" encoding="UTF-8">
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd ">
<mapper namespace="com.test.mapper.ITestMapper">

    <resultMap id="basemap" type="com.test.Car">
        <arg column=""/>
        <arg column=""/>
    </resultMap>

    <sql id="base_list">
        carname, price
    </sql>
    
    <select id="queryCar" resultMap="basemap">
        select 
            <include refid="base_list" />
        from CarTable
    </select>

</mapper>

調(diào)用接口類定義com.test.mapper.ITestMapper 交洗,接口類路徑src/main/java

@Mapper
public interface ITestMapper {
    
    List<Map> queryCar();
}

SqlSessionFactory 自定義

@Configuration
public class SqlSessionFactoryConfig {
    
    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;
    
    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
    
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/test/mapper/*.xml"));
    
        return factoryBean.getObject();
    }
    
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市橡淑,隨后出現(xiàn)的幾起案子构拳,更是在濱河造成了極大的恐慌,老刑警劉巖梁棠,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件置森,死亡現(xiàn)場離奇詭異,居然都是意外死亡符糊,警方通過查閱死者的電腦和手機(jī)凫海,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來男娄,“玉大人盐碱,你說我怎么就攤上這事』铮” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵县好,是天一觀的道長围橡。 經(jīng)常有香客問我,道長缕贡,這世上最難降的妖魔是什么翁授? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任拣播,我火速辦了婚禮,結(jié)果婚禮上收擦,老公的妹妹穿的比我還像新娘贮配。我一直安慰自己,他們只是感情好塞赂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布泪勒。 她就那樣靜靜地躺著,像睡著了一般宴猾。 火紅的嫁衣襯著肌膚如雪圆存。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天仇哆,我揣著相機(jī)與錄音沦辙,去河邊找鬼。 笑死讹剔,一個(gè)胖子當(dāng)著我的面吹牛油讯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播延欠,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼陌兑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衫冻?” 一聲冷哼從身側(cè)響起诀紊,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎隅俘,沒想到半個(gè)月后邻奠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡为居,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年碌宴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒙畴。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贰镣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膳凝,到底是詐尸還是另有隱情碑隆,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布蹬音,位于F島的核電站上煤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏著淆。R本人自食惡果不足惜劫狠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一拴疤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧独泞,春花似錦呐矾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孕惜,卻和暖如春愧薛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衫画。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工毫炉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人削罩。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓瞄勾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親弥激。 傳聞我的和親對象是個(gè)殘疾皇子进陡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容