22-07-17 西安 springboot(02)自定义启动器、常用启动器

发布时间:2022-08-18 18:23

自定义启动器(就是一个项目)

 需求:定义一个连接池启动器 , 当用户引入了连接池启动依赖之后 , 项目中就已经自动配置了连接池

自定义启动器:spring-boot-jdbc-starter
创建工程spring-boot-jdbc-starter,父工程不选

引入依赖


    org.springframework.boot
    spring-boot-starter-parent
    2.3.6.RELEASE



    UTF-8
    UTF-8
    1.8



    
    
        org.springframework.boot
        spring-boot-starter


    
    
        com.alibaba
        druid
        1.1.12


    
            c3p0
            c3p0
            0.9.1.2


    
        org.springframework.boot
        spring-boot-configuration-processor
        true
    

springboot没有配置文件,要准备配置类

在自定义启动器中创建属性配置类,读取工程springboot_01的application.yml配置文件

@Component
@ConfigurationProperties(prefix = "spring.jdbc.datasource")
public class DataSourceProperties {
    private String driverClassName ;
    private String url;
    private String username;
    private String password;
    //省略get/set方法
}

创建自动配置类
DataSourceAutoConfiguration

@SpringBootConfiguration
public class DataSourceAutoConfiguration {
    @Autowired
    private DataSourceProperties dataSourceProperties ;

    @Bean
    public DataSource createDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(dataSourceProperties.getDriverClassName());
        dataSource.setUrl(dataSourceProperties.getUrl());
        dataSource.setUsername(dataSourceProperties.getUsername());
        dataSource.setPassword(dataSourceProperties.getPassword());
        return dataSource;
    }
}

注册自定义配置类

在自定义启动器 resource 文件夹下面新建 META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.atguigu.autoconfig.DataSourceAutoConfiguration

使用自定义启动器

在 springboot_01 项目的pom.xml中引入刚刚自定义的启动器依赖


    com.atguigu
    spring-boot-jdbc-starter
    1.0-SNAPSHOT

22-07-17 西安 springboot(02)自定义启动器、常用启动器_第1张图片

删除掉我们原来在springboot_01中的 DataSourceProperties属性类。

注入连接池,查看连接池属性

@RestController
public class HelloController {
    @Autowired
    private DataSource dataSource ;

    @RequestMapping("/hello")
    public String sayHello(){
        //打印DruidDataSource数据源
        System.out.println(dataSource.getClass());
        return "hello spring boot!!" ;
    }
}

测试:在浏览器输入http://localhost:8089/hello

22-07-17 西安 springboot(02)自定义启动器、常用启动器_第2张图片


多种数据源

让我们的启动器支持多种数据源, 例如 : C3P0和Druid , 根据配置进行选择 , 就可以使用条件选择进行实现。

@ConditionalOnProperty(value = "spring.jdbc.datasource.type",havingValue = "druid")

22-07-17 西安 springboot(02)自定义启动器、常用启动器_第3张图片

现在有俩个数据源,怎么让注入的时候只注入自己想要的那种数据源呢?

  • 如果配置文件中配置了spring.jdbc.datasource.type=c3p0使用c3p0数据源
  • 如果配置文件中配置了spring.jdbc.datasource.type=druid使用druid数据源

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号