发布时间: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
删除掉我们原来在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
多种数据源
让我们的启动器支持多种数据源, 例如 : C3P0和Druid , 根据配置进行选择 , 就可以使用条件选择进行实现。
@ConditionalOnProperty(value = "spring.jdbc.datasource.type",havingValue = "druid")
现在有俩个数据源,怎么让注入的时候只注入自己想要的那种数据源呢?
[NAS]MCUNet: Tiny Deep Learning on IoT Devices
基于Paddle的计算机视觉入门教程——第7讲 实战:手写数字识别
wx.chooseMessageFile ,微信小程序上传文件word,excel
机器人抓取—— 相机参数与标定 camera_calibration
SpringDataJpa的使用之一对一、一对多、多对多 关系映射问题
git-2.10.2-64-bit介绍&&git下载&&git安装教程
从零教你使用MindStudio进行Pytorch离线推理全流程