Spring基于注解读取外部配置文件

 更新时间:2020年12月04日 10:33:13   作者:codedot  
这篇文章主要介绍了Spring基于注解读取外部配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、使用注解@PropertySource

指定路径

使用 @PropertySource 指定配置文件路径,支持 properties 和 XML 的配置文件,但不支持 yml。

属性赋值

可以用注解 @Value 对属性直接赋值、${}获取配置文件的值、SPEL表达式#{}。

  • 直接赋值:@Value("name jack")
  • 读取配置文件:@Value("${user.age}")
  • 指定默认值:@Value("${user.desc:default desc}") 表示如果没有user.desc的配置,则赋值为default desc
  • SPEL表达式:@Value("#{'${user.username}'?.toUpperCase()}") 表示将从配置文件读取的值转为大写,?可以不填,表示如果没有user.username的配置,则忽略

例子

config.properties内容

ps.datasource.driverClassName=com.mysql.jdbc.Driver
ps.datasource.jdbcUrl=jdbc:mysql://localhost:3306/spring?useTimezone=true&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&tcpRcvBuf=1024000&useOldAliasMetadataBehavior=true&useSSL=false&rewriteBatchedStatements=true&useAffectedRows=true
ps.datasource.username=root
ps.datasource.password=root
ps.datasource.minIdle=1
ps.datasource.maxPoolSize=10
ps.datasource.connectionTimeout=3000
ps.datasource.idleTimeout=300000

配置类

/**
 * 使用@PropertySource指定具体的配置文件,用@Value设置具体的属性值, 不支持yml
 */
@Component
@PropertySource("classpath:config.properties")
public class DbProperties {

  @Value("${ps.datasource.driverClassName}")
  private String driverClassName;
  @Value("${ps.datasource.jdbcUrl}")
  private String jdbcUrl;
  @Value("${ps.datasource.username}")
  private String username;
  @Value("${ps.datasource.password}")
  private String password;
  @Value("${ps.datasource.minIdle}")
  private int minIdle;
  @Value("${ps.datasource.maxPoolSize}")
  private int maxPoolSize;
  @Value("${ps.datasource.connectionTimeout}")
  private int connectionTimeout;
  @Value("${ps.datasource.idleTimeout}")
  private int idleTimeout;

  public String getDriverClassName() {
    return driverClassName;
  }

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

  public String getJdbcUrl() {
    return jdbcUrl;
  }

  public void setJdbcUrl(String jdbcUrl) {
    this.jdbcUrl = jdbcUrl;
  }

  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;
  }

  public int getMinIdle() {
    return minIdle;
  }

  public void setMinIdle(int minIdle) {
    this.minIdle = minIdle;
  }

  public int getMaxPoolSize() {
    return maxPoolSize;
  }

  public void setMaxPoolSize(int maxPoolSize) {
    this.maxPoolSize = maxPoolSize;
  }

  public int getConnectionTimeout() {
    return connectionTimeout;
  }

  public void setConnectionTimeout(int connectionTimeout) {
    this.connectionTimeout = connectionTimeout;
  }

  public int getIdleTimeout() {
    return idleTimeout;
  }

  public void setIdleTimeout(int idleTimeout) {
    this.idleTimeout = idleTimeout;
  }

  @Override
  public String toString() {
    return "DbProperties{" +
        "driverClassName='" + driverClassName + '\'' +
        ", jdbcUrl='" + jdbcUrl + '\'' +
        ", username='" + username + '\'' +
        ", password='" + password + '\'' +
        ", minIdle=" + minIdle +
        ", maxPoolSize=" + maxPoolSize +
        ", connectionTimeout=" + connectionTimeout +
        ", idleTimeout=" + idleTimeout +
        '}';
  }
}

二、使用Environment

/**
 * Environment可以获取classpath下配置的属性值,无需指定具体的配置文件。 不支持yml
 */
@Component
public class UserProperties {

  @Autowired
  private Environment env;

  public String getUserName() {
    return env.getProperty("user.name");
  }

  public String getPassword() {
    return env.getProperty("user.password");
  }
}

三、使用PropertiesLoaderUtils

try {
      Properties properties = PropertiesLoaderUtils.loadAllProperties("config.properties");
      System.out.println(properties.getProperty("user.name"));
    } catch (IOException e) {
      e.printStackTrace();
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java中LinkedHashSet的源码剖析

    Java中LinkedHashSet的源码剖析

    这篇文章主要介绍了Java中LinkedHashSet的源码剖析,LinkedHashSet是HashSet的子类,LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表,需要的朋友可以参考下
    2023-09-09
  • Java简易登录注册小程序

    Java简易登录注册小程序

    这篇文章主要为大家详细介绍了Java图形界面开发,简易登录注册小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • java父子节点parentid树形结构数据的规整

    java父子节点parentid树形结构数据的规整

    这篇文章主要介绍了java父子节点parentid树形结构数据的规整,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • JDBC获取数据库连接由浅入深

    JDBC获取数据库连接由浅入深

    大家好,本篇文章主要讲的是JDBC获取数据库连接由浅入深,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Java Stream 流中 Collectors.toMap 的用法详解

    Java Stream 流中 Collectors.toMap 的用法详解

    这篇文章主要介绍了Stream 流中 Collectors.toMap 的用法,Collectors.toMap()方法是把List转Map的操作,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Spring实战之使用@Resource配置依赖操作示例

    Spring实战之使用@Resource配置依赖操作示例

    这篇文章主要介绍了Spring实战之使用@Resource配置依赖操作,结合实例形式分析了Spring使用@Resource配置依赖具体步骤、实现及测试案例,需要的朋友可以参考下
    2019-12-12
  • Mybatis中拦截器的简单实现方法

    Mybatis中拦截器的简单实现方法

    这篇文章主要给大家介绍了关于Mybatis中拦截器的简单实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Java中Double、Float类型的NaN和Infinity的具体使用

    Java中Double、Float类型的NaN和Infinity的具体使用

    Java在处理浮点数运算时,提供了NaN和Infinity两个常量,本文主要介绍了Java中Double、Float类型的NaN和Infinity的具体使用,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • java中File类的构造函数及其方法

    java中File类的构造函数及其方法

    这篇文章主要介绍了java中File类的构造函数及其方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • jvm堆外内存排查图文举例详解

    jvm堆外内存排查图文举例详解

    Java应用程序通过直接方式从操作系统中申请的内存,叫堆外内存,这篇文章主要给大家介绍了关于jvm堆外内存排查的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12

最新评论