hualinux spring 3.10:使用外部屬性文件(新手必看)

目錄

一、知識點

二、配置例子

2.1 配置一個數據庫連接文件

2.1.1 下載c3p0

2.1.2 下載 mysql-connector-java

2.1.3 下載 mchange-commons-java

2.1.4 複製jar包到項目的lib中

2.1.5 安裝mysql數據庫

2.2 創建xml配置

2.2 使用外部屬性文件


一般java代碼編譯生成jar文件後,一般不能進行修改,我們寫代碼的時候往往會有數據庫配置,如果放在java代碼中就寫死了,如果數據庫變動的話就不方便修改還得找到java代碼,重新編譯。

我們一般做法把需要修改的部分變成配置文件方式就在外部,然後用java導入該配置文件讀取數據即可。

一、知識點

  • 在配置文件裏配置 Bean 時, 有時需要在 Bean 的配置裏混入系統部署的細節信息(例如: 文件路徑, 數據源配置信息等). 而這些部署細節實際上需要和 Bean 配置相分離
  • Spring 提供了一個 PropertyPlaceholderConfigurer 的 BeanFactory 後置處理器, 這個處理器允許用戶將 Bean 配置的部分內容外移到屬性文件中. 可以在 Bean 配置文件裏使用形式爲 ${var} 的變量, PropertyPlaceholderConfigurer 從屬性文件里加載屬性, 並使用這些屬性來替換變量.
  • Spring 還允許在屬性文件中使用 ${propName},以實現屬性之間的相互引用。

 

二、配置例子

2.1 配置一個數據庫連接文件

配置一個數據庫連接,需要的jar包爲

2.1.1 下載c3p0

c3p0: https://mvnrepository.com/artifact/com.mchange/c3p0

下面那個是舊版本,2007年就不更新了,點進去可以看到提示已經移到了C3p0了

點上面也會進入c3p0界面,目前最新版本爲0.9.5.5

 直接把jar包下載下來就行了

2.1.2 下載 mysql-connector-java

mysql-connector-java可以直接打開mysql官網的Connector/j windos下載頁面。它提供的是目前mysql的最新版本8.0.20

點“No thanks, just start my download.”即會彈出下載對話框

下載了zip包,我們只需要把裏裏面的“mysql-connector-java-8.0.20.jar”文件複製出來,先放着,其它不要,後面會用到。

也可以去maven倉庫搜索“mysql-connector-java”找到“MySQL Connector/J”並點擊,

裏面有很多版本,有8.0.x有6.0.x有5.0.x

這裏做解釋一下:

8.0.x:只適合mysql8.0系列

6.0.x:只適合mysql6系列

5.0.x:只適合mysql5系列。

這裏選擇8.0.20 就行了

2.1.3 下載 mchange-commons-java

弄c3p0還需要下載多一個包 mchange-commons-java,我這裏直接去maven下載,目前最新版本爲0.2.20

 

ps:如果不下載 mchange-commons-java.jar包的話,會報如下錯誤:

nested exception is java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector

 

2.1.4 複製jar包到項目的lib中

把上面的 mysql-connector-java-8.0.20.ja 、 c3p0-0.9.5.5.jar、mchange-commons-java-0.2.20.jar 複製到項目下的lib目錄中,如下圖所示:

從上圖中看到紅框前面都沒有白色小三角,說明是沒有解壓讀取的,需要配置一下idea添加一下jar包就行了

爲了方便我也添加一個lib組

 

重新看項目下lib目錄的2個jar包,發現已經被識別出來了

2.1.5 安裝mysql數據庫

爲了方便我直接安裝phpStudy,如果不懂怎麼安裝可以看我的文章《hualinux java 1.6:idea連接mysql8進行數據查詢

再建立一個用戶名和密碼,我這裏還建立一個空的數據庫爲hua

 

2.2 創建xml配置

src右擊-->new-->XML Configuration File-->Spring config-->輸入名字“beans-properties” 

     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                 <property name="user" value="root"/>
                <property name="password" value="root"/>
                <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
                <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8"/>
     </bean>

注:上面的配置mysql一定要安裝,並且運行,用戶名和密碼正確,纔可以

phpStudy數據庫不指定時區的,所以我指定了一下

src-->com.hualinux.beans.properties.Main.java

package com.hualinux.beans.properties;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.sql.DataSource;
import java.sql.SQLException;

public class Main {
    public static void main(String[] args) throws SQLException {
        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-properties.xml");

        DataSource dataSource= (DataSource) ctx.getBean("dataSource");
        System.out.println(dataSource.getConnection());
    }

運行結果爲:

com.mchange.v2.c3p0.impl.NewProxyConnection@7b4c50bc [wrapping: com.mysql.cj.jdbc.ConnectionImpl@5884a914]

 

2.2 使用外部屬性文件

上面bean中配置了數據庫的連接,但這些基本信息最好還是把它拿出來放在基礎配置文件中

Spring 提供了一個 PropertyPlaceholderConfigurer 的 BeanFactory 後置處理器, 這個處理器允許用戶將 Bean 配置的部分內容外移到屬性文件中. 可以在 Bean 配置文件裏使用形式爲 ${var} 的變量, PropertyPlaceholderConfigurer 從屬性文件里加載屬性, 並使用這些屬性來替換變量.

src-->new-->file-->db.yml

user: root
password: root
driverClass: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8

PS:yaml格式冒號後面一定要有空格,有興趣的可以看一下《YAML 語言教程

beans-properties.xml配置文件修改如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

        <!-- 導入屬性文件-->
        <context:property-placeholder location="db.yml" />

        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <property name="user" value="${user}"/>
                <property name="password" value="${password}"/>
                <property name="driverClass" value="${driverClass}"/>
                <property name="jdbcUrl" value="${jdbcUrl}"/>
        </bean>
        

        <!--        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                         <property name="user" value="root"/>
                        <property name="password" value="root"/>
                        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
                        <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/hua?serverTimezone=GMT%2B8"/>
                </bean>-->


</beans>

com.hualinux.beans.properties.Main.java代碼不如,運行一下,結果爲:

com.mchange.v2.c3p0.impl.NewProxyConnection@45efd90f [wrapping: com.mysql.cj.jdbc.ConnectionImpl@4b8729ff]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章