SpringBoot之java配置应用

1、在Spring3.0开始,Spring官方就已经开始推荐使用java配置来代替传统的xml配置了,我们不妨来回顾一下

Spring的历史:
Spring1.0时代
在此时因为jdk1.5刚刚出来,注解开发并未盛行,因此一切Spring配置都是xml格式,想象一下所有的bean都用
xml配置,细思极恐啊,心疼那个时候的程序员2秒
Spring2.0时代
Spring引入了注解开发,但是因为并不完善,因此并未完全替代xml,此时的程序员往往是把xml与注解进行结
合,貌似我们之前都是这种方式。
Spring3.0及以后
3.0以后Spring的注解已经非常完善了,因此Spring推荐大家使用完全的java配置来代替以前的xml,不过似乎
在国内并未推广盛行。然后当Spring Boot来临,人们才慢慢认识到java配置的优雅。

2、尝试普通java配置(可用但不够强大,只能注入基本类型值)

SpringBoot中java配置主要靠java类和一些注解,比较常用的注解有:
@Configuration :声明一个类作为配置类,代替xml文件
@Bean :声明在方法上,将方法的返回值加入Bean容器,代替 标签
@Value :属性注入
@PropertySource :指定外部属性文件

我们接下来用java配置来尝试实现连接池配置:

  1. 在 pom.xml 文件中添加Druid连接池依赖如下

    dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>druid</artifactId>
    	<version>1.1.6</version>
    </dependency>
    
  2. 使用数据操作工具创建数据库 springboot_study
    在这里插入图片描述

  3. 然后在项目中创建 studyspringboot\src\main\resources\jdbc.properties 文件,内容如下

    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot_test
    jdbc.username=root
    jdbc.password=root
    

    在这里插入图片描述

  4. 编写 heima-springboot\src\main\java\com\itheima\config\JdbcConfig.java 如下

    package com.study.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    
    import javax.sql.DataSource;
    
    /**
     * @Author hekunming
     * @Date 2021/8/7 20:28
     * @Copyright
     */
    @Configuration
    @PropertySource("classpath:jdbc.properties")
    public class JdbcConfig {
    
    
        @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 druidDataSource=new DruidDataSource();
            druidDataSource.setDriverClassName(driverClassName);
            druidDataSource.setUrl(url);
            druidDataSource.setUsername(username);
            druidDataSource.setPassword(password);
            return druidDataSource;
        }
    
    
    
    }
    
    

    解读:
    @Configuration :声明我们 JdbcConfig 是一个配置类
    @PropertySource :指定属性文件的路径是: classpath:jdbc.properties
    通过 @Value 为属性注入值
    通过@Bean将 dataSource() 方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。
    然后我们就可以在任意位置通过 @Autowired 注入DataSource了

  5. 在 HelloController 中注入DataSource进行测试,改造代码如下:

    @RestController
    public class HelloController {
    
    	@Autowired
    	private DataSource dataSource;
    	
    	@GetMapping("hello")
    	public String hello() {
    		System.out.println("dataSource = " + dataSource);
    		return "hello, spring boot!";
    	}
    	
    }
    

    然后打断点,Debug运行并查看:
    在这里插入图片描述
    属性注入成功了!

3、Spring Boot的属性注入

Spring Boot的属性注入,属性文件的名称有变化,
默认的文件名必须是:application.properties或application.yml

在上面的案例中,我们实验了java配置方式。不过属性注入使用的是@Value注解。这种方式虽然可行,但是不够强大,因为它只能注入基本类型值。
在Spring Boot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。
1)新建 studyspringboot\src\main\java\com\itheima\config\JdbcProperties.java ,用于进行属性注入:

```
package com.study.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * @Author hekunming
 * @Date 2021/8/7 20:50
 * @Copyright
 *
 * ConfigurationProperties 从application配置文件中读取配置项
 * prefix 表示 配置项的前缀
 * 配置项类中的类变量名必须要与 前缀之后的配置项名称保持 松散绑定(相同)
 */
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
    private String url;
    private String username;
    private String driverClassName;
    private String password;

    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 getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

```

在类上通过@ConfigurationProperties注解声明当前类为属性读取类
prefix=“jdbc” 读取属性文件中,前缀为jdbc的值。
在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致
需要注意的是,这里我们并没有指定属性文件的地址,所以我们需要把jdbc.properties名称改为application.properties,这是Spring Boot默认读取的属性文件名

```
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot_study2
jdbc.username=root
jdbc.password=root
```

在这里插入图片描述

【注意】如果出现如下提示,项目也可以运行

在这里插入图片描述
如果要去掉上述的提示,则可以在 pom.xml 文件中添加如下依赖:

```
<dependency>
	<groupId> org.springframework.boot </groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<!--不传递依赖-->
	<optional>true</optional>
</dependency>
```

将 JdbcConfig 类原来全部注释掉或删除,修改为如下内容:

package com.study.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * @Author hekunming
 * @Date 2021/8/7 20:28
 */
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
    @Bean
    public DataSource dataSource(JdbcProperties jdbcProperties){
        DruidDataSource druidDataSource=new DruidDataSource();
        druidDataSource.setDriverClassName(jdbcProperties.getDriverClassName());
        druidDataSource.setUrl(jdbcProperties.getUrl());
        druidDataSource.setUsername(jdbcProperties.getUsername());
        druidDataSource.setPassword(jdbcProperties.getPassword());
        return druidDataSource;
    }


}

通过 @EnableConfigurationProperties(JdbcProperties.class) 来声明要使用 JdbcProperties 这个类的
对象
然后要使用配置的话;通过@Autowired注入JdbcProperties即可使用:

@Autowired
private JdbcProperties jdbcProperties ;

测试结果;与前面2的测试一样的。

4、Yaml配置文件

1、配置文件除了可以使用application.properties类型,还可以使用后缀名为:.yml或者.yaml的类型,也就是:
application.yml或者application.yaml
基本格式:
在这里插入图片描述

jdbc:
	driverClassName: com.mysql.jdbc.Driver
	url: jdbc:mysql://127.0.0.1:3306/springboot_test
	username: root
	password: root

把application.properties修改为application.yml进行测试。
如果两个配置文件都有,会把两个文件的配置合并,如果有重复属性,以properties中的为准。

2、多个Yaml配置文件

当一个项目中有多个yml配置文件的时候,可以以application-**.yml命名;在application.yml中配置项目使用激活
这些配置文件即可。
创建 application-abc.yml 文件如下:

study:
	url: http://www.baidu..com

在 application.yml 文件中添加如下配置:

#加载其它配置文件
spring:
	profiles:
		active: abc

多个文件名只需要写application-之后的名称,在多个文件之间使用,隔开。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41033385/article/details/120384061