【SpringBoot】与数据库连接依赖
快捷创建SpringBoot时候选中,选择Spring Web,JDBC API 和 MySQL
配置数据库连接信息
spring:
datasource:
username: root
password:1022
url: jdbc:mysql://localhost/test
driver-class-name: sql.jdbc.Driver
测试能否连接上数据库:
@SpringBootTest
class SpringbootDataJdbcApplicationTests {
//数据源
@Autowired
DataSource dataSource;
@Test
void contextLoads()throws SQLException {
//是否获取到数据源
System.out.Class());
//获取⼀个连接
Connection connection = Connection();
System.out.println(connection);
jdbctemplate查询一条数据connection.close();
}
}
springboot默认是使⽤com.zaxxer.hikari.HikariDataSource作为数据源,2.0以下是⽤at.jdbc.pool.DataSource作为数据源;
数据源的相关配置都在DataSourceProperties⾥⾯;
⾃动配置原理
jdbc的相关配置都在springframework\boot\autoconfigure\jdbc包下
参考DataSourceConfiguration,根据配置创建数据源,默认使⽤Hikari连接池;可以使⽤pe指定⾃定义的数据源类型;
springboot默认⽀持的连池:
org.apachemons.dbcp2.BasicDataSource
com.zaxxer.hikari.HikariDataSource
at.jdbc.pool.DataSource
⾃定义数据源类型:
@Configuration(
proxyBeanMethods =false
)
@ConditionalOnMissingBean({DataSource.class})
@ConditionalOnProperty(
name ={"pe"}
)
static class Generic {
Generic(){
}
@Bean
DataSource dataSource(DataSourceProperties properties){
//使⽤DataSourceBuilder创建数据源,利⽤反射创建响应type的数据源,并且绑定相关属性
return properties.initializeDataSourceBuilder().build();
}
}
启动应⽤执⾏sql
SpringBoot在创建连接池后还会运⾏预定义的SQL脚本⽂件,具体参
考org.springframework.boot.autoconfigure.jdbc.DataSourceInitializationConfiguration配置类,
在该类中注册了dataSourceInitializerPostProcessor
下⾯是获取schema脚本⽂件的⽅法:
List<Resource> scripts =
可以看出,如果我们没有在配置⽂件中配置脚本的具体位置,就会在classpath下schema-all.sql和schema.sql platform获取的是all,platform可以在配置⽂件中修改
具体查看createSchema()⽅法和initSchema()⽅法
initSchema()⽅法获取的是data-all.sql,data.sql
我们也可以在配置⽂件中配置sql⽂件的位置:
spring:
datasource:
schema:
- classpath:department.sql
-指定位置
测试:
在类路径下创建schema.sql,运⾏程序查看数据库是否存在该表:
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`departmentName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
程序启动后发现表并没有被创建,DEBUG查看以下,发现在运⾏之前会有⼀个判断.。
只要是NEVER和EMBEDDED就为true,⽽DataSourceInitializationMode枚举类中除了这两个就剩下ALWAYS了,可以在配置⽂件中配置为ALWAYS
spring:
datasource:
username: root
password:1022
url: jdbc:mysql://localhost/test
driver-class-name: sql.jdbc.Driver
initialization-mode: always
schema.sql:建表语句
data.sql:插⼊数据
注意:项⽬每次启动都会执⾏⼀次sql
Springboot⾃动配置了JdbcTemplate操作数据库
整合Druid数据源
1. 在 Spring Boot 项⽬中加⼊druid-spring-boot-starter依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
2. 在配置⽂件中指定数据源类型
spring:
datasource:
username: root
password:1022
url: jdbc:mysql://localhost/test
driver-class-name: sql.jdbc.Driver
initialization-mode: always
type: com.alibaba.druid.pool.DruidDataSource
测试类查看使⽤的数据源:
@SpringBootTest
class SpringbootJdbcApplicationTests {
@Autowired
private DataSource dataSource;
@Test
void contextLoads()throws SQLException {
System.out.Class());
System.out.Connection()); }
}
配置数据库连接池参数