fundo
Recentemente, o projeto está prestes a ser lançado e um programa de migração de dados precisa ser desenvolvido. A principal função do programa é consultar os dados em um banco de dados e importá -los para outro banco de dados após uma série de processamento. Considerando a conveniência e a velocidade do desenvolvimento. Naturalmente, pensei em integrá -lo com a primavera e Mybatis. Mesmo o uso da geração automática de código da Mybatis pode economizar muito desenvolvimento de camadas DAO.
O poço da integração
Projeto anterior: eu já tive esse tipo de programa semelhante antes, então usei diretamente a configuração da integração Spring e Mybatis para modificá -lo. A configuração integrada anterior é a seguinte:
1. Considerando a configuração do URL do banco de dados e do nome de usuário e senha, coloque essas informações no arquivo de propriedades. Usado no arquivo de configuração da primavera
<Contexto: Propriedade-Placter Location = "ClassPath: config.properties" />
2. A configuração integrada de mybatis e a primavera no arquivo de configuração da primavera é assim
<bean id = "sqlSessionFactory"> <propriedade name = "DataSource" ref = "DataSource" /> < /bean> <ean> <propriedade name = "BasEpackage" value = "com.lagou.chat.record.transfer.dao" /> </shean>
Não há problema com a configuração acima. Então, basta copiar a configuração para o novo projeto
Projeto atual: copie a configuração do projeto antigo, mas o novo projeto precisa se conectar a dois bancos de dados, portanto, naturalmente, duas fontes de dados (registro e IM) são necessárias; portanto, a configuração antiga é modificada da seguinte maneira
1. A configuração do uso de arquivos de propriedades permanece inalterada
2. Anteriormente, porque havia apenas uma fonte de dados (um SQLSessionFactory), o <propriedades name = "sqlSessionFactory" ref = "sqlSessionFactory"/> não foi configurado sob o MapperScannerConfigurer. Porque o SQLSessionFactory padrão é usado. Mas agora existem duas fontes de dados, sem especificá -las definitivamente levarão à confusão. Portanto, a configuração é modificada da seguinte forma
<bean id = "registro_sqlSessionFactory"> <propriedade name = "dataSource" ref = "registro_datasource" /> < /bean> <bean id = "config1"> <names name = "basepackage" value = "com.xxx.util.rollback.record.dapackage" /> <weeation = "com.xxx.util.rollback.Record.dano" /> <weeTonse) /> < /bean> <bean id = "im_sqlsessionFactory"> <propriedade name = "dataSource" ref = "im_dataSource" /> < /bean> <bean id = "config2"> <nome da propriedade = "Basepackage") ref = "im_sqlSessionFactory" /> </i bean>
O resultado é que, ao executar um novo projeto, as propriedades como $ {jdbc.url}, $ {jdbc.name} no arquivo de configuração da mola não podem ser substituídas pelos valores especificados nas propriedades. No início, eu naturalmente não esperava que fosse por causa da integração da primavera e Mybatis, por isso continuei verificando se o arquivo de configuração da mola estava errado, se o arquivo de propriedades estava errado, se o arquivo de propriedades não foi referenciado ou o arquivo de propriedades não foi compilado no diretório de classes, etc. Eu tive que recorrer à Internet. Finalmente encontrei a resposta
Método corrigido: Altere a configuração para o seguinte, o problema foi resolvido:
<bean id = "registro_sqlSessionFactory"> <propriedade name = "dataSource" ref = "registro_dataSource" /> < /bean> <bean id = "config1"> <nameseation (basepackage "value =" com.xxx.util.rollback.record.aPAchage " /> <weeady =" com.xxx.util.rollback.record.aPAchage " />> value = "registro_sqlSessionFactory" /> </ Bean> <bean id = "im_sqlSessionFactory"> <propriedade name = "DataSource" ref = "im_dataSource" /> < /bean> <bean id = "config2"> <names = "basepackage") name = "sqlSessionFactoryBeanName" value = "im_sqlSessionFactory"/> </SEI>
É para alterar a propriedade SQLSessionFactory para SQLSessionFactoryBeanName. Obviamente, o REF também deve ser alterado para o valor. Porque a propriedade SQLSessionFactoryBeanName é um tipo de string
razão
Ao usar o org.mybatis.spring.mapper.mapperscannerconfigurer para digitalização automática na primavera, se o SQLSessionFactory for definido, o Figonfigador de propriedades pode ser inválido, ou seja, expressões como $ {jdb.username} não poderão ser capazes de serem contribuintes para o Filme.
Isso ocorre porque o MapperScannerConigurer está na verdade no estágio de definição de feijão de carga. Se você definir o SQLSessionFactory no momento, isso fará com que algumas classes sejam inicializadas com antecedência. No momento, o PropertyPlaceHoldConfigurer não teve tempo de substituir as variáveis na definição, resultando na expressão copiada como uma string. No entanto, se a propriedade SQLSessionFactory não estiver definida, será necessário garantir que o nome da SessionFactory na primavera seja sqlSessionFactory, caso contrário, ela não será injetada automaticamente.
O exposto acima são as armadilhas da primavera que integra Mybatis ao usar <Contexto: Propriedade-Place-tholder> que eu apresentei a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!