Spring+SpringMVC+Mybatis+MAVEN+Eclipse+項目完整環境搭建

一、新建一個Maven項目,建立父項目。html

 

 

 

二、建立子項目模塊java

 

 

 

 

三、建立javaWeb項目mysql

 

 

 

 

 

 

 

四、建立後的項目目錄結構web

 

 

 

五、Maven文件配置spring

  

  • parent父項目pom.xml文件配置

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <!--聲明項目描述符遵循哪個POM模型版本。模型自己的版本不多改變,雖然如此,但它仍然是必不可少的,這是爲了當Maven引入了新的特性或者其餘模型變動的時候,確保穩定性。-->
  <modelVersion>4.0.0</modelVersion>
  <!--項目的全球惟一標識符,一般使用全限定的包名區分該項目和其餘項目。而且構建時生成的路徑也是由今生成, 如com.mycompany.app生成的相對路徑爲:/com/mycompany/app-->   
  <groupId>com.lovo</groupId>
  <!-- 構件的標識符,它和group ID一塊兒惟一標識一個構件。換句話說,你不能有兩個不一樣的項目擁有一樣的artifact ID和groupID;
               在某個 特定的group ID下,artifact ID也必須是惟一的。構件是項目產生的或使用的一個東西,Maven爲項目產生的構件包括:JARs,源 碼,二進制發佈和WARs等。--> 
  <artifactId>parent</artifactId>
  <!--項目當前版本,格式爲:主版本.次版本.增量版本-限定版本號-->
  <version>0.0.1-SNAPSHOT</version>
  <!--項目產生的構件類型,例如jar、war、ear、pom。插件能夠建立他們本身的構件類型,因此前面列的不是所有構件類型-->
  <packaging>pom</packaging>
  <!--項目的名稱, Maven產生的文檔用-->
  <name>${project.artifactId}</name>
  <!-- 描述 -->
  <description>Spring SpringMVC Mybatis Project</description>
  <!-- compiler插件能解決: 
        1:maven 2.1默認用jdk 1.3來編譯,maven 3 貌似是用jdk 1.5,若是項目用的jdk 1.6也會有問題,compiler插件能夠指定JDK版本爲1.6。 
        2:windows默認使用GBK編碼,java項目常常編碼爲utf8,也須要在compiler插件中指出,不然中文亂碼可能會出現編譯錯誤。 -->
  <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <!-- 設置JDK版本1.8 -->
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
  </build>
  <!--模塊(有時稱做子項目) 被構建成項目的一部分。列出的每一個模塊元素是指向該模塊的目錄的相對路徑-->
  <modules>
      <module>soncore</module>
      <module>sonstore</module>
      <module>sonutils</module>
    <module>admin</module>
  </modules>
  <properties>
         <!-- Maven 編譯使用的字符集編碼 -->
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <!-- jar包版本 -->
       <slf4j.version>1.7.12</slf4j.version>
  </properties>
  <dependencies>
      <!-- slf4j日誌包 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
  </dependencies>
</project>
  • Soncore項目pom.xml文件配置

 

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <!--聲明項目描述符遵循哪個POM模型版本。模型自己的版本不多改變,雖然如此,但它仍然是必不可少的,這是爲了當Maven引入了新的特性或者其餘模型變動的時候,確保穩定性。-->
  <modelVersion>4.0.0</modelVersion>
  <!--父項目的座標。若是項目中沒有規定某個元素的值,那麼父項目中的對應值即爲項目的默認值。 座標包括group ID,artifact ID和 version。-->
  <parent>
      <!--被繼承的父項目的全球惟一標識符-->
    <groupId>com.lovo</groupId>
    <!--被繼承的父項目的構件標識符--> 
    <artifactId>parent</artifactId>
    <!--項目當前版本,格式爲:主版本.次版本.增量版本-限定版本號-->
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <!-- 構件的標識符,它和group ID一塊兒惟一標識一個構件。換句話說,你不能有兩個不一樣的項目擁有一樣的artifact ID和groupID;
        在某個 特定的group ID下,artifact ID也必須是惟一的。構件是項目產生的或使用的一個東西,Maven爲項目產生的構件包括:JARs,源 碼,二進制發佈和WARs等。-->
  <artifactId>soncore</artifactId>
  <!--項目的名稱, Maven產生的文檔用-->
  <name>${project.artifactId}</name>
  <!--被繼承的父項目的版本-->
  <version>${project.parent.version}</version>
  <!-- 描述 -->
  <description>parent project soncore code </description>
      <properties>
          <!-- Maven 編譯使用的字符集編碼 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- jar包版本 -->
        <spring.version>4.2.6.RELEASE</spring.version>
        <aspectj.version>1.8.9</aspectj.version>
        <mybatis.version>3.4.0</mybatis.version>
        <mybatis-spring.version>1.3.0</mybatis-spring.version>
        <mysql.version>5.1.38</mysql.version>
        <fastjson.version>1.2.12</fastjson.version>
        <base64.version>2.3.9</base64.version>
    </properties>
    <!--構建項目須要的信息-->
    <build>
        <!--這個元素描述了項目相關的全部資源路徑列表,例如和項目相關的屬性文件,這些資源被包含在最終的打包文件裏。-->
        <!-- 加上這個能夠保證maven打包是把這些資源文件都打到war包中 -->
        <resources>
            <!--這個元素描述了項目相關或測試相關的全部資源路徑-->
            <resource>
                <!--描述存放資源的目錄,該路徑相對POM路徑--> 
                <directory>src/main/java</directory>
                <!--包含的模式列表,例如**/*.xml.-->
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <!--是否使用參數值代替參數名。參數值取自properties元素或者文件裏配置的屬性,文件在filters元素裏列出。-->
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    <dependencies>
        <!-- 必須的不解釋,面向切面編程jar包 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
        <!-- Spring相關包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.19</version>
        </dependency>
        <!-- mybatis相關包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis-spring.version}</version>
        </dependency>
        <!-- mysql相關包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- fastjson相關包 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
        <!-- Base64相關包 -->
        <dependency>
            <groupId>net.iharder</groupId>
            <artifactId>base64</artifactId>
            <version>${base64.version}</version>
        </dependency>
    </dependencies>
</project>
  • Sonutils項目pom.xml文件配置
<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <!--聲明項目描述符遵循哪個POM模型版本。模型自己的版本不多改變,雖然如此,但它仍然是必不可少的,這是爲了當Maven引入了新的特性或者其餘模型變動的時候,確保穩定性。-->
  <modelVersion>4.0.0</modelVersion>
  <!--父項目的座標。若是項目中沒有規定某個元素的值,那麼父項目中的對應值即爲項目的默認值。 座標包括group ID,artifact ID和 version。-->
  <parent>
    <!--被繼承的父項目的全球惟一標識符--> 
    <groupId>com.lovo</groupId>
      <!--被繼承的父項目的構件標識符--> 
    <artifactId>parent</artifactId>
    <!--項目當前版本,格式爲:主版本.次版本.增量版本-限定版本號-->   
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <!-- 構件的標識符,它和group ID一塊兒惟一標識一個構件。換句話說,你不能有兩個不一樣的項目擁有一樣的artifact ID和groupID;
        在某個 特定的group ID下,artifact ID也必須是惟一的。構件是項目產生的或使用的一個東西,Maven爲項目產生的構件包括:JARs,源 碼,二進制發佈和WARs等。-->   
  <artifactId>sonutils</artifactId>
  <!--項目的名稱, Maven產生的文檔用-->
  <name>${project.artifactId}</name>
  <!-- 描述 -->
  <description>parent project sontils code</description>
  <!--被繼承的父項目的版本-->
  <version>${project.parent.version}</version>
  <!-- Maven 編譯使用的字符集編碼 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <!--項目引入插件所須要的額外依賴-->    
    <dependencies>
        <!-- 依賴ssmcore -->
        <dependency>
            <groupId>com.lovo</groupId>
            <artifactId>soncore</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!-- HttpComponents 也就是之前的httpclient項目,能夠用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端/服務器編程工具包,而且它支持 HTTP 協議最新的版本和建議 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
    </dependencies>
</project>
  • Sonstore項目pom.xml文件配置
<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!--聲明項目描述符遵循哪個POM模型版本。模型自己的版本不多改變,雖然如此,但它仍然是必不可少的,這是爲了當Maven引入了新的特性或者其餘模型變動的時候,確保穩定性。-->
    <modelVersion>4.0.0</modelVersion>
    <!--父項目的座標。若是項目中沒有規定某個元素的值,那麼父項目中的對應值即爲項目的默認值。 座標包括group ID,artifact ID和 version。-->
    <parent>
          <!--被繼承的父項目的全球惟一標識符--> 
        <groupId>com.lovo</groupId>
        <!--被繼承的父項目的構件標識符-->
        <artifactId>parent</artifactId>
        <!--項目當前版本,格式爲:主版本.次版本.增量版本-限定版本號--> 
        <version>0.0.1-SNAPSHOT</version>
     </parent>
      <!-- 構件的標識符,它和group ID一塊兒惟一標識一個構件。換句話說,你不能有兩個不一樣的項目擁有一樣的artifact ID和groupID;
         在某個 特定的group ID下,artifact ID也必須是惟一的。構件是項目產生的或使用的一個東西,Maven爲項目產生的構件包括:JARs,源 碼,二進制發佈和WARs等。-->     
     <artifactId>sonstore</artifactId>
     <!--項目的名稱, Maven產生的文檔用-->
     <name>soncore</name>
     <!-- 描述 -->
     <description>parent project sonstore code</description>
     <!--項目主頁的URL, Maven產生的文檔用-->
    <url>http://maven.apache.org</url>
    <!-- Maven 編譯使用的字符集編碼 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <!--項目引入插件所須要的額外依賴-->
    <dependencies>
        <!-- 依賴ssmutils -->
        <dependency>
            <groupId>com.lovo</groupId>
            <artifactId>sonutils</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
    </dependencies>
</project>
  • Admin項目(WEB)pom.xml文件配置

 

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <!--聲明項目描述符遵循哪個POM模型版本。模型自己的版本不多改變,雖然如此,但它仍然是必不可少的,這是爲了當Maven引入了新的特性或者其餘模型變動的時候,確保穩定性。-->
  <modelVersion>4.0.0</modelVersion>
  <!--父項目的座標。若是項目中沒有規定某個元素的值,那麼父項目中的對應值即爲項目的默認值。 座標包括group ID,artifact ID和 version。-->
  <parent>
      <!--被繼承的父項目的全球惟一標識符-->
    <groupId>com.lovo</groupId>
    <!--被繼承的父項目的構件標識符-->
    <artifactId>parent</artifactId>
    <!--項目當前版本,格式爲:主版本.次版本.增量版本-限定版本號-->
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <!-- 構件的標識符,它和group ID一塊兒惟一標識一個構件。換句話說,你不能有兩個不一樣的項目擁有一樣的artifact ID和groupID;
        在某個 特定的group ID下,artifact ID也必須是惟一的。構件是項目產生的或使用的一個東西,Maven爲項目產生的構件包括:JARs,源 碼,二進制發佈和WARs等。-->
  <artifactId>admin</artifactId>
  <!--項目產生的構件類型,例如jar、war、ear、pom。插件能夠建立他們本身的構件類型,因此前面列的不是所有構件類型-->
  <packaging>war</packaging>
  <name>admin Webapp</name>
  <url>http://maven.apache.org</url>
  
      <build>
       <!-- maven打包後的項目名 --> 
        <finalName>admin</finalName>
        <!-- 加上這個能夠保證maven打包是把這些資源文件都打到war包中 -->  
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
    <properties>
        <!-- jar包版本 -->
        <servlet.version>4.0.0-b01</servlet.version>
        <druid.version>1.0.20</druid.version>
        <commons-io.version>2.4</commons-io.version>
        <commons-fileupload.version>1.3.1</commons-fileupload.version>
        <jackson.version>2.7.4</jackson.version>
        <ehcache.version>2.10.2</ehcache.version>
        <validator.version>5.2.3.Final</validator.version>
        <ehcache.jgroupsreplication.version>1.7</ehcache.jgroupsreplication.version>
    </properties>
     <!-- 項目基礎依賴包配置 -->
    <dependencies>
        <!-- 系統其餘模塊 -->
        <dependency>
            <groupId>com.lovo</groupId>
            <artifactId>soncore</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <dependency>
            <groupId>com.lovo</groupId>
            <artifactId>sonutils</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <dependency>
            <groupId>com.lovo</groupId>
            <artifactId>sonstore</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!-- servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
        </dependency>
        <!-- druid相關包 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <!-- commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>
        <!-- commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${commons-fileupload.version}</version>
        </dependency>
        <!-- ehcache -->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>${ehcache.version}</version>
        </dependency>
        <!-- jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- 校驗 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>${validator.version}</version>
        </dependency>
        <!-- 集羣 -->
        <!--<dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-jgroupsreplication</artifactId>
            <version>${ehcache.jgroupsreplication.version}</version>
        </dependency>
        -->
    </dependencies>
</project>

六、Spring SpringMVC Mybatis框架文件配置sql

  • applicationContext.xml文件配置

 

<?xml version="1.0" encoding="utf-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:cache="http://www.springframework.org/schema/cache" xmlns:c="http://www.springframework.org/schema/c"
    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.xsd 
                        http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop.xsd 
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx.xsd 
                        http://www.springframework.org/schema/cache 
                        http://www.springframework.org/schema/cache/spring-cache-3.2.xsd">
                        
                        
    <!-- 配置須要交給spring掃描管理的包,通常是包括整個項目的java文件的父包(由context提供) -->
    <context:component-scan base-package="org.system" />
    <!-- 屬性文件讀入,用於加密數據庫配置文件 -->
    <bean id="propertyConfigurer" class="org.core.encrypt.DBConfigurer">
        <property name="locations">
            <list>
                <value>classpath:conf.properties</value>
            </list>
        </property>
    </bean>
    <!-- 配置須要交給spring掃描管理的文件,通常是項目的配置文件(由context提供) -->
    <context:property-placeholder location="classpath:conf.properties" />
    <!-- 配置數據源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"  
        destroy-method="close">  
        <property name="url" value="${url}" /> 
        <!-- 數據庫鏈接用戶名 --> 
        <property name="username" value="${username}" />  
        <!-- 數據庫鏈接密碼 --> 
        <property name="password" value="${password}" />  
        <!-- 初始化鏈接大小 -->  
        <property name="initialSize" value="2"></property>  
        <!-- 鏈接池最大數量 -->  
        <property name="maxActive" value="20"></property>  
        <!-- 鏈接池最大空閒 ,對象池中對象最大個數-->  
        <!-- <property name="maxIdle" value="60000"></property>   -->
        <!-- 鏈接池最小空閒,對象池中對象最小個數 -->  
        <property name="minIdle" value="2"></property>  
        <!-- 獲取鏈接最大等待時間,單位爲 ms, 超過期間會丟出錯誤信息 -->  
        <property name="maxWait" value="60000"></property>  
        <!-- 每多少毫秒檢測空閒鏈接超過10分鐘的鏈接; 失效檢查線程運行時間間隔,若是小於等於0,不會啓動檢查線程,默認-1-->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 鏈接池中鏈接,在時間段內一直空閒, 被逐出鏈接池的時間 (默認爲30分鐘,能夠適當作調整,須要和後端服務端的策略配置相關) ; 
                  大於0 ,進行鏈接空閒時間判斷,或爲0,對空閒的鏈接不進行驗證;默認30分鐘  -->
        <property name="minEvictableIdleTimeMillis" value="25200000" />
        <!-- 超過期間限制,回收沒有用(廢棄)的鏈接(默認爲 300秒,調整爲180); -->
        <property name="removeAbandonedTimeout" value="1800" />
    </bean>  
      <!-- 配置sqlSessionFactory(由mybatis-spring.jar提供支持) -->
    <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 配置數據源 -->
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:configuration.xml" />
        <!-- 配置攔截器用於Mybatis分頁和總數查詢,只實現Mysql -->
        <property name="plugins" ref="PaginationInterceptor" />
    </bean>
    <!-- Mybatis分頁攔截器 -->
    <bean name="PaginationInterceptor" class="org.core.intercept.PaginationInterceptor" />
    <!-- Mapper接口所在包名,Spring會自動查找其下的Mapper -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="org.system.mapper..*" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>
    <!-- 支持緩存註解 -->
    <cache:annotation-driven cache-manager="cacheManager" />
    <!-- Spring提供的基於的Ehcache實現的緩存管理器 -->
    <bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation" value="classpath:ehcache.xml" />
    </bean>
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
        <property name="cacheManager" ref="ehcacheManager" />
    </bean>
    <!-- 支持註解事務模式 -->
    <tx:annotation-driven transaction-manager="transactionManager"
        proxy-target-class="true" />
    <!-- 事務管理 -->
    <bean name="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 配置聲明式事務 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED" read-only="false" />
            <tx:method name="delete*" propagation="REQUIRED" read-only="false" />
            <tx:method name="update*" propagation="REQUIRED" read-only="false" />
            <tx:method name="get*" propagation="SUPPORTS" />
        </tx:attributes>
    </tx:advice>
    <!-- 配置該聲明式事務規則用於的切入點 步驟: 1.配置切入點 2.應用該聲明式事務規則 -->
    <aop:config proxy-target-class="true" expose-proxy="true">
        <!-- 配置切入點 -->
        <aop:pointcut id="transaction_pointcut"
            expression="execution(* org.system.service.impl..*.*(..))" />
        <!-- 應用該聲明式事務規則 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="transaction_pointcut" />
    </aop:config>
    <!-- 異常攔截器 -->
    <bean id="exceptionHandler" class="org.system.exception.MyExceptionResolver" />
</beans>
  • conf.properties文件配置
#數據庫鏈接
driver=com.mysql.jdbc.Driver
#本機鏈接
url=5BiJrAunhbp4C6R9HY+UQZca6/Y+XPBCNv95/EzYAmjeJzpWpDD3ac0D2WtX+4UbeHW7DCcv755VyGJfUylG1DZfbpB4tbaTpnYigXCccc9FefU
#數據庫帳號 密碼
username=Y0Z2wmLw+BM=
password=Y0Z2wmLw+BM=

#文件服務器配置
#file.publicKey=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC1FOh0jnud2NK+z2gemMYlVb36LsAOnEMs855NUR4OZd9k5kiWdmaifL8li6DaVyP/pMpnVdK1fymt2UzSejtswCDG
#file.account=admin
#file.password=123456
#開發環境
#file.url=
#雲端環境
#file.url=
#HIS服務器配置
#his.publicKey=
#his.account=admin
#his.password=123456
#開發環境
#his.url=
#雲端環境
#his.url=
#語音服務器配置
#phone.publicKey=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC1FOh0jnud2NK+z2
#phone.account=admin
#phone.password=123456
#phone.url=

#微信服務器配置
#測試 
#wechat.url=
  • spring-mvc.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
                        
    <!-- 掃描要自動管理的包,使SpringMVC認爲包下用了@Controller 註解的類是控制器 -->
    <context:component-scan base-package="org.system.controller" />
    <!-- 添加註解驅動,擴充了註解驅動,能夠將請求參數綁定到控制器參數 -->
    <mvc:annotation-driven enable-matrix-variables="true" />
    <!-- 靜態資源處理,靜態資源文件路徑設置 -->
    <mvc:resources location="/styles/" mapping="/styles/.**" />
    <mvc:resources location="/images/" mapping="/images/.**" />
    <mvc:resources location="/plugins/" mapping="/plugins/.**" />
    <mvc:resources location="/scripts/" mapping="/scripts/.**" />
    <mvc:resources location="/html/" mapping="/html/.**" />
    <mvc:resources location="/index.html" mapping="/index.html" />
     <!--避免IE執行AJAX時,返回JSON出現下載文件  -->
    <bean id="mappingJacksonHttpMessageConverter"  
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>text/html;charset=UTF-8</value>  
            </list>  
        </property>  
    </bean> 
    <!-- 啓動SpringMVC的註解功能,完成請求和註解POJO的映射 -->  
    <bean  
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <list>  
                <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON轉換器 -->  
            </list>  
        </property>  
    </bean> 
    <!-- 配置文件上傳,若是沒有使用文件上傳能夠不用配置,固然若是不配,那麼配置文件中也沒必要引入上傳組件包 -->  
    <bean id="multipartResolver"    
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
        <!-- 默認編碼 -->  
        <property name="defaultEncoding" value="utf-8" />    
        <!-- 文件大小最大值 -->  
        <property name="maxUploadSize" value="10485760000" />    
        <!-- 內存中的最大值 -->  
        <property name="maxInMemorySize" value="40960" />    
        <!-- 啓用是爲了推遲文件解析,以便捕獲文件大小異常 -->
        <property name="resolveLazily" value="true"/>
    </bean> 
    <!-- 定義跳轉的文件的先後綴 ,視圖模式配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 這裏的配置個人理解是自動給後面action的方法return的字符串加上前綴和後綴,變成一個 可用的url地址 -->  
        <property name="prefix" value="/" />  
        <property name="suffix" value=".html" />  
    </bean> 
    <!-- 校驗攔截器 -->
    <bean id="validInterceptor" class="org.system.intercept.ValidInterceptor"></bean>
    <!-- 配置AOP切點 只攔截Controltroller -->
    <aop:config>
        <!--切入點 -->
        <aop:pointcut id="validPoint"
            expression="execution(public * org.system.controller.impl..*.*(..))" />
        <!--在該切入點使用自定義攔截器 -->
        <aop:advisor pointcut-ref="validPoint" advice-ref="validInterceptor" />
    </aop:config>
    <!-- 導入其餘配置文件 -->
    <import resource="/org/system/config/*.xml" />
</beans>  
  • configuration.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL MAP Config 3.1//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <settings>
      <setting name="callSettersOnNulls" value="true"/>
  </settings>
</configuration>
  • log4j.properties文件配置
#定義根級別
log4j.rootLogger = ERROR,info,warn,error,stdout

#定義項目輸出日誌級別
log4j.logger.org.system = DEBUG
log4j.logger.org.core = INFO
log4j.logger.org.utils = INFO
log4j.logger.org.springframework.web.servlet.mvc = WARN

#控制檯輸出 生成階段註釋
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{MM-dd HH:mm:ss}-[%p] [%c{3}] %m%n

###info級別輸出
#設置日誌輸出類型爲天天產生一個日誌文件
log4j.appender.info = org.apache.log4j.DailyRollingFileAppender
#指定輸出目錄  
log4j.appender.info.File = ${catalina.home}/logs/${webapp.root}/admin/info.log
#默認值是true,即將消息追加到指定文件中,false指將消息覆蓋指定的文件內容。
log4j.appender.info.Append = true
#指定日誌消息的輸出最低級別,此處設置爲INFO,當程序出現錯誤日誌時也會輸出到此日誌文件中
log4j.appender.info.Threshold = INFO 
#設置輸出端的佈局類型爲能夠靈活地指定佈局模式
log4j.appender.info.layout = org.apache.log4j.PatternLayout
#指定打印信息的具體格式
log4j.appender.info.layout.ConversionPattern = %-d{MM-dd HH:mm:ss}-[%p] [%c{3}] %m%n
#指定天天產生一個文件
log4j.appender.info.datePattern='.'yyyy-MM-dd
#定製過濾器 只過濾INFO級別
log4j.appender.info.filter.infoFilter = org.apache.log4j.varia.LevelRangeFilter
log4j.appender.info.filter.infoFilter.LevelMin=INFO
log4j.appender.info.filter.infoFilter.LevelMax=INFO

###warn級別輸出
log4j.appender.warn = org.apache.log4j.DailyRollingFileAppender
log4j.appender.warn.File = ${catalina.home}/logs/${webapp.root}/admin/warn.log
log4j.appender.warn.Append = true
log4j.appender.warn.Threshold = warn 
log4j.appender.warn.layout = org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern = %-d{MM-dd HH:mm:ss}-[%p] [%c{3}] %m%n
log4j.appender.warn.datePattern='.'yyyy-MM-dd
#定製過濾器 只過濾warn級別
log4j.appender.warn.filter.warnFilter = org.apache.log4j.varia.LevelRangeFilter
log4j.appender.warn.filter.warnFilter.LevelMin=WARN
log4j.appender.warn.filter.warnFilter.LevelMax=WARN

###error級別輸出
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.File = ${catalina.home}/logs/${webapp.root}/admin/error.log
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR 
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %-d{MM-dd HH:mm:ss}-[%p] [%c{3}] %m%n
log4j.appender.error.datePattern='.'yyyy-MM-dd
#定製過濾器 只過濾ERROR級別
log4j.appender.error.filter.errorFilter=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.error.filter.errorFilter.LevelMin=ERROR
log4j.appender.error.filter.errorFilter.LevelMax=ERROR
  • ehcache.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
    updateCheck="false">

<!--timeToIdleSeconds 當緩存閒置n秒後銷燬 --> 
<!--timeToLiveSeconds 當緩存存活n秒後銷燬 --> 
<!-- 緩存配置 
       name:緩存名稱。 
       maxElementsInMemory:緩存最大個數。 
       eternal:對象是否永久有效,一但設置了,timeout將不起做用。 
       timeToIdleSeconds:設置對象在失效前的容許閒置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閒置時間無窮大。 
       timeToLiveSeconds:設置對象在失效前容許存活時間(單位:秒)。最大時間介於建立時間和失效時間之間。僅當eternal=false對象不是永久有效時使用,默認是0.,也就是對象存活時間無窮大。 
       overflowToDisk:當內存中對象數量達到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。 
       diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區大小。默認是30MB。每一個Cache都應該有本身的一個緩衝區。 
       maxElementsOnDisk:硬盤最大緩存個數。 
       diskPersistent:是否緩存虛擬機重啓期數據 Whether the disk store persists between restarts of the Virtual Machine. The default value is false. 
       diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。 
       memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你能夠設置爲FIFO(先進先出)或是LFU(較少使用)。 
       clearOnFlush:內存數量最大時是否清除。 
-->
    <diskStore path="java.io.tmpdir" />
<!--     <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
        properties="connect=TCP(bind_port=50062):  
                    TCPPING(initial_hosts=    192.168.1.16[50061],
                                            192.168.1.16[50062];
                                            port_range=1;timeout=5000;num_initial_members=2)
                    MERGE2(min_interval=3000;max_interval=5000):  
                    FD_ALL(interval=5000;timeout=20000):
                    FD(timeout=3000;max_tries=3;):
                    VERIFY_SUSPECT(timeout=1500):
                    pbcast.NAKACK(retransmit_timeout=100,200,300,600,1200,2400,4800;discard_delivered_msgs=true):
                    pbcast.STABLE(stability_delay=1000;desired_avg_gossip=20000;max_bytes=0):
                    pbcast.GMS(print_local_addr=true;join_timeout=5000)"
        propertySeparator="::" /> -->
        <!-- 採用UDP多播方式集羣 
        <cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
            properties="connect=UDP(mcast_addr=231.12.21.133;mcast_port=45566;):PING:
            MERGE2:FD_SOCK:VERIFY_SUSPECT:pbcast.NAKACK:UNICAST:pbcast.STABLE:FRAG:pbcast.GMS"
            propertySeparator="::" /> -->

    <!-- 默認緩存策略 -->
    <defaultCache 
        eternal="false"
        maxElementsInMemory="1000"
        overflowToDisk="false" 
        diskPersistent="false" 
        timeToIdleSeconds="10"
        timeToLiveSeconds="10" 
        memoryStoreEvictionPolicy="LFU">
    </defaultCache>

    <!-- 用戶信息 -->
    <cache 
        name="userCache" 
        eternal="false" 
        maxElementsInMemory="500"
        overflowToDisk="false" 
        diskPersistent="false" 
        timeToIdleSeconds="1800"
        timeToLiveSeconds="0" 
        memoryStoreEvictionPolicy="LFU">
        <!-- 若不配置此類服務器重啓後將不會同步緩存到本節點 
        <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true" />
        <cacheEventListenerFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"/>
        -->
    </cache>

    <!-- 醫生信息 -->
    <cache 
        name="adminUserCache" 
        eternal="false" 
        maxElementsInMemory="500"
        overflowToDisk="false" 
        diskPersistent="false" 
        timeToIdleSeconds="1800"
        timeToLiveSeconds="0" 
        memoryStoreEvictionPolicy="LFU">
        <!-- 若不配置此類服務器重啓後將不會同步緩存到本節點 
        <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true" />
        <cacheEventListenerFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"/>
        -->
    </cache>

    <!-- 驗證碼信息 -->
    <cache 
        name="codeCache" 
        eternal="false" 
        maxElementsInMemory="500"
        overflowToDisk="true" 
        diskPersistent="false" 
        timeToIdleSeconds="120"
        timeToLiveSeconds="1800" 
        memoryStoreEvictionPolicy="LFU">
        <!-- 若不配置此類服務器重啓後將不會同步緩存到本節點 
        <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true" />
        <cacheEventListenerFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"/>
        -->
    </cache>

    <!-- 權限信息 -->
    <cache 
        name="permissionCache" 
        eternal="true" 
        maxElementsInMemory="500"
        overflowToDisk="true" 
        diskPersistent="false" 
        timeToIdleSeconds="0"
        timeToLiveSeconds="0" 
        memoryStoreEvictionPolicy="LFU">
        <!-- 若不配置此類服務器重啓後將不會同步緩存到本節點 
        <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true" />
        <cacheEventListenerFactory class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"/>
        -->
    </cache>
</ehcache>
相關文章
相關標籤/搜索