0
点赞
收藏
分享

微信扫一扫

SSM框架整合Druid由浅入深到SpringBoot接管Druid配置~ 学习SpringBoot的接管思路与思想

腾讯优测 2022-01-26 阅读 16

📖本文目录

📝SSM框架整合Druid由浅入深到SpringBoot接管Druid配置

🙊1、这又是一篇如何进行自学的文章~

接着昨天那篇如何自学官方文档以及对应源码进行配置等方法还是得到了很多小伙伴的认可,但是如何牢固这种思想且在后续的前后端分离项目中,对我们想要客制化的配置进行编写@Configuration并将其注入到IOC容器中呢?这是比较困难的,也是比较浪费时间去学习,但是当你掌握了一种所谓的套路之后,这些配置简直是如鱼得水,客制化配置会让你的项目让人眼前一亮,我们就是要培养如何去自我进行配置的能力,小付今天在举一个比较常用的配置来让大家熟悉,后续还会可能对SpringSecurity自定义配置进行接管,我也相信这篇文章能将你带入这个,多多少少会有不少收获的。

📚 2、Spring注解接管到SpringBoot接管

⭐1、Spring接管控制

我们需要先熟悉下以前在Spring中注入配置组件的配置注解:

@Configuration:声明当前类为配置类代替xml文件。

@Bean:声明在方法上,将方法返回的对象注入到IOC容器当中,代替bean标签

@value:属性注入

@PropertySource:指定外部属性文件。

自己编写一个由Spring整合Druid的配置类,将其注入而非采用xml方式进行注入配置

DruidConfig.java

/**
 * 功能描述
 *
 * @author Alascanfu
 * @date 2022/1/25
 */
@Configuration
@PropertySource("classpath:db.properties")
public class DruidConfig {
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    
    @Value("${jdbc.url}")
    String url;
    
    @Value("${jdbc.username}")
    String username;
    
    @Value("${jdbc.password}")
    String password;
    
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}
  • 利用@Configuration注解添加到DruidConfig类上,使其成为Spring中的配置类,将其注入到IOC容器当中。
  • @PropertySource:将外部的配置文件中的属性导入其中,当然SpringBoot后面采用的是xxxProperty.class用来使其可以在配置文件中配置,这里先不讲后面再叙述。
  • @Value将我们外部配置文件中的属性的值注入到配置类属性
  • 通过@Bean注解将DataSource对象返回注入到IOC容器中,这样就可以完成替代配置文件中的配置了。

咱们通过debug来看看咱们的IOC容器中是否有已经配置好的DruidDataSource

@Controller
@ResponseBody
public class DruidController {

    @Autowired
    DataSource dataSource ;

    @RequestMapping("/dataSource")
    public String dataSource(){
        System.out.println(dataSource);
        return dataSource.toString();
    }
    
}

在这里插入图片描述
看到没 Druid的数据源配置已经被我们导入了QwQ

在这里插入图片描述
小付这里是因为连接的自己购买的阿里云服务器所以就en大家都懂的~

同样也看到了我们配置的属性了。

上述便是在Spring中通过注解来配置了数据源,我们只需要更改db.properties中的属性值,就可以对我们的数据进行改写。

⭐2、SpringBoot接管配置⭐

还没有学过SpringBoot的自动装配原理的同学看看这里哦~

SpringBoot的自动装配原理——其实真得就是你想的那么简单~

读过上述文章的同学一定了解了@ConfigurationProperties这个注解干了一件多么伟大的事情,他不仅会在咱们的application.properties|application.yaml文件中去寻找前缀为"xxx"的配置,还能将其替代@Value属性注入其中。

那咱们来试试~

DruidProperties.java

@ConfigurationProperties(prefix = "jdbc")
public class DruidProperties {
    
    private String driverClassName;
    private String url ;
    private String username;
    private String password;
    
    public String getDriverClassName() {
        return driverClassName;
    }
    
    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }
    
    public String getUrl() {
        return url;
    }
    
    public void setUrl(String url) {
        this.url = url;
    }
    
    public String getUsername() {
        return username;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
    public String getPassword() {
        return password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
}

不过有可能会出现爆红等
在这里插入图片描述

那咱们就点进去看看如何解决这个SpringBoot引起的问题。

在这里插入图片描述

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

将上述代码添加到对应的pom.xml文件中再试试。

此时就没有报错啦qwq

DruidAutoConfiguration.java

@Configuration
@EnableConfigurationProperties(DruidProperties.class)
public class DruidAutoConfiguration {
    @Autowired
    DruidProperties druidProperties;
    
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(druidProperties.getDriverClassName());
        dataSource.setUrl(druidProperties.getUrl());
        dataSource.setUsername(druidProperties.getUsername());
        dataSource.setPassword(druidProperties.getPassword());
        return dataSource;
    }
}

application.properties

jdbc.username=root
jdbc.password=123456
jdbc.url=jdbc:mysql://localhost:3306/springboot?serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useUnicode=true
jdbc.driverClassName=com.mysql.cj.jdbc.Driver

此时进行DEBUG测试,你再来看看是否将其注入到IOC容器了呢?

在这里插入图片描述

答案是肯定的,那肯定会有小伙伴问了,上述这些配置不是反而更加复杂了么?为什么还要说SpringBoot简化了配置呢???

  • 事实上只看到了表面,官网也给出了优点:松散绑定的配置让我们的软件框架更加灵活多变~,这就是SpringBoot的强大之处`。

在这里插入图片描述

在官方文档也在克制化的最后2.8Type-safe Configuration Properties中给出了对应的比较

  • @ConfigurationProperties支持元数据的同时还RelaxedBinding 这也就是松散绑定了。这就是他的优点以及好处,可能在小的项目中无法体现,但是当你看到了SpringBoot的自动装配原理中就是这样应用的,你就知道了他的强大之处了。

在这里插入图片描述

  • Relaxed binding:松散绑定
    • 不严格要求属性文件中的属性名与成员变量名一致支持驼峰中划线下划线等等转换,甚至支持对象引导。比如:user.friend.name:代表的是user对象中的friend属性中的name属性,显然friend也是对象@value注解就难以完成这样的注入方式。下列方式定义的配置文件也可以读取成成员变量driverClassName

properties

jdbc.driver_Class_Name=com.mysql.jdbc.Driver

yaml

jdbc:
  driver-class-name: com.mysql.jdbc.Driver

实际开发中的简化方式

当我们所在配置yaml文件中编写的属性只有一个Bean需要时,我们可以直接将其注入到返回注入Bean的方法当中将其注入。

注意该方法的使用前提是在对应属性存在set方法成立。

@Configuration
public class DruidAutoConfiguration {
    //SpringBoot会自动将与之对应的属性通过set方法进行注入到数据源中
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
}

🙊3、学习总结

上述的进行对Druid配置还可以根据Druid的github仓库中进行学习配置不单单是简单的连接数据库的四大属性,也可以对其他属性进行设置池化技术中的最小连接数最大连接数等等都可以进行配置,再按照上述的方法,先构建好一个xxxProperties的类用于支持xml文件中进行属性配置,在属性注入完毕之后,我们再通过构建xxxAutoConfiguration进行自动装配,将创建好的对象注入到IOC容器当中,SpringBoot原来已经配置好的自动装配类就会因为@ConditionOnMissingBean使其自己失效。这样一来我们进行的配置就会返回好咱们已经配置好的装配内容了。小付强烈推荐大家可以试试自己客制化一下SpringSecurity的自动配置来进行接管权限控制,会有不一样的天地哦,同时这样也可以加强学习SpringBoot的理解。如果你不着急可以等着小付更新到那里去哦~,已经写了好几天那个玩意了,头发已经不止掉了两根了QwQ冲冲冲,时间会给你的成果画上圆满的句号的

举报

相关推荐

0 条评论