搭建springboot+mybatis+druid+sqlite/mysql/oracle附帶測試
1.版本
springboot2.1.6
jdk1.8
2.最簡springboot環境
https://www.cnblogs.com/SmilingEye/p/11422536.html
3.pom(sqlite配置)
spring-boot-starter與spring-boot-starter-test
mybatis-spring-boot-starter
druid
sqlite-jdbc
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</version> </dependency> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.21.0.1</version> </dependency> </dependencies>
4.配置application.properties
注意1:sqlite不支持spring.datasource.filters的wall,請去掉
注意2:spring.datasource.type=com.alibaba.druid.pool.DruidDataSource這一行以下的連接池的配置無法被druid加載,需要自己將配置設置到druid里,按照官網配置也不行。
官網配置https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
spring.datasource.driver-class-name=org.sqlite.JDBC spring.datasource.url=jdbc:sqlite:F:/epgis/program/gis-server/dataserver.pak spring.datasource.username= spring.datasource.password= spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # 初始化大小,最小,最大 spring.datasource.initialSize=1 spring.datasource.minIdle=3 spring.datasource.maxActive=20 # 配置獲取連接等待超時的時間 spring.datasource.maxWait=60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置一個連接在池中最小生存的時間,單位是毫秒 spring.datasource.minEvictableIdleTimeMillis=30000 spring.datasource.validationQuery=select 'x' spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false # 打開PSCache,並且指定每個連接上PSCache的大小 spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize= 20 # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆 # sqlite不支持wall,使用sqlite請去掉 spring.datasource.filters=stat,slf4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合並多個DruidDataSource的監控數據 #useGlobalDataSourceStat=true mybatis.mapper-locations=classpath:mybatis/*.xml
5.將application.properties配置設置到druid里
如果不做第5步,數據庫連接池也可以正常使用,但是它是使用的默認配置,非application.properties配置。
注意1:@configurationProperties的prefix里的設置,spring.datasource代表application.properties里的spring.datasource下的值,將自動調用DruidDataSource相同名稱的set方法。
import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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 com.alibaba.druid.pool.DruidDataSource; @Configuration public class DruidConfiguration { private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class); @Bean @Primary @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource1() { return new DruidDataSource(); } /*@Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; }*/ }
6.編寫測試類,驗證數據庫連接池設置成功
package com.epgis.gisserver; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import com.alibaba.druid.pool.DruidDataSource; @SpringBootTest @RunWith(SpringRunner.class) public class DataSouceTest { @Autowired DataSource dataSource1; @Test public void contextDuridLoads() throws SQLException { Connection con = dataSource1.getConnection(); System.err.println("**************"); System.err.println(dataSource1); DruidDataSource dss = (DruidDataSource)dataSource1; System.err.println(dss.getName()); System.err.println(dss.getValidationQuery()); System.err.println(dss.getTimeBetweenEvictionRunsMillis()); System.err.println(dss.getMinEvictableIdleTimeMillis()); // 數據源例如:HikariDataSource(springboot2.x默認),DruidDataSource,dbcp2DataSource System.err.println(dataSource1.getClass().getName()); // 連接例如org.sqlite.SQLiteConnection System.err.println(con); System.err.println("**************"); con.close(); } }
檢查1:dataSource1對象為DruidDataSource即為數據庫連接池設置成功。
檢查2:dss.getValidationQuery()的值為application.properties里spring.datasource.validationQuery的值"select 'x'",即為其他數據庫連接池配置成功。
7.編寫及配置mybatis
很多人對這一步驟很熟悉了,在此簡寫。
7.1在開始類上加入@MapperScan("com.epgis.gisserver.**.dao")
7.2編寫dao接口
7.3application.properties里加入xml文件掃描路徑
路徑:mybatis.mapper-locations=classpath:mybatis/*.xml
xml對應位置:
7.4編寫xml文件
7.5編寫測試方法
8.替換sqlite為oracle或mysql
8.1pom
<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.21.0.1</version> </dependency>
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.2</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
8.2application.properties文件
spring.datasource.driver-class-name=org.sqlite.JDBC spring.datasource.url=jdbc:sqlite:F:/epgis/program/gis-server/dataserver.pak spring.datasource.username= spring.datasource.password=
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver spring.datasource.url = jdbc:oracle:thin:@127.0.0.1:1521:orcl spring.datasource.username = test spring.datasource.password = test
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mrbird?useUnicode=true&characterEncoding=utf8 spring.datasource.username=test spring.datasource.password= test