Spring Boot DataSourceBuilder教程展示了如何使用DataSourceBuilder在命令行 Spring Boot 应用中创建数据源。 使用了 HikariCP 连接池。
DataSourceBuilder是 Java 便利类,用于创建具有常见实现和属性的数据源。
H2 是完全用 Java 创建的开源关系数据库管理系统。 它可以嵌入 Java 应用中或以客户端-服务器模式运行。 它易于部署和安装,占地面积小。
Spring 是用于开发 Java 企业应用的 Java 应用框架。 它还有助于集成各种企业组件。 Spring Boot 使创建具有 Spring 动力的生产级应用和服务变得很容易,而对安装的要求却最低。
Spring Boot DataSourceBuilder 示例
以下是一个简单的 Spring Boot 控制台应用。 它从 H2 内存数据库中检索数据并将其显示在终端中。 要配置数据源,我们使用DataSourceBuilder类。
pom.xmlsrc├───main│ ├───java│ │ └───com│ │ └───zetcode│ │ │ Application.java│ │ │ MyRunner.java│ │ ├───config│ │ │ AppConfig.java│ │ └───model│ │ Car.java│ └───resources│ application.yaml│ data-h2.sql│ logback.xml│ schema-h2.sql└───test└───java
这是项目结构。
pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zetcode</groupId><artifactId>datasourcebuilder</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELEASE</version></parent><dependencies><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
Maven pom.xml我们声明必要的依赖关系。
com/zetcode/model/Car.java
package com.zetcode.model;import java.util.Objects;public class Car {private Long id;private String name;private int price;public Car() {}public Car(Long id, String name, int price) {this.id = id;this.name = name;this.price = price;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Car car = (Car) o;return price == car.price &&Objects.equals(id, car.id) &&Objects.equals(name, car.name);}@Overridepublic int hashCode() {return Objects.hash(id, name, price);}@Overridepublic String toString() {final StringBuilder sb = new StringBuilder("Car{");sb.append("id=").append(id);sb.append(", name='").append(name).append('\'');sb.append(", price=").append(price);sb.append('}');return sb.toString();}}
这是Car bean 类。 它包含商品 ID,名称和价格。
resources/schema-h2.sql
CREATE TABLE cars(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255), price INT);
该 SQL 脚本创建cars表。
resources/data-h2.sql
INSERT INTO cars(name, price) VALUES('Audi', 52642);INSERT INTO cars(name, price) VALUES('Mercedes', 57127);INSERT INTO cars(name, price) VALUES('Skoda', 9000);INSERT INTO cars(name, price) VALUES('Volvo', 29000);INSERT INTO cars(name, price) VALUES('Bentley', 350000);INSERT INTO cars(name, price) VALUES('Citroen', 21000);INSERT INTO cars(name, price) VALUES('Hummer', 41400);INSERT INTO cars(name, price) VALUES('Volkswagen', 21600);
该脚本用数据填充表。 这两个脚本都位于类路径的根目录中。
resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?><configuration><include resource="org/springframework/boot/logging/logback/base.xml" /><logger name="org.springframework" level="ERROR"/><logger name="com.zetcode" level="DEBUG"/><logger name="com.zaxxer.hikari" level="INFO"/></configuration>
在logback.xml文件中,我们配置日志记录级别。 我们将 Spring 框架的日志记录级别设置为ERROR,以便我们的输出不会被不必要的细节所困扰。
resources/application.yml
datasource:hikari:minimum-idle: 1maximum-pool-size: 20jdbcUrl: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSEdriverClassName: org.h2.Driverspring:main:banner-mode: "off"datasource:platform: h2
Spring Boot 的主要配置文件称为application.yml。 在datasource属性中,我们配置数据源和 HikariCP。 我们使用内存中的 H2 数据库。
使用banner-mode属性,我们关闭 Spring Boot 横幅。 该平台值用在 SQL 初始化脚本中:schema-${platform}.sql和data-${platform}.sql。
com/zetcode/config/AppConfig.java
package com.zetcode.config;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.jdbc.DataSourceBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import javax.sql.DataSource;@Configurationpublic class AppConfig {@Bean@Primary@ConfigurationProperties(prefix = "datasource")public DataSource dataSource() {return DataSourceBuilder.create().build();}}
在AppConfig中生成一个数据源。 使用@ConfigurationProperties注解,我们已将配置外部化到 YAML 文件中。
com/zetcode/MyRunner.java
package com.zetcode;import com.zetcode.model.Car;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Component;@Componentpublic class MyRunner implements CommandLineRunner {@Autowiredprivate JdbcTemplate jdbcTemplate;@Overridepublic void run(String... args) {var sql = "SELECT * FROM cars";var cars = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(Car.class));for (Car car: cars) {System.out.println(car);}}}
MyRunner执行 SQL 查询并在控制台中显示输出。
@Autowiredprivate JdbcTemplate jdbcTemplate;
注入JdbcTemplate。
var sql = "SELECT * FROM cars";
这是要执行的 SQL。 我们从cars表中选择所有汽车。
var cars = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(Car.class));
BeanPropertyRowMapper将一行转换为指定映射目标类的新实例。
for (Car car: cars) {System.out.println(car);}
我们遍历所有汽车对象,并将它们打印到控制台。
com/zetcode/Application.java
package com.zetcode;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
Application设置 Spring Boot 应用。
$ mvn -q spring-boot:run...Car{id=1, name='Audi', price=52642}Car{id=2, name='Mercedes', price=57127}Car{id=3, name='Skoda', price=9000}Car{id=4, name='Volvo', price=29000}Car{id=5, name='Bentley', price=350000}Car{id=6, name='Citroen', price=21000}Car{id=7, name='Hummer', price=41400}Car{id=8, name='Volkswagen', price=21600}...
我们运行 Spring Boot 应用。 显示八辆车。
在本教程中,我们在 Spring Boot 控制台应用中使用了 DataSourceBuilder。 您可能也对这些相关教程感兴趣: Spring Boot MySQL 教程, Spring Boot PostgreSQL 教程, Spring Boot H2 教程, Java 教程或列出所有 Spring Boot 教程。
