1. 程式人生 > 其它 >spring與多種資料來源的配置 合輯 Web.xml配置詳解之context-param

spring與多種資料來源的配置 合輯 Web.xml配置詳解之context-param

主要分為三步:

1、引入properties配置檔案

2、配置資料來源

3、配置jdbc模板

下面是例項:

 

1、spring與jdbc

 <!--自動掃描包-->
<context:component-scan base-package="cn.com.sise.dao"/>

<!-- 0、引入dbc.properties屬性檔案 -->
<context:property-placeholder location="classpath:jdbc/jdbc.properties"/>

<!-- 1、使用org.springframework.jdbc.datasource.DriverManagerDataSource

說明:DriverManagerDataSource建立連線是隻要有連線就新建一個connection,根本沒有連線池的作用。 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>

<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

<!-- 2配置Jdbc模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 預設必須使用資料來源 -->
<property name="dataSource" ref="dataSource"/>

</bean>

2、spring與dbcp

<!--    1 掃描包-->
<context:component-scan base-package="cn.com.sise"/>
<!-- 2 引入資料庫配置檔案-->
<context:property-placeholder location="classpath:dbcp/dbcp.properties"/>
<!-- 3 配置資料來源-->
<bean id="dataSource2" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 4 配置dbcp模板-->
<bean id="jdbcTemplate2" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource2"/>
</bean>

3、spring與c3p0


<!-- 1 掃描包-->
<context:component-scan base-package="cn.com.sise"/>
<!-- 2 引入資料庫配置檔案-->
<context:property-placeholder location="classpath:c3p0/c3p0.properties"/>
<!-- 3 配置資料來源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 4 配置dbcp模板-->
<bean id="jdbcTemplate2" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>

4、spring與druid   通常應用在javaweb,

介紹:(我也是剛剛接觸)

  Druid阿里巴巴開發的號稱為監控而生的資料庫連線池,目前最好的資料庫連線池。

特點:

1、替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴充套件性好的資料庫連線池。

2、可以監控資料庫訪問效能,Druid內建提供了一個功能強大的StatFilter外掛,能夠詳細統計SQL的執行效能,這對於線上分析資料庫訪問效能有幫助。

3、資料庫密碼加密。直接把資料庫密碼寫在配置檔案中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支援PasswordCallback。

4、SQL執行日誌,Druid提供了不同的LogFilter,能夠支援Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的資料庫訪問情況。

5、擴充套件JDBC,如果你要對JDBC層有程式設計的需求,可以通過Druid提供的Filter機制,很方便編寫JDBC層的擴充套件外掛。

如圖:

 

 

 

 

一、xml配置四個步: 

1、引入properties配置檔案

2、配置資料來源

3、配置jdbc模板

4、配置SQL監控

 

二、詳細:

1、引入druid的依賴

2、xml配置

<context:component-scan base-package="cn.com.sise"/>

<!-- 1、資料來源配置 -->
<context:property-placeholder location="classpath:druid.properties"/>

<!--2、配置資料來源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- 資料來源驅動類可不寫,Druid預設會自動根據URL識別DriverClass -->
<property name="driverClassName" value="${jdbc.driver}" />
<!-- 基本屬性 urluserpassword -->
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 初始化連線大小 -->
<property name="initialSize" value="1"/>
<!-- 連線池最大使用連線數量 -->
<property name="maxActive" value="10"/>
<!-- 連線池最小空閒 -->
<property name="minIdle" value="1"/>
<!-- 獲取連線最大等待時間 -->
<property name="maxWait" value="10000"/>
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置監控統計攔截的filters,去掉後監控介面sql無法統計 -->
<property name="filters" value="stat" />
<!--監控SQL語句-->
<property name="proxyFilters">
<list>
<ref bean="stat-filter"/>
</list>
</property>
</bean>

<!--3、配置SQL監控-->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<!--SQL記錄 預設值為3000,也就是3-->
<property name="slowSqlMillis" value="5000"/>
<property name="logSlowSql" value="true"/>
<!--SQL合併配置-->
<property name="mergeSql" value="true"/>
</bean>

<!-- 4、配置Jdbc模板 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 預設必須使用資料來源 -->
<property name="dataSource" ref="dataSource"/>
</bean>

3、配置web.xml

<!-- 1、監控SQL情況 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<!--允許使用者清統計資料-->
<init-param>
<param-name>resetEnable</param-name>
<param-value>false</param-value>
</init-param>
<!--使用者名稱-->
<init-param>
<param-name>loginUsername</param-name>
<param-value>admin</param-value>
</init-param>
<!--密碼-->
<init-param>
<param-name>loginPassword</param-name>
<param-value>admin</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>

<!--2、連線池啟用Web監控統計功能start -->
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!--3、初始化引數-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:DruidBean.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<!--4、配置首頁-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

 

**********************************************************************************************************************************************************************************************************************************

瞭解:

Web.xml配置詳解之context-param

<context-param>  
<param-name>contextConfigLocation</param-name>  
<param-value>contextConfigLocationValue></param-value>  
</context-param>  

作用:該元素用來宣告應用範圍(整個WEB專案)內的上下文初始化引數。

param-name 設定上下文的引數名稱。必須是唯一名稱

param-value 設定的引數名稱的值

 

  • 初始化過程:
    1. 在啟動Web專案時,容器(比如Tomcat)會讀web.xml配置檔案中的兩個節點<listener>和<contex-param>。
    2. 接著容器會建立一個ServletContext(上下文),應用範圍內即整個WEB專案都能使用這個上下文。
    3. 接著容器會將讀取到<context-param>轉化為鍵值對,並交給ServletContext。
    4. 容器建立<listener></listener>中的類例項,即建立監聽(備註:listener定義的類可以是自定義的類但必須需要繼承ServletContextListener)。
    5. 在監聽的類中會有一個contextInitialized(ServletContextEvent event)初始化方法,在這個方法中可以通過event.getServletContext().getInitParameter("contextConfigLocation") 來得到context-param 設定的值。在這個類中還必須有一個contextDestroyed(ServletContextEvent event) 銷燬方法.用於關閉應用前釋放資源,比如說資料庫連線的關閉。
    6. 得到這個context-param的值之後,你就可以做一些操作了.注意,這個時候你的WEB專案還沒有完全啟動完成.這個動作會比所有的Servlet都要早。

由上面的初始化過程可知容器對於web.xml的載入過程是context-param >> listener  >> fileter  >> servlet