SpringおよびMybatis統合プレースホルダ解析失敗問題解決
問題:新しいdaoインターフェースを書いて、ユニットテストをする時にヒントを与えます。
Initialization of bean failed;neted exception is org.spring frame ebook.beans.Type MismatchException:Failed to convert property value of type'java.lang.String'to required type'int'for property maxActive;neted exception is java.lang.Number FormatException:For input string:「$maxActive」
元々はdatasourceを設定していますが、このヒントはプレースホルダ$maxActiveを解析しても対応する属性が見つかりません。
ユニットテストロードproperties@PropertySource(value={classipath*:jdbc.properties})を使ってプロファイルをロードします。
自分のpropertiesファイルの経路が正しく、属性値が存在することを確認した後、https://my.oschina.net/u/1455908/blog/215953によると、mybatisを配置するMapperScanner Contingurerの場合は@ProptySourceの注釈解析プレースホルダより優先され、プレースホルダが解析されていないため、直接に「$maxActive」を使用した。つまりエラーという「$maxActive」という文字列は対応するint値に変換できません。
問題を解決する
設定ファイルのロードをもとに注釈@PropertySource(value={classipath*:jdbc.properties}を使って以下のように変更します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
Initialization of bean failed;neted exception is org.spring frame ebook.beans.Type MismatchException:Failed to convert property value of type'java.lang.String'to required type'int'for property maxActive;neted exception is java.lang.Number FormatException:For input string:「$maxActive」
元々はdatasourceを設定していますが、このヒントはプレースホルダ$maxActiveを解析しても対応する属性が見つかりません。
ユニットテストロードproperties@PropertySource(value={classipath*:jdbc.properties})を使ってプロファイルをロードします。
自分のpropertiesファイルの経路が正しく、属性値が存在することを確認した後、https://my.oschina.net/u/1455908/blog/215953によると、mybatisを配置するMapperScanner Contingurerの場合は@ProptySourceの注釈解析プレースホルダより優先され、プレースホルダが解析されていないため、直接に「$maxActive」を使用した。つまりエラーという「$maxActive」という文字列は対応するint値に変換できません。
問題を解決する
設定ファイルのロードをもとに注釈@PropertySource(value={classipath*:jdbc.properties}を使って以下のように変更します。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true"></property>
</bean>
元々MapperScanner Configrerの配置は修正されていませんでしたが、次のようになります。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.**.dao,com.**.mapper,com.**.test.**.mapper" />
<!-- name sqlSessionFactoryBeanName , , -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
このようにこの問題を解決します。しかし、疑問は依然として存在しています。なぜ@PropertySourceという注釈はイグノレUnirevable Placeholdersという属性が配置されておらず、xmlで正確に解析できます。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。