主干——ruoyi-admin
模块文件图片

启动类 RuoYiApplication

启动应用这个与我们默认创建的项目的启动主要有两点不同
- exclude = { DataSourceAutoConfiguration.class } 排除了自动配置的数据源
- 为什么要排除自动配置的数据源?
首先要知道 当项目启动时,会检测是否有数据源配置,没有就会自动注入一个数据源,有配置好的数据源就按照配置好的注入。
首先我们查看 若依的容器中的数据源bean 修改启动类,通过从容器中获取数据源类名单
点击查看代码
public static void main(String[] args){// System.setProperty("spring.devtools.restart.enabled", "false");ConfigurableApplicationContext context = SpringApplication.run(RuoYiApplication.class, args);System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" +" .-------. ____ __ \n" +" | _ _ \\ \\ \\ / / \n" +" | ( ' ) | \\ _. / ' \n" +" |(_ o _) / _( )_ .' \n" +" | (_,_).' __ ___(_ o _)' \n" +" | |\\ \\ | || |(_,_)' \n" +" | | \\ `' /| `-' / \n" +" | | \\ / \\ / \n" +" ''-' `'-' `-..-' ");String[] beanNames = context.getBeanNamesForType(DataSource.class);System.out.println("当前容器中有 " + beanNames.length + " 个 DataSource,分别是:");for (String name : beanNames) {System.out.println(" - " + name);}}

有两个数据源
为了对比,我新建了一个空的springboot的项目 引入 mysql 相关依赖
pom:
点击查看代码
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>
点击查看代码
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Demo1Application {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(Demo1Application.class, args);String[] beanNames = context.getBeanNamesForType(DataSource.class);System.out.println("当前容器中有 " + beanNames.length + " 个 DataSource,分别是:");for (String name : beanNames) {System.out.println(" - " + name);}}}

没有任何数据源,因为我们使用了 exclude = {DataSourceAutoConfiguration.class}
当删除 exclude = {DataSourceAutoConfiguration.class}
我们又会发现

成功实现了自动配置。
若依框架,是通过手动配置来注入数据源,而并非通过我们常用的自动配置,当然我们如今即使 删除 若依框架的 排除自动配置数据源 这个代码,也不会导致程序运行错误,这是因为当项目中有数据源的配置时便会优先使用项目中的数据源,而并非自动配置生成的。
问:那么为什么还要 使用exclude 来进行排除?
(1)手动配置可以避免自动配置出错,而且手动配置更加灵活
(2)相当于明确说明 “此项目的数据源是手动配置的”,让配置逻辑更加清晰
若依框架的数据源bean 这两个文件的包在
masterDataSource:
package com.ruoyi.framework.config;
DynamicDataSource:
package com.ruoyi.framework.datasource;
这些位置
当我写到 framework 模块时 会加入链接,进一步说明
- 项目启动完成后打印"RY"
这个是为了更加突出 RY 框架,个性化处理,没有什么好说的。。。