Spring Boot (四) druid及beetlSQL配置

上篇主要講述了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層的一個基本啓動流程就搭建完工了。下篇則主要講述啓動過程中的一些問題以及流程實踐操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章