zoukankan      html  css  js  c++  java
  • Spring boot 数据源配置。

    配置文件 :

      spring boot  配置文件 有两种形式 ,一种是properties文件、一种是yml文件。案列使用properties文件。

    数据源的默认配置 :

      spring boot 约定优先于配置 ,所以数据源也有默认的配置,所有的默认配置文件基本都已xxxautoConfiguration.java 的形式放在spring-boot-configure.jar中,配置在“/META-INF/spring.factories”文件中 。数据源的默认配置类为:org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration ,在配置文件中导入了四中配置,黄色标记部分,如下

    @Configuration
    @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
    @EnableConfigurationProperties(DataSourceProperties.class)
    @Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })
    public class DataSourceAutoConfiguration {
            ...
        @Configuration
        @Conditional(PooledDataSourceCondition.class)
        @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
        @Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
                DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.Generic.class,
                DataSourceJmxConfiguration.class })
        protected static class PooledDataSourceConfiguration {
    
        }
            ...
    }

    而从DataSourceBuilder类代码看 ,知道 ,会去遍历加载,这个四个数据源,如果加载成功了,就返回,后面的不再加载。

    public final class DataSourceBuilder<T extends DataSource> {
    
        private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] { "com.zaxxer.hikari.HikariDataSource",
                "org.apache.tomcat.jdbc.pool.DataSource", "org.apache.commons.dbcp2.BasicDataSource" };
        ...
        @SuppressWarnings("unchecked")
        public static Class<? extends DataSource> findType(ClassLoader classLoader) {
            for (String name : DATA_SOURCE_TYPE_NAMES) {
                try {
                                  //加载成功便会返回。
                    return (Class<? extends DataSource>) ClassUtils.forName(name, classLoader);
                }
                catch (Exception ex) {
                    // Swallow and continue
                }
            }
            return null;
        }
        ...
    
    } 

    看看我们Pom文件导入的数据源jar包,点击后跟踪到最后一个pom文件 ,看到只导入了HikariCP数据源。

        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
          <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>2.1.6.RELEASE</version>
          </dependency>
    <?xml version="1.0" encoding="UTF-8"?>
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starters</artifactId>
        <version>2.1.6.RELEASE</version>
      </parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
      <version>2.1.6.RELEASE</version>
      <name>Spring Boot JDBC Starter</name>
      <description>Starter for using JDBC with the HikariCP connection pool</description>
      <url>https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-jdbc</url>
      <organization>
        <name>Pivotal Software, Inc.</name>
        <url>https://spring.io</url>
      </organization>
      <licenses>
        <license>
          <name>Apache License, Version 2.0</name>
          <url>https://www.apache.org/licenses/LICENSE-2.0</url>
        </license>
      </licenses>
      <developers>
        <developer>
          <name>Pivotal</name>
          <email>info@pivotal.io</email>
          <organization>Pivotal Software, Inc.</organization>
          <organizationUrl>https://www.spring.io</organizationUrl>
        </developer>
      </developers>
      <scm>
        <connection>scm:git:git://github.com/spring-projects/spring-boot.git/spring-boot-starters/spring-boot-starter-jdbc</connection>
        <developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-boot.git/spring-boot-starters/spring-boot-starter-jdbc</developerConnection>
        <url>https://github.com/spring-projects/spring-boot/spring-boot-starters/spring-boot-starter-jdbc</url>
      </scm>
      <issueManagement>
        <system>Github</system>
        <url>https://github.com/spring-projects/spring-boot/issues</url>
      </issueManagement>
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <version>2.1.6.RELEASE</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>com.zaxxer</groupId>
          <artifactId>HikariCP</artifactId>
          <version>3.2.0</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>5.1.8.RELEASE</version>
          <scope>compile</scope>
        </dependency>
      </dependencies>
    </project>

    根据代码分析,默认数据源配置就是 HikariCP ,注意,如果,不另外导入jar包,而配置另外的数据源 如:spring.datasource.type = org.apache.tomcat.jdbc.pool.DataSource,则会报错。

    配置自定义数据源:

      1.导入Druid maven 坐标

      

    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.16</version>
            </dependency>

      1.以配置druid 数据源为例 ,驱动为mysql 。写入配置文件 :

      

    spring.datasource.name = root
    spring.datasource.password = 123456
    spring.datasource.url = jdbc:mysql://192.168.1.103:3306/jdbc
    spring.datasource.driverClassName = com.mysql.jdbc.Driver
    spring.datasource.type = com.alibaba.druid.pool.DruidDataSource

      3.指定配置type后还不够,数据源已切换过来 ,一下DruidConfig为配置别的属性,不写别的属性配置不进去。

    @Configuration
    public class DruidConfig {
    
        @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<>();
    
            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;
        }
    }

    4.测试:

      

  • 相关阅读:
    20162325 金立清 S2 W7 C16
    2017-2018-1 我爱学Java 第三周 作业
    Android演示Stack(课下作业)
    20162325 金立清 S2 W6 C15
    YanghuiTriangle
    20162327WJH第一次实验——线性结构
    20162327 《程序设计与数据结构》第三周学习总结
    20162327《程序设计与数据结构》第一周作业
    20162327WJH 实验三 《敏捷开发与XP实践》 实验报告
    20162328WJH实验五网络编程与安全实验报告
  • 原文地址:https://www.cnblogs.com/jonrain0625/p/11312390.html
Copyright © 2011-2022 走看看