美文网首页
spring boot学习(1)

spring boot学习(1)

作者: 慌张而黑糖 | 来源:发表于2019-08-20 12:07 被阅读0次

配置数据源

spring boot2.x版本默认的连接池是HikariCP,官网链接,里面有许多配置详情,这里我只做一些简单配置。

application.properties配置

#这里注释掉是因为spring boot会尽可能判断驱动类型,所以当他不能确定驱动类型的时候在明确配置
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#这里需要注意,mysql数据库版本如果在8或者之上的要加上serverTimezone这个配置,不然会报错,这里主要是时区问题
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=******
spring.datasource.password=******
#设置客户端在等待池中等待的最大时间数,当超过这个时间就会报   
#SQLException异常,最小值为250毫秒,默认3000毫秒
spring.datasource.hikari.connection-timeout=3000
#设置连接空闲多长时间进行删除,但必须在minimumIdle小于maximum-pool-size时才有效,
#且当现连接数大于minimumIdle和空闲时间超出下面设置的这个时间,才会被删除
spring.datasource.hikari.idle-timeout=60000
#设置最大连接数
spring.datasource.hikari.maximum-pool-size=100

当然也可以通过:spring.datasource.type设置其他连接池的类型,但是要加入相应的依赖。
出于好奇,为什么我写了这些配置信息,为什么可以直接使用,然后网上搜了也没搜到,然后想了想应该是spring boot的自动配置,然后看了看源码,然后进行调试,发现真的是这样。

  • 首先我找到DataSourceProperties类,里面有很多信息,挑出一些
@ConfigurationProperties(
    prefix = "spring.datasource"
)
public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
......

这里可以看出我们设置的spring.datasource.username、
spring.datasource.password等信息被上面的那些值给获取了。
但是我们配置的是hikari连接池啊,有点不对劲,然后找到DataSourceConfigration这了类

 @Configuration
    @ConditionalOnClass({HikariDataSource.class})
    @ConditionalOnMissingBean({DataSource.class})
    @ConditionalOnProperty(
        name = {"spring.datasource.type"},
        havingValue = "com.zaxxer.hikari.HikariDataSource",
        matchIfMissing = true
    )
    static class Hikari {
        Hikari() {
        }

        @Bean
        @ConfigurationProperties(
            prefix = "spring.datasource.hikari"
        )
        public HikariDataSource dataSource(DataSourceProperties properties) {
            HikariDataSource dataSource = (HikariDataSource)DataSourceConfiguration.createDataSource(properties, HikariDataSource.class);
            if (StringUtils.hasText(properties.getName())) {
                dataSource.setPoolName(properties.getName());
            }

            return dataSource;
        }
    }

里面还有Dbcp2、Generic等连接池的配置,但我们设置的是Hikari,所以匹配到的应该是它,其中还有很多细节方面的东西,不过主要的是这两部分。 其中也有很多注解,之后再一一解决这些吧。

相关文章

网友评论

      本文标题:spring boot学习(1)

      本文链接:https://www.haomeiwen.com/subject/jonssctx.html