2

実行可能な jar のパッケージがあります。db プロパティを外部化したいので、appContext.xml からプロパティ ファイルへの参照を使用します。

TRACE レベルのロギングを有効にしましたが、この行に対してエラーが発生していないことがわかります

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

ただし、dataSource Beanのファイルで構成されたプロパティにアクセスしようとすると、さらに下に

<bean id="dataSource"
         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${db.driverClassName}"/>
    <property name="url" value="${db.url}" />
    <property name="username" value="${db.username}" />
    <property name="password" value="${db.password}" />
</bean>

次のエラーが表示されます。

Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [${db.driverClassName}]

ファイルがクラスパスに正しく配置されていることを確認するために、次のことを行いました

  1. プロパティ ファイル名を意図的に変更したところ、FileNotFound 例外が発生したことがわかりました。
  2. クラスパスにこの外部プロパティ ファイルへの参照が含まれていることを確認しました。

プロパティ ファイルを参照する方法、またはデータソース Bean 内の個々のプロパティを参照する方法に何か問題がありますか?

ほとんどの Bean に Spring アノテーションを使用し、データソース/トランザクション マネージャーなどの宣言のみに appcontext を使用していることを追加することもできます。

この一見些細な部分にかなりの時間を費やし、行き止まりに達したように見えたので、助けてください.

春の設定ファイルはこちら

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

    <!-- Auto scan the components -->
    <context:component-scan base-package="patternengine" />
    <context:annotation-config />
    <tx:annotation-driven proxy-target-class="false"/>
    <aop:aspectj-autoproxy  proxy-target-class="false"/>

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

    <bean id="dataSource"
             class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${db.driverClassName}"/>
        <property name="url" value="${db.url}" />
        <property name="username" value="${db.username}" />
        <property name="password" value="${db.password}" />
    </bean>

    <bean id="serviceArgs" class="com.splunk.ServiceArgs">
        <property name="username" value="dashboardad" />
        <property name="password" value="splunkuat" />
        <property name="host" value="silrse.com" />
        <property name="port" value="8089" />
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>

    <property name="hibernateProperties">
       <props>
         <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
         <prop key="hibernate.show_sql">true</prop>
       </props>
    </property>

    <property name="annotatedClasses">
    <list>
        <value>patternengine.entity.SplunkResult</value>
        <value>patternengine.entity.MinuteGroupedSplunkResult</value>
        <value>patternengine.entity.ApplicationComponent</value>
        <value>patternengine.entity.ApplicationHostSourceDetail</value>
        <value>patternengine.entity.ConfiguredApplication</value>
        <value>patternengine.entity.ConfiguredException</value>
        <value>patternengine.entity.IWatchTransaction</value>
        <value>patternengine.entity.MinuteGroupedIWatchTransaction</value>
        <value>patternengine.entity.AppMap</value>
    </list>
    </property>

    </bean>

    <bean id="transactionManager"
     class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

 </beans>

プロパティファイルはこちら

db.driverClassName=oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@hdvash:1521:ECDDDDA01
db.username=rmt_perf_db
db.password=qwerty123

ディレクトリ構造は次のとおりです プロジェクトのディレクトリ構成はこちら

起動スクリプトは次のとおりです

JAVA_HOME=/home/a_cfp_asp/tomcat/tc7/7.0.39/java
echo 'JAVA_HOME IS ' $JAVA_HOME
PATH=$PATH:$java_home/bin
#BASE_DIR='../'
BASE_DIR='/home/a_cfp_asp/pattern_engine_2b/jobs/dataprocessor/'
CONFIG_ROOT=$BASE_DIR'config'
LIB_ROOT=$BASE_DIR'lib'
jar_path=$LIB_ROOT/antlr-2.7.7.jar:$LIB_ROOT/aopalliance-1.0.jar:$LIB_ROOT/asm-3.1.jar:$LIB_ROOT/aspectjrt-1.6.11.jar:$LIB_ROOT/aspectjweaver-1.6.11.jar:$LIB_ROOT/avalon-framework-4.1.3.jar:$LIB_ROOT/cglib-2.2.jar:$LIB_ROOT/commons-lang3-3.0.jar:$LIB_ROOT/commons-logging-1.1.jar:$LIB_ROOT/dom4j-1.6.1.jar:$LIB_ROOT/hibernate-commons-annotations-4.0.1.Final.jar:$LIB_ROOT/hibernate-core-4.2.3.Final.jar:$LIB_ROOT/hibernate-entitymanager-3.6.8.Final.jar:$LIB_ROOT/hibernate-envers-4.2.3.Final.jar:$LIB_ROOT/hibernate-jpa-2.0-api-1.0.1.Final.jar:$LIB_ROOT/javassist-3.12.0.GA.jar:$LIB_ROOT/javassist-3.15.0-GA.jar:$LIB_ROOT/jboss-logging-3.1.0.GA.jar:$LIB_ROOT/jboss-transaction-api_1.1_spec-1.0.1.Final.jar:$LIB_ROOT/log4j-1.2.14.jar:$LIB_ROOT/logkit-1.0.1.jar:$LIB_ROOT/oracle-11.1.0.6.jar:$LIB_ROOT/pe-common-1.0.jar:$LIB_ROOT/pe-dataprocessor.jar:$LIB_ROOT/slf4j-api-1.6.1.jar:$LIB_ROOT/splunk-1.1.0.jar:$LIB_ROOT/spring-aop-3.1.1.RELEASE.jar:$LIB_ROOT/spring-asm-3.1.1.RELEASE.jar:$LIB_ROOT/spring-beans-3.1.1.RELEASE.jar:$LIB_ROOT/spring-context-3.1.1.RELEASE.jar:$LIB_ROOT/spring-context-support-3.1.1.RELEASE.jar:$LIB_ROOT/spring-core-3.1.1.RELEASE.jar:$LIB_ROOT/spring-expression-3.1.1.RELEASE.jar:$LIB_ROOT/spring-jdbc-3.1.1.RELEASE.jar:$LIB_ROOT/spring-orm-3.1.1.RELEASE.jar:$LIB_ROOT/spring-tx-3.1.1.RELEASE.jar
config_path=$CONFIG_ROOT/db.properties
MYCLASSPATH=.:$config_path:$jar_path

java -cp$MYCLASSPATH com.patternengine.service.impl.DataProcessorService "Dashboard Application" 30
4

3 に答える 3

4

あなたが意図しているように、あなたのプロパティファイルがクラスパスにないことはほぼ確実です。

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

ignore-unresolvableを削除すると、Spring は失敗することに注意してください

Invalid bean definition with name 'dataSource' defined in class path resource [<yourfile>.xml]: Could not resolve placeholder 'db.driverClassName' in string value "${db.driverClassName}"

解決できない場合は、ファイルにプロパティが含まれていないか、ファイルが見つからないという 2 つの問題が発生している可能性があります。前者は、あなたが私たちに提供した詳細である可能性がはるかに高い.

編集:構成に基づいて、db.propertiesファイルはconfigクラスパスルートに相対的なフォルダーにあります。でアクセスする必要がありますconfig/db.properties。また、これは関連している可能性があります: Spring クラスパスプレフィックスの違い

于 2013-09-20T15:53:21.490 に答える
0

プロジェクトの構造はどのようになっていますか? ファイルがクラスパスに含まれていることを確認したとおっしゃいましたが、確認しましょう。

デプロイするとき、WEB-INF\classes フォルダーはありますか? その中に db.properties ファイルがありますか? そうでない場合は、クラスパスの問題を示していると思います。

于 2013-09-20T16:35:49.813 に答える