1. 程式人生 > >Spring_使用外部屬性(6)

Spring_使用外部屬性(6)

Spring_使用外部屬性

1、在配置檔案裡配置 Bean 時, 有時需要在 Bean 的配置裡混入系統部署的細節資訊(例如: 檔案路徑, 資料來源配置資訊等). 而這些部署細節實際上需要和 Bean 配置相分離

2、Spring 提供了一個 PropertyPlaceholderConfigurer 的 BeanFactory 後置處理器, 這個處理器允許使用者將 Bean 配置的部分內容外移到屬性檔案中. 可以在 Bean 配置檔案裡使用形式為 ${var} 的變數, PropertyPlaceholderConfigurer 從屬性檔案里加載屬性, 並使用這些屬性來替換變數.

3、Spring 還允許在屬性檔案中使用 ${propName},以實現屬性之間的相互引用。

一般是如下面beans-properties.xml和Main.java 這樣寫:

比如配置資料庫:

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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


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

Main.java

package com.wgs.spring.beans.properties;

import java.sql.SQLException;

import javax.sql.DataSource;

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

import com.wgs.spring.beans.autowire.Address;
import com.wgs.spring.beans.autowire.Person;

import com.wgs.spring.beans.autowire.*;
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());
	}

}

執行結果為:


把配置檔案寫在xml檔案,再修改的時候會非常麻煩,修改spring的配置檔案的成本會比修改配置檔案的成本要高,故另外定義一個使用屬性檔案:db.properties

user=root
password=123456
driverclass=com.mysql.jdbc.Driver
jdbcurl=jdbc:mysql:///wang

在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:p="http://www.springframework.org/schema/p"
	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 http://www.springframework.org/schema/context/spring-context-4.0.xsd">


	<!-- 匯入屬性檔案 -->
	<context:property-placeholder location="classpath:db.properties"/>
	
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 
			<property name="user" value="root"></property>
		<property name="password" value="123456"></property>
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///wang"></property>
		 -->
		
		<!-- 使用外部化屬性檔案的屬性 -->
		<property name="user" value="${user}"></property>
		<property name="password" value="${password}"></property>
		<property name="driverClass" value="${driverclass}"></property>
		<property name="jdbcUrl" value="${jdbcurl}"></property>
		
	</bean>
</beans>

執行結果為:

[email protected]

相關推薦

Spring_使用外部屬性6

Spring_使用外部屬性1、在配置檔案裡配置 Bean 時, 有時需要在 Bean 的配置裡混入系統部署的細節資訊(例如: 檔案路徑, 資料來源配置資訊等). 而這些部署細節實際上需要和 Bean 配

AliOS-Things--linkkitapp 6上報屬性

 在上報屬性的時候遇到的很多坑,一直遇到: [err] TSL Property Assemble Failed: RGBColor.Red [err] TSL Property Assemble Failed: RGBColor.Green [err] TSL Property A

web前端6—— 標籤的屬性,分類,巢狀

屬性 HTML標籤可以設定屬性,屬性一般以鍵值對的方式寫在開始標籤中   1.HTML標籤除一些特定屬性外可以設定自定義屬性,一個標籤可以設定多個屬性用空格分隔,多個屬性不區分先後順序。 2.屬性值要用引號包裹起來,通常使用雙引號也可以單引號。 3.屬性和屬性值不區分大

linux命令學習6:ps命令

bytes 釋放 ice cti width kthread hellip 名稱 pts Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前運行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要

樹講解6——讓我們異或吧

!= 情侶 rst back cst getch 能夠 代碼 st表 洛谷——P2420 讓我們異或吧 題目描述 異或是一種神奇的運算,大部分人把它總結成不進位加法. 在生活中…xor運算也很常見。比如,對於一個問題的回答,是為1

C++傳智筆記6:socket客戶端發送報文接受報文的api接口

內存泄露 rcp 分配內存 strcpy light cpp tac 第三方 _file__ #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "stdlib.h" #include "string.

Windows Phone開發6:處理屏幕方向的改變

cati sources mon stack mar ber XML break pac 俺們都知道,智能手機可以通過旋轉手機來改變屏幕的顯示方向,更多的時候,對於屏幕方向的改變,我們要做出相應的處理,例如,當手機屏幕方向從縱向變為橫向時,可能要重新排列頁面上的控件以適應顯

Android的方法和屬性2

pin spinner 城市 android har lap ng- drawable -c 1.RadioButton(單選按鈕)   嵌入到RsdioGroup中實現單選效果   android:checkedButton="radio的id值"   int getC

說說Android應用的persistent屬性

bsp 是什麽 添加 mpat ltrace cleanup activity 異步 rip 1 啟動persistent應用 在Android系統中,有一種永久性應用。它們對應的AndroidManifest.xml文件裏,會將persistent屬性設為true

構建之法學習6

客戶 需求 現在 保持 變化 經理 論證 規格 沒有 本周學習的是第六章——敏捷流程 在軟件工程的語境裏,“敏捷流程”是一系列價值觀和方法論的集合。從2001年開始,一些軟件界的專家開始倡導“敏捷”的價值觀和流程,他們肯定了流行做法的價值,但是強調敏捷的做法更能帶來價值。

直播疑難雜癥排查6— 馬賽克嚴重

直播 馬賽克 花屏 碼率 編碼器 本文是 《直播疑難雜癥排查》系列的第六篇文章,我們重點來看看直播中常見的馬賽克問題。1. 馬賽克問題的表現馬賽克主要是指畫面中出現多處類似小方塊的圖像,導致畫面的局部或者整體看不清楚的情況。2. 馬賽克嚴重的問題排查2.1 視頻編碼參數配置原因視頻的畫質,

設計模式六大原則6:開閉原則

思考 外部 編程人員 恰恰 單一職責 何事 適應 擴展 分享 開閉原則 定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。 問題由來:在軟件的生命周期內,因為變化、升級和維護等原因需要對軟件原有代碼進行修改時,可能會給舊代碼中引入錯誤,也可能會使我們不得不對

使用excel進行數據挖掘6---- 預測

max 表示 jsb cast tail 用戶 roman order 報表 在配置環境後,能夠使用excel進行數據挖掘。 環境配置問題可參閱: http://blog.csdn.net/xinxing__8185/article/details/4644543

express 不是內部或外部命令windows解決方式

nbsp pop node js ans post tro window tracking users 請環境變量設置 註意 "D:\soft\nodejs\"這個是筆者自己安裝在電腦上的node js文件夾,請改動成自己的 假設安裝的express是4.X就要安

自定義屬性2

aps 按鈕 charset script 定義 type i++ element color 定義三個按鈕 點擊按鈕,出現A、B、C、D字母,點擊一下,出現一個 當按鈕字母為 D 的時候,繼續點擊又會重新回到 A 1 <!DOCTYPE HTML>

maven入門6maven的生命周期

人員 資源文件 清理 生成 單元測試框架 initial site 代碼 init 1. 三套生命周期 Maven擁有三套相互獨立的生命周期,它們分別為clean,default和site。 每個生命周期包含一些階段,這些階段是有順序的,並且後面的階段依賴於前面的階

Python基礎6_函數

傳遞 獲得 不執行 分配 參數 code else turn 依賴 一 為何要有函數? 不加區分地將所有功能的代碼壘到一起,問題是:   代碼可讀性差   代碼冗余   代碼可擴展差 如何解決?  函數即工具,事先準備工具的過程是定義函數,拿來就用指的就是函數調

springBoot6:web開發-模板引擎jsp

spring boot 一、新建工程 註意新建的工程下沒有webapp目錄eclipse下會自動創建webapp目錄這裏我們需要自動創建一個webapp目錄並創建WEB-INF。 對ServletInitializer.java進行說明 1、這個類相當於我們以前的web.xml 2、只有3.0以上才

學習用Node.js和Elasticsearch構建搜索引擎6:實際項目中常用命令使用記錄

nds 黃色 ati cat htm action last shard open 1、檢測集群是否健康。 curl -XGET ‘localhost:9200/_cat/health?v‘#後面加一個v表示讓輸出內容表格顯示表頭 綠色表示一切正常,黃色表示所有

6javascript的程序控制結構及語句-----1條件判斷

江湖 too 分支語句 copy 表達 demo oct alt javascrip 程序控制結構及語句 編程就是將現實應用,轉換為程序能夠讀得懂的語法語句。Javascript編程中對程序流程控制主要是通過條件判斷語句、循環控制語句及continue、break來完成的