Spring基于注解读取外部配置文件
一、使用注解@PropertySource
指定路径
使用@PropertySource指定配置文件路径,支持properties和XML的配置文件,但不支持yml。
属性赋值
可以用注解@Value对属性直接赋值、${}获取配置文件的值、SPEL表达式#{}。
- 直接赋值:@Value("namejack")
- 读取配置文件:@Value("${user.age}")
- 指定默认值:@Value("${user.desc:defaultdesc}")表示如果没有user.desc的配置,则赋值为defaultdesc
- 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") publicclassDbProperties{ @Value("${ps.datasource.driverClassName}") privateStringdriverClassName; @Value("${ps.datasource.jdbcUrl}") privateStringjdbcUrl; @Value("${ps.datasource.username}") privateStringusername; @Value("${ps.datasource.password}") privateStringpassword; @Value("${ps.datasource.minIdle}") privateintminIdle; @Value("${ps.datasource.maxPoolSize}") privateintmaxPoolSize; @Value("${ps.datasource.connectionTimeout}") privateintconnectionTimeout; @Value("${ps.datasource.idleTimeout}") privateintidleTimeout; publicStringgetDriverClassName(){ returndriverClassName; } publicvoidsetDriverClassName(StringdriverClassName){ this.driverClassName=driverClassName; } publicStringgetJdbcUrl(){ returnjdbcUrl; } publicvoidsetJdbcUrl(StringjdbcUrl){ this.jdbcUrl=jdbcUrl; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicintgetMinIdle(){ returnminIdle; } publicvoidsetMinIdle(intminIdle){ this.minIdle=minIdle; } publicintgetMaxPoolSize(){ returnmaxPoolSize; } publicvoidsetMaxPoolSize(intmaxPoolSize){ this.maxPoolSize=maxPoolSize; } publicintgetConnectionTimeout(){ returnconnectionTimeout; } publicvoidsetConnectionTimeout(intconnectionTimeout){ this.connectionTimeout=connectionTimeout; } publicintgetIdleTimeout(){ returnidleTimeout; } publicvoidsetIdleTimeout(intidleTimeout){ this.idleTimeout=idleTimeout; } @Override publicStringtoString(){ return"DbProperties{"+ "driverClassName='"+driverClassName+'\''+ ",jdbcUrl='"+jdbcUrl+'\''+ ",username='"+username+'\''+ ",password='"+password+'\''+ ",minIdle="+minIdle+ ",maxPoolSize="+maxPoolSize+ ",connectionTimeout="+connectionTimeout+ ",idleTimeout="+idleTimeout+ '}'; } }
二、使用Environment
/** *Environment可以获取classpath下配置的属性值,无需指定具体的配置文件。不支持yml */ @Component publicclassUserProperties{ @Autowired privateEnvironmentenv; publicStringgetUserName(){ returnenv.getProperty("user.name"); } publicStringgetPassword(){ returnenv.getProperty("user.password"); } }
三、使用PropertiesLoaderUtils
try{ Propertiesproperties=PropertiesLoaderUtils.loadAllProperties("config.properties"); System.out.println(properties.getProperty("user.name")); }catch(IOExceptione){ e.printStackTrace(); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。