`
234390216
  • 浏览: 10193300 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460802
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771792
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395421
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393883
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678215
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529288
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178718
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:461872
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150133
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66840
社区版块
存档分类
最新评论

Spring Boot(16)——使用DataSource

阅读更多

使用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.HikariDataSourceorg.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所写)

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics