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的配置属性:
就动态读取到了。