1.新创建一个外部资源文件 命名为jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/zcgs
jdbc.username=root
jdbc.password=root
2.创建一个配置类在项目启动的时候就加载配置
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 李康
 * @version v1.0.0
 **/
@Configuration
@PropertySource("classpath:jdbc.properties") //加载外部资源文件
public class JdbcConfig {
    @Value("${jdbc.driverClassName}") //从配置文件中读取值
    String driveClassName;

    @Value("${jdbc.url}")
    String url;

    @Value("${jdbc.username}")
    String username;

    @Value("${jdbc.password}")
    String password;

    @Bean(name = "data")  //xml中的bean标签  这里的bean注入IOC容器
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driveClassName);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }

 

这里的@PropertySource注解表示的是加载资源文件的位置,idea上写classpath的时候可以Alt+/使用提示
@Value表示读取资源文件中的变量并加载进来
@Bean 表示将方法的返回值加入bean对象,这个注解里面有个name属性,一般可以不加。我在注入属性的时候我用Autowired比较多,Autowired注入的时候是按照类型来注入的,如果这个时候有2个同样的类型,例如你在下面再写一个
返回值为Datasoure的bean注入进去,这个时候你就需要加上Qualifier注解来配合使用,这个时候就等同于@Resource注解,推荐使用@Resource,但是我比较懒,就算了哈哈。 这个时候基本就OK了 你可以在三层架构里面去使用
以上是纯Java读取资源文件的配置,上面的缺陷在于只能注入基本类型值,且严格一致springboot的属性注入是松散绑定的

      Relaxed binding:松散绑定

  • 不严格要求属性文件中的属性名与成员变量名一致。支持驼峰,中划线,下划线等等转换,甚至支持对象引导。比如:user.friend.name:代表的是user对象中的friend属性中的name属性,显然friend也是对象。@value注解就难以完成这样的注入方式。
  • meta-data support:元数据支持,帮助IDE生成属性提示(写开源框架会用到)。
标准写法:springboot读取外部资源文件并注入
1.创建一个config类读取.yml或者.properties文件中的值
/**
 * @author 李康
 * @version v1.0.0
 * @date 2020/12/21 16:02
 **/
@Configuration
public class JdbcSpringbootConfig {
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }
}
这样就可以直接在其他文件中进行注入了,这里没有set值的原因是再找配置类的时候会反射一个set方法,刚好datasoures里面也有这个方法所以直接可以赋值使用