下面我会举例来声名我是怎样举办断点追踪的,以spring-boot-2.0.3之quartz集成,不是你想的那样哦!和 spring-boot-2.0.3之quartz集成,数据源题目,源码探讨 为配景来讲,必要搞清晰两个点:springboot是怎样向quartz注入数据源的,quartz是怎样操纵数据库的
springboot向quartz注入数据源
QuartzAutoConfiguration是springboot自动设置quartz的进口
将quartz的设置属性配置给SchedulerFactoryBean;将数据源配置给SchedulerFactoryBean:假若有@QuartzDataSource修饰的数据源,则将@QuartzDataSource修饰的数据源配置给SchedulerFactoryBean,不然将应用的数据源(druid数据源)配置给SchedulerFactoryBean,显然我们的应用中没有@QuartzDataSource修饰的数据源,那么SchedulerFactoryBean中的数据源就是应用的数据源;将事宜打点器配置给SchedulerFactoryBean。SchedulerFactoryBean,认真建设和设置quartz Scheduler,并将其注册到spring容器中。SchedulerFactoryBean实现InitializingBean的afterPropertiesSet要领,内里有可以配置数据源的进程
可以看到通过org.quartz.jobStore.dataSource配置的dsName(值为quartzDs)最后会被替代成springTxDataSource.加scheduler实例名(我们的应用中是:springTxDataSource.quartzScheduler)。springboot会注册两个ConnectionProvider给quartz:一个dsName叫springTxDataSource.quartzScheduler,有事宜;一个dsName叫springNonTxDataSource.quartzScheduler,没事宜。
quartz怎样操纵数据库
我们通过遏制按时使命来跟下quartz对数据库的操纵
发明quartz用如下方法获取connection
- conn = DBConnectionManager.getInstance().getConnection(getDataSource());
那么我们的job中就可以按如下方法操纵数据库了
- package com.lee.quartz.job;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
- import org.quartz.utils.DBConnectionManager;
- import org.springframework.scheduling.quartz.LocalDataSourceJobStore;
- import org.springframework.scheduling.quartz.QuartzJobBean;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- public class FetchDataJob extends QuartzJobBean {
- // private String dataSourceName = "quartzDs"; // 用此会找不到
- // private String dataSourceName = "springNonTxDataSource.quartzScheduler"; // 不支持事宜
- // private String dataSourceName = "springTxDataSource.quartzScheduler"; // 支持事宜
- private final String insertSql = "INSERT INTO tbl_sys_user(name, age) VALUES(?,?) ";
- private String schedulerInstanceName = "quartzScheduler"; // 可通过jobDataMap注入进来
- @Override
- protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
- String dsName = LocalDataSourceJobStore.NON_TX_DATA_SOURCE_PREFIX
- + schedulerInstanceName; // 不支持事宜
- //String dsName = LocalDataSourceJobStore.TX_DATA_SOURCE_PREFIX + schedulerInstanceName; // 支持事宜
- try {
- Connection connection = DBConnectionManager.getInstance().getConnection(dsName);
- PreparedStatement ps = connection.prepareStatement(insertSql);
- ps.setString(1, "张三");
- ps.setInt(2, 25);
- ps.executeUpdate();
- ps.close();
- connection.close(); // 将毗连偿还给毗连池
- System.out.println("插入乐成");
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- public void setSchedulerInstanceName(String schedulerInstanceName) {
- this.schedulerInstanceName = schedulerInstanceName;
- }
- }
明晰我们的目标,找到吻合的切入点,进入断点调试追踪也就轻易了。
任我说的口不择言,你仍无动于衷,那壹贝偾我一厢甘心,只有局中人才气领会到个中的微妙!
总结与感悟 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|