2012-04-10 13 views
0

My ApplicationはSpring 3 + MyBatis 3を使用します。複数のデータベース接続(MySQLとOracle)を設定しようとしています。プロパティ値の設定エラー(Spring 3 + mybatis 3)

Error creating bean with name 'MySQLService' defined in ServletContext resource [/WEB-INF/appContext-database.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'MySQLDao' of bean class [com.ekalife.MyGadget.service.MainService]: Bean property 'MySQLDao' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 

マイセットアップAppContextを-database.xml

<!-- ========== Setting Database and Connection Pooling ========== --> 

<bean id="dataSourceMySQL" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" 
    p:driverClass="${jdbc.driver}" 
    p:jdbcUrl="${jdbc.url}" 
    p:user="${jdbc.user}" 
    p:password="${jdbc.password}" 
    p:idleConnectionTestPeriod="3600" 
    p:preferredTestQuery="SELECT * FROM HD_USERS" 
    p:acquireRetryAttempts="50" 
    p:autoCommitOnClose="false" /> 

<bean id="dataSourceORA" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" 
    p:driverClass="${jdbc.driverORA}" 
    p:jdbcUrl="${jdbc.urlORA}" 
    p:user="${jdbc.userORA}" 
    p:password="${jdbc.passwordORA}" 
    p:idleConnectionTestPeriod="3600" 
    p:preferredTestQuery="SELECT SYSDATE FROM DUAL" 
    p:acquireRetryAttempts="50" 
    p:autoCommitOnClose="false"/> 

<!-- transaction manager --> 
<bean id="MySQLService" class=" com.ekalife.MyGadget.service.MainService"> 
    <property name="MySQLDao" ref="MySQLDao"/> 
</bean> 

<bean id="ORAService" class=" com.ekalife.MyGadget.service.OraService"> 
    <property name="ORADao" ref="ORADao"/> 
</bean> 

<!-- MySQL transactional advice --> 
<tx:advice id="mySqlTxAdvice" transaction-manager="transactionManagerMySQL"> 
    <tx:attributes> 
     <tx:method name="select" read-only="true" /> 
     <tx:method name="view" read-only="true" /> 
     <tx:method name="*" /> 
    </tx:attributes> 
</tx:advice> 
<aop:config> 
    <aop:pointcut id="mySQLManagerMethods" expression="execution(* com.ekalife.MyGadget.service.MainService.*(..))"/> 
    <aop:advisor advice-ref="mySqlTxAdvice" pointcut-ref="mySQLManagerMethods" /> 
</aop:config> 
<bean id="transactionManagerMySQL" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSourceMySQL" /> 
</bean> 

<!-- Oracle transactional advice --> 
<tx:advice id="oraTxAdvice" transaction-manager="transactionManagerORA"> 
    <tx:attributes> 
     <tx:method name="select" read-only="true" /> 
     <tx:method name="view" read-only="true" /> 
     <tx:method name="*" /> 
    </tx:attributes> 
</tx:advice> 
<aop:config> 
    <aop:pointcut id="oraManagerMethods" expression="execution(* com.ekalife.MyGadget.service.OraService.*(..))" /> 
    <aop:advisor advice-ref="oraTxAdvice" pointcut-ref="oraManagerMethods" /> 
</aop:config> 
<bean id="transactionManagerORA" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSourceORA"/> 
</bean> 

<bean id="MySQLDao" class="org.mybatis.spring.SqlSessionFactoryBean" 
    p:dataSource-ref="dataSourceMySQL" 
    p:mapperLocations="classpath*:com/ekalife/MyGadget/dao/MySQL/**/*.xml" 
    p:typeAliasesPackage="com.ekalife.MyGadget.model" /> 
<bean id="MySQLDaoSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 
    <constructor-arg ref="MySQLDao"/> 
</bean> 

<bean id="ORADao" class="org.mybatis.spring.SqlSessionFactoryBean" 
    p:dataSource-ref="dataSourceORA" 
    p:mapperLocations="classpath*:com/ekalife/MyGadget/dao/Ora/**/*.xml" 
    p:typeAliasesPackage="com.ekalife.MyGadget.model" /> 
<bean id="ORADaoSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 
    <constructor-arg ref="ORADao"/> 
</bean> 

<bean id="MySQLMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" 
    p:sqlSessionTemplate-ref="MySQLDaoSessionTemplate" 
    p:mapperInterface="com.ekalife.MyGadget.dao.MainMapper" 
    p:sqlSessionFactory-ref="MySQLDao"/> 
<bean id="ORAMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" 
    p:sqlSessionTemplate-ref="ORADaoSessionTemplate" 
    p:mapperInterface="com.ekalife.MyGadget.dao.OraMapper" 
    p:sqlSessionFactory-ref="ORADao"/> 

MySQLのサービス

package com.ekalife.MyGadget.service; 

@Transactional 
public class MainService { 

    private static Logger logger = Logger.getLogger(MainService.class); 

    @Autowired 
    private MainMapper mainMapper; 

のOracleサービス

@Transactional 
public class OraService { 

    private static Logger logger = Logger.getLogger(MainService.class); 

    @Autowired 
    private OraMapper oraMapper; 

ありがとうございます。

+1

が、私はそれが@Transactionに関連する何かありますか?または、それはそこに –

+0

する必要がありますが、それは @Transactional(「MySQLDao」)でなければなりません、また:(サービスクラスとそのsetterメソッドにmysqldaoとプロパティを参照してくださいcouldntの 公衆クラスMainService? –

答えて

0

MainServiceとそのセッターとゲッターには、春が探しているのでMySQLDaoと宣言する必要があります。

別のエラーが変数名はlowcaseで始めるべきであるということです。

<bean id="MySQLService" class=" com.ekalife.MyGadget.service.MainService"> 
    <property name="mySQLDao" ref="MySQLDao"/> 
</bean> 

また、私はいくつかの矛盾を参照してください。あなたのMainServiceは、すべてinyectionに同じ戦略を選択した方がよいautowiredが、また、アプリケーションのコンテキストXMLにあなたがmySQLDao

をinyectしたいという性質mainMapperを持っています。例えば、私は、XMLコンフィギュレーション内のすべてのinyect提案:

<bean id="MySQLService" class=" com.ekalife.MyGadget.service.MainService"> 
    <property name="mySQLDao" ref="MySQLDao"/> 
    <property name="mainMapper" ref="MySQLMapper"/> 
</bean> 

UPTATED:「MainServiceでMySQLDaoを宣言する方法」あなたの質問に答える

package com.ekalife.MyGadget.service; 

// imports... 

@Transactional 
public class MainService { 

    private static Logger logger = Logger.getLogger(MainService.class); 

    private MainMapper mainMapper; 

    private SqlSessionFactoryBean mySQLDao; 

    // your methods 

    // setter and getter methods for mySQLDao and mainMapper 

} 
+0

MainServiceでMySQLDaoを宣言する方法はありますか?Springで複数の接続(mysqlとoracle)を設定する簡単な方法はありますか? –

+0

MySQLDaoの宣言方法については、私の更新を参照してください。 – jddsantaella

+0

ServletContextリソース[/WEB-INF/appContext-database.xml]で定義された「MySQLService」という名前のBeanを作成中にエラーが発生しました:Beanの初期化に失敗しました;入れ子にされた例外は次のとおりです。 org.springframework.beans.ConversionNotSupporte dException:型 'org.apache.ibatis.session.defaults.DefaultSqlSessionFactory'のプロパティ値を、プロパティ 'mySQLDao'の必須型 'org.mybatis.spring.SqlSessionFactoryBean'に変換できませんでした。一致するエディタまたは変換戦略が見つかりませんでした。 " –

0

あなたがエラーを取得している主な理由あなたがMainserviceとOraServiceクラスのためにゲッターとセッターを持っていないからです。春のエラーは、離れて "書かれていないか、または無効なセッターメソッドがある"ことを伝えます。

関連する問題