Intellij IDEA Tomcat設定CLASSPATH 不生效 配置分離實現

來源:互聯網
上載者:User

在開發JavaWeb應用時,為了實現配置分離,我們有時候需要在CLASSPATH中設定的設定檔的路徑。

但是在使用Intellij idea時發現發現設定的CLASSPATH不生效。

嘗試過的方法:

1.在intellij idea 項目中的module中添加

2.在Windows --我的電腦--屬性--進階系統變數裡設定CLASSPATH

都沒有效果。

找了許久的原因,偶然發現原來建立Tomcat server時 指定的是 自己的tomcat版本;所以在intellij idea啟動時載入的CLASSPATH時,是載入本地的tomcat中的CLASSPATH;而本地的CLASSPATH又是catalina.bat中設定的。所以我們需要更改intellij IDEA使用的本地的Catalina.bat 或者Catania.sh 檔案

修改前--intellij idea output:

:\apache\apache-tomcat-7.0.84\bin\catalina.bat run[2018-03-30 06:58:40,011] Artifact boss:war exploded: Waiting for server connection to start artifact deployment...Using CATALINA_BASE:   "C:\Users\mingj\.IntelliJIdea2017.3\system\tomcat\Unnamed_pay_2"Using CATALINA_HOME:   "D:\apache\apache-tomcat-7.0.84"Using CATALINA_TMPDIR: "D:\apache\apache-tomcat-7.0.84\temp"Using JRE_HOME:        "D:\Program Files\Java\jdk1.7.0_80"Using CLASSPATH:       "D:\apache\apache-tomcat-7.0.84\bin\bootstrap.jar;D:\apache\apache-tomcat-7.0.84\bin\tomcat-juli.jar"Connected to the target VM, address: '127.0.0.1:57543', transport: 'socket'2018-03-30 18:58:41 JRebel: Contacting myJRebel server ..

修改後--intellij idea output:

D:\apache\apache-tomcat-7.0.84\bin\catalina.bat run[2018-03-30 06:58:40,011] Artifact boss:war exploded: Waiting for server connection to start artifact deployment...Using CATALINA_BASE:   "C:\Users\mingj\.IntelliJIdea2017.3\system\tomcat\Unnamed_pay_2"Using CATALINA_HOME:   "D:\apache\apache-tomcat-7.0.84"Using CATALINA_TMPDIR: "D:\apache\apache-tomcat-7.0.84\temp"Using JRE_HOME:        "D:\Program Files\Java\jdk1.7.0_80"Using CLASSPATH:       "D:\apache\apache-tomcat-7.0.84\bin\bootstrap.jar ;d:\pay_conf/;D:\apache\apache-tomcat-7.0.84\bin\tomcat-juli.jar"Connected to the target VM, address: '127.0.0.1:57543', transport: 'socket'2018-03-30 18:58:41 JRebel: Contacting myJRebel server ..

觀察catalina.bat,發現catalina設定CLASSPATH時會先找setenv.bat(屬於使用者自訂屬性檔案) 然後再找setclasspath.bat(屬於java environment屬性檔案),我們直接在這兩者的後面(加粗標紅處)添加我們定義的屬性可以了。

set CLASSPATH=rem Get standard environment variablesif not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHomecall "%CATALINA_BASE%\bin\setenv.bat"goto setenvDone:checkSetenvHomeif exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat":setenvDonerem Get standard Java environment variablesif exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspathecho Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"echo This file is needed to run this programgoto end:okSetclasspathcall "%CATALINA_HOME%\bin\setclasspath.bat" %1if errorlevel 1 goto endrem Add on extra jar file to CLASSPATHrem Note that there are no quotes as we do not want to introduce randomrem quotes into the CLASSPATHif "%CLASSPATH%" == "" goto emptyClasspathset "CLASSPATH=%CLASSPATH%;":emptyClasspathset "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"rem 設定自訂屬性檔案set "CLASSPATH=%CLASSPATH% ;d:\pay_conf\ "if not "%CATALINA_TMPDIR%" == "" goto gotTmpdirset "CATALINA_TMPDIR=%CATALINA_BASE%\temp":gotTmpdir

這樣,如果在系統中有通過class.getClassLoader().getResourceAsStream(resource)直接就能讀取到設定檔了。

當使用spring載入設定檔時需要注意的是:我們通常使用PropertyPlaceholderConfigurer載入設定檔,這個地方需要設定 來指引spring 去系統的環境變數裡面尋找相同名稱的設定檔,才能找得到。

<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />

具體配置如下:

<bean id="propertyConfigurer"  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="ignoreResourceNotFound" value="true"/><property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /><property name="locations"><list><value>classpath:system.properties</value><value>classpath:redis.properties</value></list></property></bean>

bingo!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.