天天看點

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

公司老項目的背景,均是基于spring架構搭建,其中還用到了log4j.jar等開源架包。在新項目中,則是spring和hibernate架構均有使用,利用了hibernate架構,來實作持久化,簡化sql操作等。Hibernate配置檔案可以有兩種格式,一種是 hibernate.properties,另一種是 hibernate.cfg.xml。後者稍微友善一些,當增加hbm映射檔案的時候,可以直接在 hibernate.cfg.xml 裡面增加,不必像 hibernate.properties 必須在初始化代碼中加入。我們新項目中使用的是hibernate.cfg.xml格式。不過在本文中不将細述,後續有機會再補上。

公司項目中,中間件主要有tomcat,webshpere,WebLogic。以下,将對項目中spring基本配置,log4j的配置,還有中間件的相關參數配置做一個初步的介紹。

GISV13中的配置涉及到了SpringMVC,IOC,AOP, Quartz方面的配置。配置的實作是通過注記配置和XML配置來合作實作。這裡,我将按照Spring的配置流程,将其他幾個方面的配置融合其中,來進行全面解析。

   Web程式中,當中間件啟動時,中間件會首先讀取web.xml中的配置。在web.xml中可以配置監聽器,過濾器,servlet映射等等。在Spring架構中,我們主要需配置容器初始化時讀取的spring容器配置檔案的路徑以及springMVC中的分發器DispatcherServlet。

在GISV13的web.xml中,我們定義了如下内容:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例
服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

InitGISConfigServlet定義了容器啟動時,首先要運作這個方法。然後servletname為MVC的這部分便是定義了springMVC的分發器以及此servlet所對應的加載配置檔案的路徑。在web.xml中可以配置多個這樣的servlet。截圖中這段xml的配置是指,當字尾名為.htm時,則觸動springMVC的分發器。關于此servlet的配置在/WEB-INF/classes/applicationContext-servlet.xml位址下。Servlet的配置檔案有其預設的位址,此處為顯示表示。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

首先,在配置檔案中需要定義springMVC的引用空間以及配置格式兩項。

為了支援注解格式,添加了如下配置:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

此配置會在配置檔案被容器加載時,掃面添加了注解的代碼,完成MVC的相關配置。在GISV13中,運用了@Controller, @Service來定義控制層以及DAO中的實作層,通過@RequestMapping來進行URL與Controller之間的關聯。

在SpringMVC中通過Controller傳回的資料會被包裝在ModelAndView這個類裡。此類中包含有傳回的具體資料以及傳回的資料指向的URL。

在GISV13中與此相關的配置為:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

此配置中為ModelAndView中的url預設添加了一個字首,以及為url所指向的檔案名後面添加了檔案格式,即将傳回的url轉換成/home/url/file.jsp的樣式。

同時此配置中也定義了視圖和視圖解譯器:視圖為org.springframework.web.servlet.view.JstlView,視圖解譯器為:org.springframework.web.servlet.view.InternalResourceViewResolver。

其實InternalResourceViewResolver預設的視圖便是JstlView。此處不配置也可以。

視圖解譯器有很多種,根據不同的視圖以及用途而定。SpringMVC中支援對PDF,XML還有上傳下載下傳檔案等視圖的支援。

在GISV13中,IOC相關的配置也是通過注解和XML共同完成的。與容器相關的配置位址在web.xml中已經配成,在容器啟動時便會進行加裝。這裡我們針對利用了IOC的ORM來進行講解。

此處主要有兩項:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

即資料庫驅動以及資料庫位址。

對于不同的資料庫,spring配置資料庫時會引用不同的類,GISV13支援的資料庫是Oracle,是以此處引用的類是BasicDataSource。具體配置如下:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

此配置為容器啟動時,執行個體化BasicDataSource類,property中的每一個對象均為對象初始化時的屬性配置,這些屬性包含了驅動類型,連接配接位址,最大連接配接數等。在之前配置的jdbc.properties中的類容,可在此處直接使用。

在系統代碼中,通過@Autowired,将執行個體化後的對象,在容器初始化時注入到注解所對應的對象中。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

便可以将spring中包含了資料庫配置而自動執行個體化好後的jdbc對象注入到注解對象中。我們一般使用的是JdbcTemplate類,此類将資料庫操作進行了淺包裝,至此增删查改以及存儲過程的調用等,避免了代碼中多次使用容錯機制等重複代碼。

AOP是Spring的一大亮點,其涉及到的概念非常多,比如切入點,增強,橫切面等等。在使用驗證等功能中常需使用該配置。在GISV13裡也使用了此功能,主要是為了資料庫事務管理而使用的。在Spring中,AOP的實作可以通過一般性XML配置,AspectJ的配置還有注解配置等來實作。結合系統,我将AspectJ的配置來大緻講解下。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

此類中主要定義了事務管理所關聯的資料庫。DataSource的配置在上一章已描述。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

此類中定義了增強的類容,即織入到目标對象(Target)代碼中的内容。Attributes裡定義了該增強所對應的操作。比如當方法名以find開頭是,事務管理的類型為隻讀。事務管理的屬性中還能設定傳播特性,以及事物隔離性等。如果不設定,此處的轉播特性為::PROPGATION_REQUIRED。這個配置項的意思是說當我調用service層的方法的時候開啟一個事務(具體調用那一層的方法開始建立事務,要看aop的配置),那麼在調用這個service層裡面的其他的方法的時候,如果目前方法産生了事務就用目前方法産生的事務,否則就建立一個新的事務。這個工作使由Spring來幫助我們完成的。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

首先定義織入點,該配置中的意思是當在cn.com.*包下以一直到dao包中以Manager結束的類中的所有方法。

然後定義了切面,該切面首先關聯了織入點,其次關聯了增強類。即,在滿足織入條件下的方法中加上增強的類容,該增強的類容在4.2中已經描述。

Spring3.0以後自帶的task,可以将它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多,能夠完成任務的定時觸發。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

定義一個作業類。Value中為需要觸發的類的引用位址。

觸發條件分為兩種,簡單條件和複雜的條件。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

可以配置觸發延遲時間和觸發間隔時間。其中ref為需要觸發的類的配置(bean)名。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

複雜配置中可以配置具體觸發的時間等。

常見的支援日志的開源項目比較多,主要有:Log4j,Jul,Jcl,Slf4j,Logback等。但是,log4j以其悠久的曆史,廣泛的應用,支援多種語言及平台,強大的功能,占據了主導的地位。

一般需要log4j-1.2.13.jar和commons-logging-1.1.1.jar兩個架包。但是,log4j-1.2.13.jar是必須的,commons-logging-1.1.1.jar并不是必須的。

在web.xml中需要配置log4j的配置檔案位址,以及監聽啟動項。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例
服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

Log4j中可以配置日志的輸出級别,輸出格式,日志路徑日志名,時間格式等。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

日志等級:

ERROR:雖然發生錯誤事件,但仍然不影響系統的繼續運作。

WARN:會出現潛在錯誤的情形。

INFO:消息在粗粒度級别上突出強調應用程式的運作過程。

DEBUG:細粒度資訊事件對調試應用程式是非常有幫助的。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

 其中:

org.apache.log4j.ConsoleAppender(控制台)。

org.apache.log4j.FileAppender(檔案)。

org.apache.log4j.DailyRollingFileAppender(每天産生一個日志檔案)。

org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候産生一個新的檔案)。

org.apache.log4j.WriterAppender(将日志資訊以流格式發送到任意指定的地方)。

Layout:

  org.apache.log4j.HTMLLayout(以HTML表格形式布局)。

  org.apache.log4j.PatternLayout(可以靈活地指定布局模式)。

  org.apache.log4j.SimpleLayout(包含日志資訊的級别和資訊字元串)。

  org.apache.log4j.TTCCLayout(包含日志産生的時間、線程、類别等等資訊)。

Log4J采用的是類似C語言中的printf函數的列印格式格式化日志資訊的

%m 輸出代碼中指定的消息

%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL

%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數

%c 輸出所屬的類目,通常就是所在類的全名

%t 輸出産生該日志事件的線程名

%n 輸出一個回車換行符,Windows平台為“\r\n”,Unix平台為“\n”,也就是一跳消息占用一行

%d 輸出日志時間點的日期或時間,緊跟一對花括号進行自定義格式

 %c 輸出所屬的類目,通常就是所在類的全名

 %l 精确到行

%x 輸出對齊

在web.xml中,定義了項目名:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

在log4j.properties中定義了輸入日志路徑:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

首先引用:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

然後執行個體化:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

最後使用:

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

Tomcat中我們一般進行的配置有:端口,回話連接配接數,線程數,編碼格式,檔案壓縮,記憶體大小等。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例

在catalina.bat檔案中可以增加tomcat的記憶體數,避免space heap問題。

服務端正常知識詳解1.前言2.spring配置——以老GIS項目為例子3.Log4j的配置4.中間件配置——以tomcat為例