使用DataSource
需要使用DataSource可以在pom.xml中添加spring-boot-starter-jdbc
依赖,这会自动加入Spring Jdbc的依赖。还需要加入相应的JDBC驱动包的依赖,笔者这里使用的是MySQL的驱动。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
DataSource的自动配置由org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
负责,当不存在DataSource类型的bean时,其会负责创建一个池化的DataSource。内置支持的连接池包括下面这几个,默认自动使用的顺序也是按照下面的顺序进行使用。即如果Classpath下存在HikariDataSource时将优先使用HikariDataSource,其次是Tomcat提供的数据库连接池,最后是dbcp2。
- com.zaxxer.hikari.HikariDataSource
- org.apache.tomcat.jdbc.pool.DataSource
- org.apache.commons.dbcp2.BasicDataSource
当添加了spring-boot-starter-jdbc
依赖时,会自动级联加入Hikari依赖,即此时默认将使用HikariDataSource。当Classpath下同时存在多个支持的数据库连接池实现时,如果不期望使用自动选择的数据库连接池实现,可以通过spring.datasource.type
指定需要使用的数据库连接池实现。比如如果Classpath下同时存在com.zaxxer.hikari.HikariDataSource
和org.apache.tomcat.jdbc.pool.DataSource
,默认将使用com.zaxxer.hikari.HikariDataSource
,如果期望使用org.apache.tomcat.jdbc.pool.DataSource
,则可以配置spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
。
然后可以通过spring.datasource
前缀开始的属性配置数据库连接相关的信息了,比如配置URL、驱动Class、用户名、密码等。数据库的配置信息由org.springframework.boot.autoconfigure.jdbc.DataSourceProperties
负责接收。
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=elim
更多的配置信息可以参考DataSourceProperties的API文档。
如果需要对使用的HikariDataSource连接池进行配置,可以通过spring.datasource.hikari
前缀开始的属性进行配置,对应的配置属性将由com.zaxxer.hikari.HikariDataSource
负责接收,可以配置的属性请参考对应的API文档。
如果需要对使用的Tomcat连接池进行配置,可以通过spring.datasource.tomcat
前缀开始的属性进行配置,对应的配置属性将由org.apache.tomcat.jdbc.pool.DataSource
负责接收,可以配置的属性请参考对应的API文档。
如果需要对使用的dbcp2连接池进行配置,可以通过spring.datasource.dbcp2
前缀开始的属性进行配置,对应的配置属性将由org.apache.commons.dbcp2.BasicDataSource
负责接收,可以配置的属性请参考对应的API文档。
有了DataSource后,就可以使用DataSource了,我们可以在需要应用它的地方直接进行注入,比如下面这样。
@Service
public class JdbcService {
@Autowired
private DataSource dataSource;
public List<String> getUsers() throws Exception {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
List<String> names = new ArrayList<>();
try {
connection = this.dataSource.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery("select name from tb_user");
while (resultSet.next()) {
names.add(resultSet.getString(1));
}
} finally {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}
return names;
}
}
现在的应用中基本都不会直接使用DataSource编程了,基本都是基于Hibernate、JPA或Mybatis编程。也有的会使用JdbcTemplate了。拥有了DataSource类型的bean后,Spring Boot的org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration
将自动为我们配置JdbcTemplate bean,所以上述代码可以改写为如下这样。
@Service
public class JdbcService {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<String> getUsers() throws Exception {
String sql = "select name from tb_user";
List<String> names = this.jdbcTemplate.queryForList(sql, String.class);
return names;
}
}
可以使用spring.jdbc.template
前缀开始的属性对JdbcTemplate进行一些自定义配置,对应的配置属性将由org.springframework.boot.autoconfigure.jdbc.JdbcProperties.Template
负责接收,可以配置的属性请参考对应的API文档。
使用基于内嵌数据库的DataSource
Spring Boot支持对H2、HSQL和Derby三种内嵌的数据库进行自动配置,只要Classpath下存在它们相关的驱动Class,Spring Boot将自动配置对应的DataSource。基于内嵌数据库的自动配置的DataSource是不需要配置用户名、密码等数据库连接信息的。有了DataSource后就可以进行与DataSource相关的操作了,进行单元测试时使用内嵌的数据库是一个不错的选择。
使用基于JNDI的DataSource
如果需要使用基于JNDI的DataSource,则可以通过spring.datasource.jndi-name
属性指定DataSource对应的JNDI名称。
spring.datasource.jndi-name=java:jboss/datasources/customers
(注:本文基于Spring Boot 2.0.3所写)
相关推荐
本示例“spring boot整合JPA——demo”将演示如何在Spring Boot项目中配置和使用JPA。 首先,我们需要理解Spring Boot与JPA的关系。Spring Boot是基于Spring框架的快速开发工具,它通过自动化配置减少了常规设置...
首先,我们要理解Spring Boot的核心理念——约定优于配置。在Spring Boot项目中,我们不再需要手动编写大量的XML配置文件,而是通过自动配置类和starter模块来简化配置。对于Mybatis的整合,我们可以引入`spring-...
《Spring Boot实战——基于mickjoust-boot-demo-master的深度解析》 Spring Boot以其简洁、快速的特性在Java开发领域中备受青睐,它通过“约定优于配置”的原则,极大地简化了Spring应用的初始搭建以及开发过程。本...
例如,如果类路径下存在JDBC驱动,Spring Boot就会自动配置DataSource,使得我们可以直接使用JdbcTemplate或JPA进行数据库操作。 总的来说,"spring-boot-demo"项目是一个很好的学习平台,它让我们能亲身体验Spring...
首先,让我们了解Spring Boot的核心特性之一——自动配置。Spring Boot的自动配置功能允许我们在不编写大量XML配置文件的情况下,轻松地设置和管理应用的各种组件,包括数据源和JPA(Java Persistence API)。 要...
2. **新建项目**:通过`File —— New —— Project`创建一个新的Spring Boot项目。 3. **使用Spring Initializr**:选择Spring Initializr作为项目的初始化工具。 4. **填写项目信息**: - **Group**:通常为公司...
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> ;serverTimezone=UTC"/> <!-- 事务管理器 --> <bean id="transactionManager" class="org.spring...
本教程将详细介绍如何使用 Spring Boot 搭建一个包含 Redis 缓存和 MyBatis 数据持久层的简单应用。 ### 一、Spring Boot 概述 Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化 Spring 应用的初始搭建以及...
本文将详细讲解如何使用MyBatis和Spring Boot整合实现多数据源,并重点介绍一种方法——AOP(面向切面编程)法。这种方法允许我们在运行时动态地切换数据源。 首先,我们需要理解Spring Boot的自动配置特性。Spring...
而`mybatis-spring-boot-starter`则是MyBatis与Spring Boot的集成,使得我们可以在Spring Boot应用中方便地使用MyBatis进行数据访问。 接下来,我们将关注ShardingSphere的配置。`spring.shardingsphere.datasource...
本篇将深入探讨如何利用Spring Boot构建一个基于RESTful API的项目,同时结合MyBatis和MySQL数据库,实现一个完整的数据操作示例——SpringBootDemo。 一、Spring Boot基础知识 Spring Boot是由Pivotal团队提供的...
在本文中,我们将深入探讨这两个关键领域,并基于给出的"Spring学习心得(二)——日志和数据库"这个标题进行详细的阐述。 首先,让我们从日志开始。在Java应用程序中,日志系统扮演着调试、监控和问题排查的关键角色...
SpringBoot知识点整理思维导图是针对Java开发领域中流行的微服务框架——Spring Boot进行系统性梳理的工具。Spring Boot以其快速启动、简化配置的特点,深受开发者喜爱。在本思维导图中,主要涵盖了以下几个核心知识...
你可以选择Apache的DBCP或C3P0等连接池实现,或者使用Spring Boot的自动配置。 3. **配置SqlSessionFactory**:MyBatis的核心对象是SqlSessionFactory,用于创建SqlSession。在Spring中,我们可以使用...
Spring JPA通过提供Repository接口简化了数据访问,同时支持多种数据源,包括HikariCP、C3P0和我们的主角——BoneCP。 配置Spring JPA与BoneCP的数据源,首先确保你已经下载了所需的Jar包。这些包通常包括Spring...
《Spring Boot事务管理实战教程——基于spring-transaction-demo项目》 在软件开发中,事务管理是确保数据一致性、完整性和可靠性的关键环节。本教程将以`spring-transaction-demo`项目为示例,深入探讨如何在...
在提供的描述中提到,可能使用到了MyBatis的扩展库——MyBatis Plus(BaTiSi)。MyBatis Plus提供了一些便捷的CRUD操作,可以减少开发者编写基础的SQL语句。例如,如果项目中包含`CURD_baomidou-master`这个文件,这...
例如,Spring Boot会自动发现`@Entity`注解的类,创建DataSource和SessionFactory,甚至配置JPA的事务管理器。开发者可以通过`@EnableJpaRepositories`开启JPA仓库的支持,`@EntityScan`指定实体类的位置,以及`@...
本项目——"spring-boot-easy-connection-pool-master",主要探讨了如何在Spring Boot环境下配置和管理连接池,并且实现了动态配置多数据源的功能,这对于大数据部门和数据中台服务尤其重要。 首先,让我们深入理解...