SpringBoot学习笔记-013

﹥>﹥吖頭↗ 提交于 2020-04-06 17:34:27

六、SpringBoot与数据访问

6.1、JDBC

6.1.1 依赖与配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://192.169.0.1:3306/jdbc

6.1.2、 效果

默认是用com.zaxxer.hikari.HikariDataSource作为数据源;

数据源的相关配置在DataSourceProperties里面;

6.1.3、自动配置原理

org.springframework.boot.autoconfigure.jdbc:

1、参考DataSourceConfiguration,根据配置创建数据源,默认使用HikariDataSourcet连接池;可以使用

spring.datasource.type指定自定义的数据源类型;

2、SpringBoot默认可以支持 :

com.zaxxer.hikari.HikariDataSource (Spring Boot 2.0 以上,默认使用此数据源)
org.apache.tomcat.jdbc.pool.DataSource
org.apache.commons.dbcp2.BasicDataSource

3、自定义数据源类型

/**
* Generic DataSource configuration.
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type")
static class Generic {

    @Bean
    DataSource dataSource(DataSourceProperties properties) {
        //使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
        return properties.initializeDataSourceBuilder().build();
    }

}

4、DataSourceInitializerInvoker :ApplicationListener

作用:

1)、runScripts() 运行建表语句;

2)、initSchema() 运行插入数据的sql语句;

默认只需要将文件命名为:

schema-*.sql #建表语句
data-*.sql   #数据语句
默认规则:schema.sql, schema-all.sql
可以使用
    schema:
        - Classpath: department.sql
        指定位置

5、操作数据库:自动配置了JdbcTemplate操作数据库

6.2、整合Druid数据源

6.2.1、引入依赖

<!--引入外部依赖-->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.21</version>
</dependency>

6.2.2、配置数据源类型

spring:
  datasource:
    username: root
    password: 123654
    url: jdbc:mysql://hocalhsot:3306/jdbc
    # 使druid生效
    type: com.alibaba.druid.pool.DruidDataSource
   
    # druid数据源特有属性配置
    druid:
      initinitialSize: 20
      initialSize: 5
      minIdle: 5
      maxActive: 20
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true

6.2.3、编写配置类

@Configuration
public class DruidConfig {
    
    //使druid的特有配置生效
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }

    //配置Druid的监控
    //1、配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

        Map<String,String> initParams = new HashMap<String,String>();

        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","123456");
        initParams.put("allow","");//默认就是允许所有访问
        initParams.put("deny","192.168.15.21");
        bean.setInitParameters(initParams);
        return bean;
    }


    //2、配置一个web监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.css,/druid/*");

        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));

        return  bean;
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!