springcloud自动装配数据源

           项目里面是springcloud+nacos的这套技术方案,之前一直没时间搞明白是怎么读取nacos里面的配置的。今天刚好想通过druid监控数据源的,想到我们的nacos都是配置好的。但是springcloud是怎么读取的呢?

           带着这个问题,先是看了下项目里面是通过discovery这个注册中心插件来实现的。代码如下:

       

 <!--项目外依赖包-->
        <!-- ========== 核心插件 ========== -->
        <!-- 1.注册中心插件 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-register-center-starter-nacos</artifactId>
            <!-- <artifactId>discovery-plugin-register-center-starter-consul</artifactId> -->
            <!-- <artifactId>discovery-plugin-register-center-starter-eureka</artifactId> -->
            <!-- <artifactId>discovery-plugin-register-center-starter-zookeeper</artifactId> -->
            <version>${discovery.version}</version>
        </dependency>

        <!-- 2.配置中心插件 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-config-center-starter-nacos</artifactId>
            <!-- <artifactId>discovery-plugin-config-center-starter-apollo</artifactId> -->
            <!-- <artifactId>discovery-plugin-config-center-starter-redis</artifactId> -->
            <!-- <artifactId>discovery-plugin-config-center-starter-zookeeper</artifactId> -->
            <!-- <artifactId>discovery-plugin-config-center-starter-consul</artifactId> -->
            <!-- <artifactId>discovery-plugin-config-center-starter-etcd</artifactId> -->
            <version>${discovery.version}</version>
        </dependency>

        <!-- 3.管理中心插件 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-admin-center-starter</artifactId>
            <version>${discovery.version}</version>
        </dependency>

        <!-- 4.服务的策略编排插件 -->
        <dependency>
            <groupId>com.nepxion</groupId>
            <artifactId>discovery-plugin-strategy-starter-service</artifactId>
            <version>${discovery.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${nacos.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${nacos.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

 

       因为我们是用的nacos,注册中心以及插件都是使用的nacos相关的。但是还是没找到怎么加载数据库以及配置属性的。

       看到启动类里面 有 @SpringCloudApplication 注解,点开查看源码:

     

 

   继续点开@SpringBootApplication 查看源码

   

 

 

  其实看下这个jar包,里面的spring.factories:

   

 

 

       

org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
点开这个类:

 

 

 

 点开 DataSourceInitializationConfiguration

 

 

继续看DataSourceInitializerInvoker

 

 

 可以看到这个是基于spring监听,在spring启动中作为bean来启动的。初始化时候通过DataSourceProperties来获取配置。看下配置属性:

 

 

  嗯,很熟悉。是基于nacos的 动态配置注解@ConfigurationProperties 来读取配置文件的。在结合我们nacos的配置属性:

  

 

  就动态读取到了。

posted @ 2022-08-23 18:31  Doyourself!  阅读(262)  评论(0编辑  收藏  举报