SpringBoot 数据源

93 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情

1.JDBC

  • 依赖

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
    </dependency>
    
  • 配置文件

    #配置数据源的属性
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8&useSSL=true
        username: root
        password: root
        type: org.springframework.jdbc.datasource.DriverManagerDataSource   
        #如果不指定数据源默认使用HikariDataSource
    

2.DBCP2

  • dbcp的依赖
    <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
    </dependency>
  • 配置文件
    #配置数据源的属性
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8&useSSL=true
        username: root
        password: root
        type:  org.apache.commons.dpcp2.BasicDataSource

3.Druid

image.png

  • 使用Druid的starter配置(项目中使用此配置方法)
  • 依赖
<dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid-spring-boot-starter</artifactId>
       <version>1.1.20</version>
</dependency>
• 配置文件
#配置数据源的属性
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
      username: root
      password: root
      max-active: 20
      max-wait: 5000
      initial-size: 1
      filters: stat,log4j,wall
      validationQuery: SELECT 'x'   #验证连接
      enable: true
   #监控配置
      stat-view-servlet:
        enabled: true
        login-username: root
        login-password: 123456
        allow: 
        deny: 
        url-pattern: /druid/*
#      web-stat-filter: 
#        enabled: true
#        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"


• druid的依赖
    <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid</artifactId>
           <version>1.1.20</version>
    </dependency>

• 配置文件
#配置数据源的属性
spring:
        datasource:
                driver-class-name:com.mysql.cj.jdbc.Driver
                url:jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
                username:root
                password:root
                type:com.alibaba.druid.pool.DruidDataSource
                druid:
                        max-active:20
                        max-wait:6000
                        initial-size:5
                        filters:stat,log4j,wall

• 配置类
@Configuration
publicclass DruidConfig{

        @ConfigurationProperties(prefix="spring.datasource")
         @Bean(initMethod="init")     //要加上initMethod  属性  不加监控页面的数据源可能出不来
        public  DruidDataSource druid(){
                Return new  DruidDataSource();
        }

        //配置Druid的监控
        //1、配置一个管理后台的Servlet
        @Bean
        Public  ServletRegistrationBean  druidServlet(){
                ServletRegistrationBean<StatViewServlet>     registrationBean=
                                         newServletRegistrationBean<>(newStatViewServlet(),"/druid/*");
                //方式一
                //添加IP白名单
                //registrationBean.addInitParameter("allow","127.0.0.1");
                //添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
                //registrationBean.addInitParameter("deny","127.0.0.1");
                //添加控制台管理用户
                registrationBean.addInitParameter("loginUsername","admin");
                registrationBean.addInitParameter("loginPassword","333");
                //是否能够重置数据
                registrationBean.addInitParameter("resetEnable","false");
                //方式二
                //Map<String,String>initParams=newHashMap<>();
                //registrationBean.setInitParameters(initParams);
                returnregistrationBean;
        }

        //2、配置一个web监控的filter
        @Bean
        Public   FilterRegistrationBean   druidFilter(){
                FilterRegistrationBean<WebStatFilter>filterRegistrationBean=
                                                            new   FilterRegistrationBean<>(newWebStatFilter());
        
                //添加过滤规则
                filterRegistrationBean.addUrlPatterns("/*");
                //忽略过滤格式
                filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
                
                return   filterRegistrationBean;
                }
        }
• 配置问题
	• 要在数据源bean上加上initMethod属性   不加估计会出现一下错误
	
	
	• The server time zone value xxxxx is unrecognized or represents more than 时区问题
	修改配置文件URL  加上 serverTimezone=UTC
	jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC