Spring 通過Spring容器獲得資料來源物件並改進

cuixiaoming1994發表於2018-03-22

我們之前發現,可以把資料來源的基本連線配置配置進Spring的xml檔案中,這樣就可以通過Spring容器直接獲取配置好的資料來源了

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    <property name="jdbcUrl" value="jdbc:mysql:///test"></property>
    <property name="user" value="root"></property>
    <property name="password" value="root"></property>
</bean>

但是這樣會出現一個問題,那就是所有的配置都在Spring的配置檔案中,會導致很難找到要修改的欄位,而且,如果我們使用多個資料來源的話,每一個資料來源我們都需要修改一次;所以我們想辦法把這部分jdbc相關的配置拿出來

  • 1.我們在src目錄下新建一個jdbc.properties檔案,將取出的配置資訊寫在上面
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///test
jdbc.username=root
jdbc.password=root
  • 2.我們需要用到context名稱空間,和之前引入p名稱空間的方法一樣,在約束頭加入這樣一句
 xmlns:context="http://www.springframework.org/schema/context"
  • 3.使用context名稱空間的標籤,將properties檔案引入Spring容器
<!-- 載入jdbc.properties檔案  引入context名稱空間-->
<context:property-placeholder location="classpath:jdbc.properties"/>
  • 4.將資料來源引入Spring容器,並且使用從properties存入的資料進行設定
    這個用起來簡直和EL表示式一樣方便了,直接${存入的key}就可以獲的對應的value了,我們一般稱他為spEL表示式需要注意的是,一般配置的時候都要加上字首,這樣就可以保證key值唯一,不然會報錯
<!-- 資料來源DataSource的配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"></property>
    <property name="jdbcUrl" value="${jdbc.url}"></property>
    <property name="user" value="${username}"></property>
    <property name="password" value="${jdbc.password}"></property>
</bean>

雖然不同的資料來源的set方法不相同,初始使用的配置檔案也不同(比如C3P0使用xml),但是我們可以使用同一properties檔案設定基本連結配置,然後在Spring配置中加上不同的Bean.在修改的時候,我們只需要改一個配置,所有資料來源的配置都被修改了

回憶一下之前取properties資料的方法

使用ResourceBundle的靜態方法getBundle()獲取配置properties的資源束
然後就可以使用資源束的getString(key)來獲取value了

//讀取配置檔案,引數為properties的檔名(不帶字尾)
ResourceBundle rb = ResourceBundle.getBundle("jdbc");
String driver = rb.getString("jdbc.driver");
String url = rb.getString("jdbc.url");
String username = rb.getString("jdbc.username");
String password = rb.getString("jdbc.password");

另外的,Spring內建了一個資料來源
- 匯入spring-jdbc.jar和spring-tx.jar(事務相關)

它的使用方法和其他的差別不大

//建立資料來源物件
DriverManagerDataSource dataSource = new DriverManagerDataSource();
//設定資料庫的基本連線資訊
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///test");
dataSource.setUsername("root");
dataSource.setPassword("root");
//從資料來源中獲得連線資源
Connection connection = dataSource.getConnection();

相關文章