MyBatis - сбой подключения к базе данных, поскольку PropertyPlacholderConfigurer не разрешает ссылки на заполнители - PullRequest
0 голосов
/ 01 апреля 2019

Я новичок в MyBatis, и у меня проблема с тестовым классом, который не может подключиться к базе данных, поскольку заполнители свойств не решаются. Как только я заменяю настройки ${placeholder} жестко закодированными строками, все работает нормально.

Я довольно долго искал и нашел такие темы, как этот context: property-placeholder не разрешает ссылки . К сожалению, добавление свойства sqlSessionFactoryBeanName к MapperScannerConfigurer не дало никаких результатов. Независимо от того, что я пробовал, тестовый класс работает ТОЛЬКО когда я жестко программирую настройки соединения.

Может ли кто-нибудь помочь мне определить, что я делаю неправильно ... пока у меня еще остались волосы? Если вам нужна дополнительная информация, просто спросите.

Соответствующие версии:

  • пружинная рама 4,3
  • mybatis версия 3.5.0
  • mybatis-spring версия 1.3.2
  • dbcp версия 2.6

Вот моя последняя попытка (извините за грязный код)

myproperties.properties

driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin@//host:port/someservicename
username=someusername
password=somepassword

applicationContext.xml

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlacholderConfigurer">
  <property name="locations">
    <list>
      <value>classpath:myproperties.properties</value>
    </list>
  </property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${driverClassName}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="typeAliasesPackage" value="com.abc.model"/>
  <property name="mapperLocations" value="classpath*:MyMapper.xml"/>
</bean>

<bean id="transactionManager"
   class="org.springframeword.jdbc.datasource.DataSourceTransactionManager">
   <property name="dataSource" ref="dataSource" />
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
    p:basePackage="com.abc.mappers"
    p:sqlSessionFactoryBeanName="sqlSessionFactory"
    p:processPropertyPlaceholders="true" />

mybatis-config.xml

<configuration>
   <typeAliases>
      <typeAlias ..../>
   </typeAliases>

   <environments default="dev">
      <environment id="dev">
         <transactionManager type="JDBC"/>  
         <dataSource type="POOLED">
             <property name="driver" value="${driverClassName}"/>
             <property name="url" value="${url}"/>
             <property name="username" value="${username}"/>
             <property name="password" value="${password}"/>
          </dataSource>        
      </environment>
   </environments>

   <mappers>
      <mapper resource="/path/to/MyMapper.xml"/>
   </mappers>

</configuration>

Тестовый класс не может соединиться с ошибкой, подобной этой

### Ошибка запроса базы данных. Причина org.springframework.jdbc.CannotGetJdbcConnectionException: не удалось получить соединение JDBC; Вложенным исключением является java.sql.SQLException: Невозможно создать PoolableConnectionFactory (ошибка ввода-вывода: адаптер Netword не удалось установить соединение)

1 Ответ

0 голосов
/ 01 апреля 2019

Никогда не терпит неудачу.Потратьте часы на проблему, и вы найдете ответ, как только вы отправите вопрос.

Оказывается, причина, по которой заполнители не разрешались, заключается в том, что имена свойств были случайно дублированы, внизу в myproperties.properties:

driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin@//host:port/someservicename
username=someusername
password=somepassword
...
...
#duplicated property names
driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin@//host:port/someservicename
username=someusername
password=somepassword

Как только я удалилдубликаты, заполнители решены.Надеюсь, эта глупая ошибка поможет кому-то еще.

...