若依框架源码—3-(启动类)

主干——ruoyi-admin

模块文件图片

image

启动类 RuoYiApplication

image
启动应用这个与我们默认创建的项目的启动主要有两点不同
🌟1. 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);
        }
    }
运行项目可以看到

image

有两个数据源
为了对比,我新建了一个空的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);
        }
    }

}
启动之后 可以发现

image

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

image

成功实现了自动配置。

若依框架,是通过手动配置来注入数据源,而并非通过我们常用的自动配置,当然我们如今即使 删除 若依框架的 排除自动配置数据源 这个代码,也不会导致程序运行错误,这是因为当项目中有数据源的配置时便会优先使用项目中的数据源,而并非自动配置生成的。

💡问:那么为什么还要 使用exclude 来进行排除?
(1)手动配置可以避免自动配置出错,而且手动配置更加灵活
(2)相当于明确说明 “此项目的数据源是手动配置的”,让配置逻辑更加清晰

⌛️若依框架的数据源bean 这两个文件的包在
masterDataSource:
package com.ruoyi.framework.config;
DynamicDataSource:
package com.ruoyi.framework.datasource;
这些位置
当我写到 framework 模块时 会加入链接,进一步说明

🌟2. 项目启动完成后打印"RY"
这个是为了更加突出 RY 框架,个性化处理,没有什么好说的。。。

posted @ 2025-11-22 23:49  顺时针向  阅读(2)  评论(0)    收藏  举报