使用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所写)
相关推荐
赠送jar包:dynamic-datasource-spring-boot-starter-3.4.1.jar; 赠送原API文档:dynamic-datasource-spring-boot-starter-3.4.1-javadoc.jar; 赠送源代码:dynamic-datasource-spring-boot-starter-3.4.1-sources...
赠送jar包:dynamic-datasource-spring-boot-starter-3.4.1.jar; 赠送原API文档:dynamic-datasource-spring-boot-starter-3.4.1-javadoc.jar; 赠送源代码:dynamic-datasource-spring-boot-starter-3.4.1-sources...
1.8 Spring Boot datasource - mysql 1.9 JPA - Hibernate 1.10 使用JPA保存数据 1.11 使用JdbcTemplate 1.12 Spring Boot修改端口号 1.13 Spring Boot配置ContextPath 1.14 Spring Boot改变JDK编译版本 1.15 处理...
mybatis-multi-datasource|[mybatis、数据库集群、读写分离、读库负载均衡](https://github.com/smltq/spring-boot-demo/blob/master/mybatis-multi-datasource) template-thymeleaf|[thymeleaf实现应用国际化示例]...
显示使用@RefreshScope和使用 spring-boot 的条件 bean 定义时出现问题的示例。 它是一个基本的应用程序,除了创建一个带有@RefreshScope的自定义 H2 DataSource外,什么都不做。 快速开始 克隆回购 $ git clone ...
spring-boot-dynamic-datasource-started-master.rar
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...
dynamic-datasource-spring-boot-starter-3.2.0.jar
多数据源调整和修改,支持数据源的切换等功能
spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制
Spring Boot+Jpa多数据源配置Demo,可同时支持多种数据库,不同数据库,同时支持不同数据库的JdbcTemplate
使用Spring Boot 13.构建系统 13.1.依赖管理 13.2.Maven 13.2.1.继承Starter Parent 13.2.2.在没有父POM的情况下使用Spring Boot 13.2.3.使用Spring Boot Maven插件 13.3.Gradle 13.4.Ant ...
一个springboot的多数据配置,从mapper到controller完整的一个业务流程
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...
能够使用Spring Boot提供的@ConfigurationProperties ( spring.datasource.hikari.* , spring.datasource.dbcp2.* ) 通过部署属性decorator.datasource.enabled=true/false禁用装饰 通过spring属性applica
利用aop进行动态的数据源切换
后端:Spring Boot、Spring MVC、MySQL、Maven、MyBatis 前端:jsp、Bootstrap、layui 修改数据库配置: 打开 src/main/resources/application-dev.yml 文件。 根据你的 MySQL 配置,修改以下属性: spring....
基于深度学习并实战 spring boot 的项目合集(已集成batis-aop(AOP自定义多数据源)、multi-datasource-mybatis(使用Mybatis集成多数据源)、quartz(定时任务)等).zip基于深度学习并实战 spring boot 的项目合集(已...
包括'chapter-2-spring-boot-quick-start','chapter-4-spring-boot-validating-form-input','chapter-5-spring-boot-paging-sorting','doc','springboot-configuration','springboot-dubbo-client','springboot-...
3.数据库使用Mysql中自带的sakila数据库,使用前,请将application.yml中的spring.datasource.ssm.password中的数据库密码设置为自己的; 4.实现了sakila中的单表的增删改查和跨表查询,跨表查询包括了Mybatis的1-N...