XXLJOB2.1.0數據源配置踩坑記錄


最近在看XXLJOB,因為截至到發文時間最新的版本是2.1.0而且需要建立的數據庫與Quartz解耦了,所以就用了最新的版本。

首先說一下踩坑過程:

代碼開發完成之后,在定時跑的時候第一次跑的多數失敗,報的錯是:Communications link failure

上網搜了一下說是MySQL數據庫連接時間超過八小時就會斷開需要加一些配置,或者把數據庫的時間延長。原先用的數據源是Druid,所以就把網上找到的代碼加到數據源配置上,同時延長了MySQL的鏈接持續時間,問題依然沒有解決。

一次偶然的時間發現,XXLJOB本身用的數據源並不是Druid而是Tomcat自身集成的數據源,於是就萌生了換數據源的想法。最后成功了。

正確的配置如下:

數據源配置采用的是多數據源。用的是配置文件方式配置:

其中主數據源的XML的配置代碼為:

spring.datasource.master.url=jdbc:mysql://*.*.*.*:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.master.username=test
spring.datasource.master.password=test
spring.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.master.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.master.max-wait=10000
spring.datasource.master.max-active=30
spring.datasource.master.test-on-borrow=true
spring.datasource.master.validation-query=SELECT 1
spring.datasource.master.validation-interval=30000

主數據源的配置文件的代碼為:

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.master.*", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MybatisConfigMaster {

/**
* 將這個對象放入Spring容器中
* @return
*/
@Bean(name = "masterDataSource")
/**
* 表示這個數據源是默認數據源
*/
@Primary
/**
* 讀取application.properties中的配置參數映射成為一個對象
*/
/**
* prefix表示參數的前綴
*/
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource getMasterDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "masterSqlSessionFactory")
/**
* 表示這個數據源是默認數據源
*/
@Primary
/**
* @Qualifier表示查找Spring容器中名字為masterDataSource的對象
*/
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
// 設置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath:com/master/mapper/**/*.xml"));
return bean.getObject();
}
@Bean("masterSqlSessionTemplate")
/**
* 表示這個數據源是默認數據源
*/
@Primary
public SqlSessionTemplate masterSqlSessionTemplate(
@Qualifier("masterSqlSessionFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
}

從數據源的配置與主數據源類似,只需要把包名、類名、路徑名改一下,然后把@Primary注解去掉即可。這樣數據源就配好了,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM