来一块玩SpringBoot(叁) StringBoot添加数据源

SpringBoot单数据源:

实现目标:

  1. 连接H2数据库
  2. 初始化一张表,表名为GLITTER
  3. 插入两条数据
  4. 查询并输出插入的数据

    环境:

  5. SpringBoot 2.1.7RELEASE

  6. JDK1.8
  7. spring-boot-starter-jdbc
  8. spring-boot-starter-web
  9. h2(runtime)
  10. spring-boot-starter-actuator

    Action:

    流程:
  11. 搭建项目

  12. 配置spring.datasource
  13. 创建数据库
  14. 插入数据库
  15. 编码

省略搭建项目的流程,搭建项目请参考《来一块玩SpringBoot(壹) 创建SpringBoot项目》

配置Spring,datasource

日常开发中,我们配置SpringBoot一般是在classpath/application.properties(yml) 中,创建完毕项目之后一般会默认生成一个 application.properties ,若没有这个文件在 classpath/ 下自行创建一个就好了。

配置数据源:

SpringBoot配置数据源非常简单,仅需要几个参数:

1
2
3
4
5
6
7
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=SA
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
# 指定初始化数据库和数据的脚本
spring.datasource.schema=classpath:schema.sql
spring.datasource.data=classpath:data.sql

spring.datasource.driver-class-name一般会自动识别,但是在某些特殊情况下还需要手动指定

spring.datasource.schema和spring.datasource.data的默认值分别是 classpath:schema.sqlclasspath:data.sql 所以无特殊需求不需要在配置文件中重写

配置actuator:

Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查、审计、统计和HTTP追踪等。Spring Boot Actuator默认仅开启几个接口,我们需要配置Actuator,使其开放所有接口。

Actuator默认开启的端口:

image.png
image.png

application.properties 中配置Actuator开启所有接口:

1
management.endpoints.web.exposure.include=*

浏览器中访问http://localhost:8080/actuator可以查看actuator开放的接口

创建数据库

classpath/ 创建 schema.sql 编写初始化脚本

1
CREATE TABLE GLITTER(ID INT IDENTITY, NAME VARCHAR(64));
插入数据

classpath/ 创建 data.sql 编写插入数据的sql

1
2
INSERT INTO GLITTER(ID,NAME) VALUES (1,'PLAYER')
INSERT INTO GLITTER(ID,NAME) VALUES (2,'FULINLIN')

运行项目的时候SpringBoot会自动向数据源中创建GLITTER表并且插入两条数据(相当于执行了schema.sqldata.sql)

编码

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.glitter.player.springbootdatasource;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@SpringBootApplication
@Slf4j
public class SpringbootDatasourceApplication implements CommandLineRunner {

@Autowired
private DataSource dataSource;

@Autowired
private JdbcTemplate jdbcTemplate;

public static void main(String[] args) {
SpringApplication.run(SpringbootDatasourceApplication.class, args);
}

@Override
public void run(String... args) throws Exception {
showConnectionInfo();
showData();
}

/*获取连接并且打印出来*/
private void showConnectionInfo() throws SQLException {
log.info("数据源:{}",dataSource.toString());
Connection connection=dataSource.getConnection();
log.info("连接信息:{}",connection.toString());
connection.close();
}

/*查询GLITTER中的所有信息并打印出来*/
private void showData(){
jdbcTemplate.queryForList("SELECT * FROM GLITTER")
.forEach(row->log.info(row.toString()));
}
}

实现 CommandLineRunner 接口是为了获取一个在启动项目之后就执行的线程。

验证结果

启动项目之后可以看到控制台日志正常输出我们想要的结果: 数据库连接信息插入的两条数据

image.png

打开浏览器访问http://localhost:8080/actuator/beans(该链接可以查看当前项目中所有的bean信息)

可以看到该项目中已经有了一个Datasource的bean

image.png
image.png
项目结构
image.png
image.png