目录
数据库的下载安装参考:
1.引入依赖
<!-- 连接数据库依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2.建库建表
/*创建数据库 SpringBootLearn*/
CREATE SCHEMA SpringBootLearn;
/*创建用户*/
CREATE USER 'springdb'@'%' IDENTIFIED BY 'springdb';
/*授予所有的权限,但不能给其它用户授权*/
GRANT ALL ON *.* TO 'springdb'@'%';
/*设置时区(在mysql中设置时区,默认为SYSTEM)*/
set global time_zone='+8:00';
/*用户表*/
CREATE TABLE t_user (
id INT(12) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
sex INT(1) NOT NULL,
note VARCHAR(200) NULL,
PRIMARY KEY (id)
)
DEFAULT CHARACTER SET = utf8;
3.数据库配置
springboot配置文件:src/main/resources/application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/SpringBootLearn
spring.datasource.username=springdb
spring.datasource.password=springdb
SpringBootLearn为数据库名称或schema名称。
4.测试连接
表数据如下:
junit测试代码:
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDbApplicationTests {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void contextLoads() {
List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from t_user");
System.out.println(list);
}
}
测试结果:
[{id=1, name=zhangsan, sex=1, note=测试}]
5.异常解决
5.1 遇到时区问题参考:
mysql8.0.11运行报The server time zone value '?D1ú±ê×?ê±??' is unrecognized or represents more ..解决办法
或者数据库连接配置添加 serverTimezone=UTC
spring.datasource.url=jdbc:mysql://localhost:3306/SpringBootLearn?serverTimezone=UTC
5.2 表中中文变成问号
数据库连接配置添加:useUnicode=yes&characterEncoding=utf8
spring.datasource.url=jdbc:mysql://localhost:3306/SpringBootLearn?serverTimezone=UTC&useUnicode=yes&characterEncoding=utf8
6.数据库连接池配置
上述为最基本的配置,很多配置都是springboot默认完成。
6.1 默认的连接池
监测连接池的代码:
@Component
public class DataSourceService implements ApplicationContextAware {
ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
this.applicationContext = arg0;
DataSource ds = applicationContext.getBean(DataSource.class);
System.out.println("数据库连接池:" + ds.getClass().getName());
}
}
结果:
数据库连接池:com.zaxxer.hikari.HikariDataSource
以上没对数据库连接池做任何配置,可见spring boot 2.0的版本默认连接池为HikariCP,官方推荐。
6.2 配置自定义的连接池-dbcp2
引入依赖-dbcp2数据库连接池:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
application.properties配置数据源类型
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
利用6.1的测试代码,输出:
数据库连接池:org.apache.commons.dbcp2.BasicDataSource
application.properties可以增加如下配置:
#--------------连接池配置dbcp2 start --------------#
#数据库连接池 dbcp2(不配置则默认使用HikariCP)
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
#可以在池中保持空闲的最大连接数,超出设置值之外的空闲连接将被回收,如设置为负数,则不限制
spring.datasource.dbcp2.max-idle=10
#可以在这个池中同时被分配的有效连接数的最大值,如设置为负数,则不限制
spring.datasource.dbcp2.max-total=50
#(如果没有可用连接)池在抛出异常前等待的一个连接被归还的最大毫秒数,设置为-1则等待时间不确定
spring.datasource.dbcp2.max-wait-millis=10000
#池被启动时初始化的创建的连接个数
spring.datasource.dbcp2.initial-size=5
#--------------连接池配置dbcp2 end --------------#
dbcp2详细配置参考:common-dbcp2数据库连接池参数说明
连接池使用策略参考:Spring Boot之默认连接池配置策略
github:https://github.com/zhangyangfei/SpringBootLearn 其中的springDb工程。