0

まず、この質問のタイトルが間違っていたらお詫びします。

目標: Maven を使用して、外部プロパティ ファイルを読み取る必要がある jar をパッケージ化しています。jar は、tomcat7 を使用してデプロイされる wars によって使用されます。tomcat では、以下に示すように、プロパティ ファイル (PROPERTY_MANAGER) の場所にある setenv.sh が、jar がプロパティを読み取る場所から設定されます。これどうやってするの?

私は Apache-tomcat-7.0.32 を使用しており、setenv.shは次のように読み取ります。

export JAVA_OPTS="-DPROPERTY_MANAGER=$CATALINA_HOME/myPropertiesDir -DCOMMON_PROPERTIES=$CATALINA_HOME/myCommonPropsDir -DAPP_ENCRYPTION_PASSWORD=pass $JAVA_OPTS"

Eclipse では、既存の Maven モジュールをインポートします。この時点での私のモジュールは単純な Java クラスです (したがって、Tomcat を介してプロパティがどのように読み取られるかをテストできます)。これが私のクラスです:

Class MyClass{
 private String var1;
 private String var2;
 public MyClass(){}
 public String getVar1() { return var1; }
 public String getVar2() { return var2; }
 public String setVar1(String a) { var1 = a; }
 public String setVar2(String a) { var2 = b; }
 public static void main (String []arg){
   MyClass c = new MyClass();
   System.out.println(“var1 = “ + c.getVar1() +”, var2 = “+c.getVar2());
 }
}// end of class

src/main/resources の下にあるmyprops.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:si=http://www.springframework.org/schema/integration 
       xmlns:jms=http://www.springframework.org/schema/integration/jms
       xmlns:context=http://www.springframework.org/schema/context
       xmlns:util=http://www.springframework.org/schema/util
       xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
               http://www.springframework.org/schema/context              
               http://www.springframework.org/schema/context/spring-context-3.1.xsd
               http://www.springframework.org/schema/util  
               http://www.springframework.org/schema/util/spring-util-3.1.xsd">                     

      <context:property-placeholder location="file:${PROPERTY_MANAGER}/myclass-props.properties" ignore-unresolvable="true"/> 
      <!-- MyClass bean -->
      <bean id="mybean" class="my.com.test.MyClass">
        <property name="var1" value="${prop.var1}" />
        <property name="var2" value="${prop.var2}" />
     </bean>
 </beans>

myclass-propsは $CATALINA_HOME/myCommonPropsDir の下にあり、次のようになります。

prop.var1=abc
prop.var2=123

上記のクラスは、maven モジュールとしてビルドされ、jar としてパッケージ化されています。これをテストするために、Tomcat を起動し、Eclipse でメイン クラスを Java アプリケーションとして実行し、それをリモート Java アプリケーションとしてデバッグしてみました。リモートは何もしません。Java アプリとして実行すると、次のような出力が得られます: var1 = null, var2 = null;

明らかに、プロパティ ファイルは取得されませんでした。ここで何が間違っていますか?私が見逃している小さなものだと確信しています。事前にすべての提案をありがとう。

4

2 に答える 2

0

あなたの問題は${PROPERTY_MANAGER}syspropに置き換えられていないと思います(maven syspropの置き換えは春とはまったく異なります)。場所をハードコーディングせずに jar が外部プロパティ ファイルを読み取れるようにすることが目標の場合は、代わりにクラスパスを使用します。

<context:property-placeholder location="classpath:/myclass-props.properties" ignore-unresolvable="true"/>

次に、ファイルを $TOMCAT_HOME/lib またはクラスパスに含まれる他のフォルダーに配置できます

于 2013-07-12T15:47:00.193 に答える