上篇主要讲述了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层的一个基本启动流程就搭建完工了。下篇则主要讲述启动过程中的一些问题以及流程实践操作。