Java配置方式讀取外部的資源配置文件


通過@PropertySource可以指定讀取的配置文件,通過@Value注解獲取值,具體用法:

package cn.qlq;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration // 通過該注解來表明該類是一個Spring的配置,相當於一個xml文件
@ComponentScan(basePackages = "cn.qlq") // 配置掃描包
@PropertySource(value = { "classpath:jdbc.properties", "xxxxx", "yyyyy" }, ignoreResourceNotFound = true)
public class SpringConfig {

    @Bean // 通過該注解來表明是一個Bean對象,相當於xml中的<bean>
    public UserDao getUserDAO() {
        return new UserDao(); // 直接new對象做演示
    }

}

 

問題:

1.讀取多個配置文件:

 

2.如果文件不存在忽略錯誤:

 

 

打開@PropertySource注解源碼可以看到:

 

 

 

--------------------   配置數據庫連接池例子-------------

0.目錄:

 

db.properties

;;;;;;;;;;;;;;;;;;;;
;DataBaseConnection;
;;;;;;;;;;;;;;;;;;;;
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/maven
jdbc.username=sa
jdbc.password=123456

 

 

 

1. 導入依賴:

<!-- 連接池 -->
        <dependency>
            <groupId>com.jolbox</groupId>
            <artifactId>bonecp-spring</artifactId>
            <version>0.8.0.RELEASE</version>
        </dependency>

 

之前的Spring xml配置連接池:

 <!-- 定義數據源 -->
    <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
        destroy-method="close">
        <!-- 數據庫驅動 -->
        <property name="driverClass" value="${jdbc.driverClassName}" />
        <!-- 相應驅動的jdbcUrl -->
        <property name="jdbcUrl" value="${jdbc.url}" />
        <!-- 數據庫的用戶名 -->
        <property name="username" value="${jdbc.username}" />
        <!-- 數據庫的密碼 -->
        <property name="password" value="${jdbc.password}" />
        <!-- 檢查數據庫連接池中空閑連接的間隔時間,單位是分,默認值:240,如果要取消則設置為0 -->
        <property name="idleConnectionTestPeriod" value="60" />
        <!-- 連接池中未使用的鏈接最大存活時間,單位是分,默認值:60,如果要永遠存活設置為0 -->
        <property name="idleMaxAge" value="30" />
        <!-- 每個分區最大的連接數 -->
        <!-- 
            判斷依據:請求並發數
         -->
        <property name="maxConnectionsPerPartition" value="100" />
        <!-- 每個分區最小的連接數 -->
        <property name="minConnectionsPerPartition" value="5" />
    </bean>

 

2. 參考xml配置改造成java配置方式:

SpringConfig .java
package cn.qlq;


import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import com.jolbox.bonecp.BoneCPDataSource;

@Configuration // 通過該注解來表明該類是一個Spring的配置,相當於一個xml文件
@ComponentScan(basePackages = "cn.qlq") // 配置掃描包
@PropertySource(value = { "classpath:db.properties", "xxxxx", "yyyyy" }, ignoreResourceNotFound = true)
public class SpringConfig {

    @Bean // 通過該注解來表明是一個Bean對象,相當於xml中的<bean>
    public UserDao getUserDAO() {
        return new UserDao(); // 直接new對象做演示
    }
    @Value("${jdbc.url}")
    private String jdbcUrl;

    @Value("${jdbc.driverClassName}")
    private String jdbcDriverClassName;

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

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

    @Bean(destroyMethod = "close")
    public DataSource dataSource() {
        BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
        // 數據庫驅動
        boneCPDataSource.setDriverClass(jdbcDriverClassName);
        // 相應驅動的jdbcUrl
        boneCPDataSource.setJdbcUrl(jdbcUrl);
        // 數據庫的用戶名
        boneCPDataSource.setUsername(jdbcUsername);
        // 數據庫的密碼
        boneCPDataSource.setPassword(jdbcPassword);
        // 檢查數據庫連接池中空閑連接的間隔時間,單位是分,默認值:240,如果要取消則設置為0
        boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
        // 連接池中未使用的鏈接最大存活時間,單位是分,默認值:60,如果要永遠存活設置為0
        boneCPDataSource.setIdleMaxAgeInMinutes(30);
        // 每個分區最大的連接數
        boneCPDataSource.setMaxConnectionsPerPartition(100);
        // 每個分區最小的連接數    
        boneCPDataSource.setMinConnectionsPerPartition(5);
        return boneCPDataSource;
}


}

 

  

  注意:方法名字為Bean放入spring的Id,因此一般不加get

 解釋:

@Bean(destroyMethod = "close")是定義一個Bean,同時其銷毀方法為close(),類似於xml配置中的destroyMethod,打開Bean注解可以看到:

 

思考: 如何使用該DataSource對象?

  放入spring中,使用方法類似於平時的使用方法。

3.測試:

package cn.qlq;

import javax.sql.DataSource;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 測試類
 * 
 * @author liqiang
 *
 */
public class Test {

    public static void main(String[] args) {
        // 通過Java配置來實例化Spring容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

        DataSource dataSource = context.getBean(DataSource.class);
        System.out.println(dataSource);
        // 銷毀該容器
        context.destroy();
    }

}

 結果:

JDBC URL = jdbc:mysql://localhost:3306/maven, Username = sa, partitions = 1, max (per partition) = 100, min (per partition) = 5, idle max age = 30 min, idle test period = 60 min, strategy = DEFAULT

 

  

  注意:實例化容器是  AnnotationConfigApplicationContext

以前是:

BeanFactory

ApplicationContext

  ClassPathXmlApplicationContext

  FileSystemXmlApplicationContext

  XmlWebApplicationContext

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM