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的配置属性:

就动态读取到了。

浙公网安备 33010602011771号