上篇主要講述了SpringBoot Maven搭建層層之間的關係,本篇則主要針對beetlSQL,druid數據源來整合一下。
對於beetlSQL的好處beetlSQL基本使用中當中已經講述,這裏則不再多提。
再beetlSQL的配合使用中,我們使用了alibaba的Druid數據庫連接池,Druid這個新生代的後期勃發再此不多說,可以自行學習。配置Druid很簡單:
1、添加Maven依賴(包含mysql和beetlSQL的Maven依賴也一併加上)
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!--阿里巴巴Druid數據源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!--beetlSQL-->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetlsql</artifactId>
<version>2.10.19</version>
</dependency>
2、資源配置文件
(2.1資源配置)
#database config
datasource.exam.url=jdbc:mysql://192.168.XX.XX:3001/user?useUnicode=true&characterEncoding=utf-8
datasource.exam.username = XXX
datasource.exam.password = XXXX
datasource.maxActive=10
datasource.initialSize=1
datasource.maxWaitMillis=15000
datasource.minIdle=5
datasource.timeBetweenEvictionRunsMillis=60000
datasource.minEvictableIdleTimeMillis=300000
datasource.validationQuery=SELECT 'x'
datasource.testWhileIdle=true
datasource.testOnBorrow=false
datasource.testOnReturn=false
(2.2資源配置詳解)
配置 | 說明 |
---|---|
datasource.maxActive | 最大連接池數量 |
datasource.minIdle | 最小連接池數量 |
datasource.initialSize | 初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一次getConnection時 |
datasource.maxWaitMillis | 獲取連接時最大等待時間,單位毫秒 |
datasource.timeBetweenEvictionRunsMillis | 1) Destroy線程會檢測連接的間隔時間 2) testWhileIdle的判斷依據,詳細看testWhileIdle屬性的說明 |
datasource.validationQuery | 用來檢測連接是否有效的sql,要求是一個查詢語句。如果validationQuery爲null,testOnBorrow、testOnReturn、 testWhileIdle都不會起作用 |
datasource.testWhileIdle | 申請連接的時候檢測,如果空閒時間大於timeBetweenEvictionRunsMillis, 執行validationQuery檢測連接是否有效 |
datasource.testOnBorrow | 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。 |
datasource.testOnReturn | 歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能 |
3、創建工廠類讀取資源文件
@Configuration
@PropertySource({"classpath:dev/application-db.properties"})
public class DataSourceConfig {
@Value("${datasource.exam.url}")
private String examUrl;
@Value("${datasource.exam.username}")
private String examUserName;
@Value("${datasource.exam.password}")
private String examPassword;
@Value("${datasource.maxActive}")
private int maxActive;
@Value("${datasource.initialSize}")
private int initialSize;
@Value("${datasource.maxWaitMillis}")
private long maxWaitMillis;
@Value("${datasource.minIdle}")
private int minIdle;
@Value("${datasource.timeBetweenEvictionRunsMillis}")
private long timeBetweenEvictionRunsMillis;
@Value("${datasource.minEvictableIdleTimeMillis}")
private long minEvictableIdleTimeMillis;
@Value("${datasource.validationQuery}")
private String validationQuery;
@Value("${datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${datasource.testOnReturn}")
private boolean testOnReturn;
@Bean(value = "examDB")
@Primary
public DataSource getExamDataSource(){
DruidDataSource druidDataSource=new DruidDataSource();
druidDataSource.setName("examDB");
druidDataSource.setUrl(examUrl);
druidDataSource.setUsername(examUserName);
druidDataSource.setPassword(examPassword);
//druidDataSource配置
druidDataSource.setMaxActive(maxActive);
druidDataSource.setInitialSize(initialSize);
druidDataSource.setMaxWait(maxWaitMillis);
druidDataSource.setMinIdle(minIdle);
druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
druidDataSource.setValidationQuery(validationQuery);
druidDataSource.setTestWhileIdle(testWhileIdle);
druidDataSource.setTestOnBorrow(testOnBorrow);
druidDataSource.setTestOnReturn(testOnReturn);
return druidDataSource;
}
}
三步druid則配置完工了,Dao層我們使用的簡單方便快捷,且優點多多的beetlSQL來完成,Maven依賴上述已經配置好,由於SpringBoot沒有對beetlSQL的快速啓動裝配,所以我們得手動導入相關的bean,包括數據源,掃描寶,事務管理器等必須的。
@Configuration
public class SQLManagerConfig {
@Bean(name = "examSqlManager")
@Primary
public SqlManagerFactoryBean getSqlManagerFactoryBean(@Qualifier("examDB")DataSource master){
SqlManagerFactoryBean factoryBean=new SqlManagerFactoryBean();
BeetlSqlDataSource source=new BeetlSqlDataSource();
source.setMasterSource(master);
factoryBean.setCs(source);
factoryBean.setDbStyle(new MySqlStyle());
//開啓駝峯
factoryBean.setNc(new UnderlinedNameConversion());
//sql文件路徑
factoryBean.setSqlLoader(new ClasspathLoader("/sql"));
return factoryBean;
}
/**
* 配置包掃描
* @return
*/
@Bean(name = "examSqlScannerConfigurer")
public BeetlSqlScannerConfigurer getBeetlSqlScannerConfigurer() {
BeetlSqlScannerConfigurer conf = new BeetlSqlScannerConfigurer();
conf.setBasePackage("com.exam.api.dao");
conf.setDaoSuffix("Dao");
conf.setSqlManagerFactoryBeanName("examSqlManager");
return conf;
}
}
到此爲止,從web層到dao層的一個基本啓動流程就搭建完工了。下篇則主要講述啓動過程中的一些問題以及流程實踐操作。