Spring Boot 【三、Java 配置:以数据库连接池为例】

引言
  1. 在上一篇博客中,主要是一个 Spring Boot 框架下的 Demo,在上个案例中,从头到尾都没有除了引入 Spring Boot 框架所需要的步骤外,没有进行任何有关一个 web 项目运行需要的各种依赖,xml文件的配置等

  2. 但是,按照传统思路,如果需要配置一个数据库连接池的 Bean,需要输入一些数据库相关的信息如 url,username,password 等信息应该如何处理?

  3. 在传统的方式中,我们需要在 Bean 中添加以下的内容来配置数据库连接池相关的部分

     <!-- 配置连接池 -->
     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
           init-method="init" destroy-method="close">
         <property name="url" value="${jdbc.url}" />
         <property name="username" value="${jdbc.username}" />
         <property name="password" value="${jdbc.password}" />
     </bean>
    
  4. 而在 Spring Boot 中,我们才用了另一种方式来替代这种传统的方式:注解

Spring 历史
  • Spring 1.0 时代
    此时,JDK 1.5 方兴,在开发中使用注解的方式并未流行,此时更多的开发者选择使用 xml 的方式配置各种 bean
  • Spring 2.0 时代
    Spring 开发中,已经引入了注解开发,但此时注解开发不尽完善,虽然有所使用,但并未完全替代 xml方式,此时开发者更多的选择是将这两者结合,在之前学习的 SSM 等方式中,就是采用注解和 xml 结合的方式
  • Spring 3.0 时代
    3.0 时代以后,注解开发已经非常完善,Spring 官方也更多的推荐使用 Java 内配置的方式来替代旧有的 xml 方式,但是在国内并未推广开来。直到 Spring Boot 框架的流行,Java 配置才越来越多的被使用
  • Spring 现在版本
    我们常用的 Spring Framework 已经来到了 5.0 时代
    Spring Boot 也已经来到了 2.0 时代
    甚至官方网站主页都更推崇使用 Spring Boot 等最新的开发方式
    在这里插入图片描述
测试 Java 配置
  1. Java 配置主要是通过一些 Java 类 + 注解的方式来实现,较为常用的注解有
    1. @Configuration:声明一个类作为配置类,代替xml文件
    2. @Bean:声明在方法上,将方法的返回值加入Bean容器,代替标签
    3. @value:属性注入
    4. @PropertySource:指定外部属性文件
  2. 首先引入Druid连接池依赖
    在这里插入图片描述
  3. 创建一个jdbc.properties文件,编写jdbc属性
    在这里插入图片描述
  4. 编写一个类来替代 xml 文件
    在这里插入图片描述
  5. 于这个类内配置
    在这里插入图片描述
  6. 对于 5 中代码的解读
    1. @Configuration:声明 JdbcConfig 是一个配置类
    2. @PropertySource:指定属性文件的路径是: classpath:jdbc.properties
    3. 通过@Value为属性注入值
    4. 通过@Bean将 dataSource()方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入 Spring 容器中
  7. 至此,就可以在任意位置通过@Autowired注入DataSource了
  8. 我们在TestController中进行加入断点,进行 Debug 模式测试,观察这种注入值的方式是否成功
    在这里插入图片描述
  9. 观察运行情况
    在这里插入图片描述
  10. 可以发现,通过这种方式可以成功注入属性值
Spring Boot 提供的属性注入方式
  1. 在上文中,我们是用的是 Spring 自带自带的 @Value 注解方式。
    通过 @Value 注解可以成功的注入属性,但使用 @Value 注解有一个弊端,即 @Value 注解只能注入基本数据类型的值。
  2. 在 Spring Boot 框架中继承了这一方式,并对它进行了优化,支持任意数据类型值的注入
方式一
  1. 新建属性注入类
    在这里插入图片描述

解读:

  1. @ConfigurationProperties注解:声明当前类为属性读取类
  2. @Data 注解:在类之上加此注解,会自动生成所有属性的 getter,setter,tostring 等方法
  3. 这里并未对读取类的路径做出说明,是因为将 jdbc.properties 名称改为 application.properties 之后,Spring Boot 默认就会读取这个文件(固定写法)
  4. 在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致,我们在 @ConfigurationProperties 注解中加入了前缀,这里为除去前缀之后的名称,如图
    在这里插入图片描述
  1. 在JdbcConfig中使用这个属性
    在这里插入图片描述

解读:

  1. @EnableConfigurationProperties(JdbcProperties.class)来声明要使用JdbcProperties这个类的对象
  2. @Configuration:声明这个文件是一个配置类
  3. @Bean:声明有@Bean的方法参数注入
  1. 测试结果
    在这里插入图片描述
  2. @ConfigurationProperties 注解和 @Value
    在这里插入图片描述
方式二
  1. 事实上,方式一是针对于一个配置属性,多个地方都会调用的情况下。但是如果一段属性事先已经可以预知仅会被一个 Bean 所使用,那么,针对方式一就有了更多的优化
  2. 即可直接在需要使用的地方声明即可
    在这里插入图片描述

解读:

  1. 这种方法使用的前提:一段属性仅会被一个 Bean 使用
  2. 仅需要 @ConfigurationProperties 注解,就会自动找到 application 中前缀为 jdbc ,且是 DataSource 类型内是否有以 jdbc 为前缀的属性的相对应的 set 方法,如果有,则自动配置
总结
  1. 这篇博文主要是关于如何使用 Java 配置的方式替代 xml 配置
  2. 以及使用 Spring Boot 框架之后,在原生 Java 属性输入注解 @Value 的基础上扩展出来的两种方法
  3. 几个重要的注解
    1. @Configuration:声明这是一个配置类,替代 xml
    2. @Bean:声明在方法上,将方法的返回值加入Bean容器,代替< bean >标签
    3. @ConfigurationProperties:声明当类为属性读取类(当属性类名为 application.properties 时,Spring Boot 会作为默认类进行读取,此时无需声明路径)
    4. @ConfigurationProperties(prefix = “???”):prefix="jdbc"读取属性文件中,前缀为 ??? 的值
    5. @Data:写在 POJO 类前,相当于getter,setter,equals(),hashCode(),toString()等全部方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值