springboot(七)--引入properties配置文件注入bean

本篇,我们介绍下springboot中如何引入properties配置文件,以及如何将properties配置文件中键/值如何注入到spring的bean中。

笔者总结了下,使用较多的大概有两种方式:

一、使用@PropertySource和@Value

例如,配置jdbc连接池,需要使用到jdbc.properties配置文件 (druid数据库连接池)

DataSourceConfiguration.java

import javax.sql.DataSource;
 
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 com.alibaba.druid.pool.DruidDataSource;
 
@Configuration
@PropertySource(value = { "classpath:/jdbc.properties"})
public class DataSourceConfig {
 
       @Value("${jdbc.driverClassName}")
       private String driverClassName ;
        
       @Value("${jdbc.url}")
       private String   url ;
        
       @Value("${jdbc.username}")
       private String username ;
        
       @Value("${jdbc.password}")
       private String password ;
        
       @Value("${jdbc.initialSize}")
       private int  initialSize ;
          
      @Value("${jdbc.maxActive}")
      private int   maxActive ;
        
      @Value("${jdbc.minIdle}")
      private int   minIdle ;
       
      @Value("${jdbc.maxWait}")
      private long  maxWait ;
       
       @Value("${jdbc.removeAbandoned}")
      private boolean   removeAbandoned ;
       @Value("${jdbc.removeAbandonedTimeout}")
      private int   removeAbandonedTimeout ;
        
       @Value("${jdbc.timeBetweenEvictionRunsMillis}")
      private long timeBetweenEvictionRunsMillis ;
       @Value("${jdbc.minEvictableIdleTimeMillis}")
      private long minEvictableIdleTimeMillis ;
       @Value("${jdbc.validationQuery}") 
      private String validationQuery ;
       @Value("${jdbc.testWhileIdle}")
      private boolean testWhileIdle ;
       @Value("${jdbc.testOnBorrow}")
      private boolean testOnBorrow ;
       @Value("${jdbc.testOnReturn}")
      private boolean testOnReturn ;
       @Value("${jdbc.poolPreparedStatements}")
      private boolean poolPreparedStatements ;
        
       @Value("${jdbc.maxPoolPreparedStatementPerConnectionSize}")
      private int maxPoolPreparedStatementPerConnectionSize ;
      
 
          
 
        @Bean(initMethod="init",destroyMethod="close")
        public DataSource dataSource() {
            DruidDataSource  ds=new  DruidDataSource();
            ds.setDriverClassName(driverClassName);
            ds.setUrl(url);
            ds.setUsername(username);
            ds.setPassword(password);
            ds.setInitialSize(initialSize);
            ds.setMaxActive(maxActive);
            ds.setMinIdle(minIdle);
            ds.setMaxWait(maxWait);
            ds.setRemoveAbandoned(removeAbandoned);
            ds.setRemoveAbandonedTimeout(removeAbandonedTimeout);
             
            ds.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
            ds.setValidationQuery(validationQuery);
            ds.setTestWhileIdle(testWhileIdle);
            ds.setTestOnBorrow(testOnBorrow);
            ds.setTestOnReturn(testOnReturn);
             
            ds.setPoolPreparedStatements(poolPreparedStatements);
             
            ds.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
            return ds;
        }
     
}

jdbc.properties

#驱动全类名
jdbc.driverClassName = com.mysql.jdbc.Driver
#jdbc url
jdbc.url =jdbc:mysql://localhost:3306/sbdemo?useUnicode=true&characterEncoding=UTF8&useSSL=false
jdbc.username = root
jdbc.password = 123456
#初始化连接数
jdbc.initialSize = 3
#最大活跃连接数
jdbc.maxActive = 100
#最小空闲连接数
jdbc.minIdle = 2
#最大连接等待时间 毫秒
jdbc.maxWait = 60000
#超过时间限制是否回收
jdbc.removeAbandoned = true
#超时丢弃连接 1800秒    即30分钟
jdbc.removeAbandonedTimeout = 1800
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
jdbc.timeBetweenEvictionRunsMillis = 60000
#配置一个连接在池中最小生存的时间,单位是毫秒
jdbc.minEvictableIdleTimeMillis = 300000
#用来检测连接是否有效的sql,要求是一个查询语句	
jdbc.validationQuery = SELECT 1 FROM DUAL
#申请连接的时候检测
jdbc.testWhileIdle =true
#申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能
jdbc.testOnBorrow = false
#归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能 
jdbc.testOnReturn = false
#打开PSCache,并且指定每个连接上PSCache的大小
jdbc.poolPreparedStatements = true
jdbc.maxPoolPreparedStatementPerConnectionSize = 20
# 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:  监控统计stat   日志用的log4j 防御SQL注入的wall
#filters =stat,config
# 解密密码必须要配置的项 config, stat启用监控过滤器
# connectionProperties=config.decrypt\=true

二、使用@PropertySource和@ConfigurationProperties

  @ConfigurationProperties 可以一次性注入properties中指定前缀的所有字段(不指定前缀则注入所有字段),无须用@Value一个个字段的注入,例如项目中配置一个ftp连接池对象。

FTPConfigBean.java

@Component
@PropertySource("classpath:/ftp.properties")
@ConfigurationProperties(prefix="ftp")
public class FTPConfigBean {
     
    private String host ;
    private int port ;
    private String username;
    private String password;
    private int connectTimeOut;
    private String controlEncoding;
    private  int bufferSize;
    private int fileType;
    private  int dataTimeout;
    private boolean useEPSVwithIPv4;
    private  boolean  passiveMode;
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public int getPort() {
        return port;
    }
    public void setPort(int port) {
        this.port = port;
    }
    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 getConnectTimeOut() {
        return connectTimeOut;
    }
    public void setConnectTimeOut(int connectTimeOut) {
        this.connectTimeOut = connectTimeOut;
    }
    public String getControlEncoding() {
        return controlEncoding;
    }
    public void setControlEncoding(String controlEncoding) {
        this.controlEncoding = controlEncoding;
    }
    public int getBufferSize() {
        return bufferSize;
    }
    public void setBufferSize(int bufferSize) {
        this.bufferSize = bufferSize;
    }
    public int getFileType() {
        return fileType;
    }
    public void setFileType(int fileType) {
        this.fileType = fileType;
    }
    public int getDataTimeout() {
        return dataTimeout;
    }
    public void setDataTimeout(int dataTimeout) {
        this.dataTimeout = dataTimeout;
    }
    public boolean isUseEPSVwithIPv4() {
        return useEPSVwithIPv4;
    }
    public void setUseEPSVwithIPv4(boolean useEPSVwithIPv4) {
        this.useEPSVwithIPv4 = useEPSVwithIPv4;
    }
    public boolean isPassiveMode() {
        return passiveMode;
    }
    public void setPassiveMode(boolean passiveMode) {
        this.passiveMode = passiveMode;
    }
    @Override
    public String toString() {
        return "FTPConfigBean [host=" + host + ", port=" + port + ", username="
                + username + ", password=" + password + ", connectTimeOut="
                + connectTimeOut + ", controlEncoding=" + controlEncoding
                + ", bufferSize=" + bufferSize + ", fileType=" + fileType
                + ", dataTimeout=" + dataTimeout + ", useEPSVwithIPv4="
                + useEPSVwithIPv4 + ", passiveMode=" + passiveMode + "]";
    }
     
     
}

ftp.properties

ftp.host=192.168.9.130
ftp.port=21
ftp.username=myftp
ftp.password=123456


#ftp 连接超时时间 毫秒
ftp.connectTimeOut=5000
#控制连接  字符编码
ftp.controlEncoding=UTF-8
#缓冲区大小
ftp.bufferSize=1024
#传输文件类型   2表二进制
ftp.fileType=2
#数据传输超时 毫秒
ftp.dataTimeout=120000
#
ftp.useEPSVwithIPv4=false
#是否启用ftp被动模式
ftp.passiveMode=true

猜你喜欢

转载自blog.csdn.net/jasnet_u/article/details/81543107
今日推荐