latar belakang
Baru -baru ini, proyek ini akan diluncurkan, dan program migrasi data perlu dikembangkan. Fungsi utama dari program ini adalah untuk menanyakan data dalam satu database dan mengimpornya ke database lain setelah serangkaian pemrosesan. Mempertimbangkan kenyamanan dan kecepatan pengembangan. Secara alami, saya berpikir untuk mengintegrasikannya dengan Spring dan Mybatis. Bahkan menggunakan pembuatan kode otomatis Mybatis dapat menyimpan banyak pengembangan lapisan DAO.
Lubang integrasi
Proyek sebelumnya: Saya pernah memiliki program serupa seperti ini sebelumnya, jadi saya langsung menggunakan konfigurasi integrasi pegas dan mybatis untuk memodifikasinya. Konfigurasi terintegrasi sebelumnya adalah sebagai berikut:
1. Mempertimbangkan konfigurasi URL database dan nama pengguna dan kata sandi, masukkan informasi ini ke dalam file Properties. Digunakan dalam file konfigurasi pegas
<Konteks: Lokasi pemegang tempat properti = "classpath: config.properties" />
2. Konfigurasi terintegrasi mybatis dan pegas dalam file konfigurasi pegas seperti ini
<bean id = "sqlSessionFactory"> <properti name = "DataSource" ref = "DataSource" /> < /bean> <bean> <name properti = "basepackage" value = "com.lagou.chat.record.transfer.dao" /< /bean> < /bean>
Tidak ada masalah dengan konfigurasi di atas. Jadi cukup salin konfigurasi ke proyek baru
Proyek saat ini: Salin konfigurasi proyek lama, tetapi proyek baru perlu terhubung ke dua database, jadi secara alami dua sumber data (Record dan IM) diperlukan, sehingga konfigurasi lama dimodifikasi sebagai berikut
1. Konfigurasi menggunakan file properti tetap tidak berubah
2. Sebelumnya, karena hanya ada satu sumber data (SQLSessionFactory), <nama properti = "SQLSessionFactory" ref = "sqlSessionFactory"/> tidak dikonfigurasi di bawah MappersCannerConfigurer. Karena SQLSessionFactory default digunakan. Tapi sekarang ada dua sumber data, tidak menentukannya pasti akan menyebabkan kebingungan. Jadi konfigurasi dimodifikasi sebagai berikut
<bean id = "record_sqlSessionFactory"> <name properti = "DataSource" ref = "Record_Datasource" /> < /bean> <bean id = "config1"> <name properti = "basepackage" value = "com.xxx.util.rollback.record.record.dao" /name = "com.xxx.util.Rollback.record.dao" ref = "record_sqlsessionfactory" /> </ bean> <bean id = "im_sqlsessionfactory"> <properti name = "DataSource" ref = "im_dataSource" /> < /bean> <bean id = "config2"> <nama properti = "basePackage" value = "com.xx. name = "sqlSessionFactory" ref = "im_sqlSessionFactory" /> </ bean>
Hasilnya adalah ketika menjalankan proyek baru, properti seperti $ {jdbc.url}, $ {jdbc.name} dalam file konfigurasi pegas tidak dapat diganti dengan nilai yang ditentukan di properti. Pada awalnya, saya secara alami tidak berharap bahwa itu karena integrasi Spring dan Mybatis, jadi saya terus memeriksa apakah file konfigurasi pegas salah, apakah file properti salah, apakah file properti tidak dirujuk atau file properti tidak dikompilasi ke dalam direktori classpath, dll. Tentu saja, jika analisis tidak menganalisis penyebab masalah, itu tidak mungkin terjadi. Saya harus beralih ke internet. Akhirnya menemukan jawabannya
Metode tetap: Ubah konfigurasi ke yang berikut, masalahnya diselesaikan:
<bean id = "record_sqlSessionFactory"> <properti name = "datasource" ref = "record_datasource" /> </ bean> <bean id = "config1"> <name properti = "basepackage" value = "com.xxx.util.rollback.record.record.dao" /<"" "" value = "record_sqlsessionFactory" /> </ bean> <bean id = "im_sqlsessionfactory"> <properti name = "DataSource" ref = "im_datasource" /> </ bean> <bean id = "config2"> <nama properti = "basePackage" value = "com.xx. name = "sqlSessionFactoryBeanName" value = "im_sqlsessionFactory"/> </t bean>
Ini untuk mengubah properti SQLSessionFactory menjadi SQLSessionFactoryBeanName. Tentu saja, Ref juga harus diubah menjadi nilai. Karena properti SQLSessionFactoryBeanName adalah tipe string
alasan
Saat menggunakan org.mybatis.spring.mapper.mapperscannerConfigurer untuk pemindaian otomatis di musim semi, jika SQLSessionFactory diatur, PropertyplaceFolderConfigurer mungkin tidak valid, yaitu kombinasi di properti.
Ini karena MappersCannerConigurer sebenarnya berada dalam tahap definisi pemuatan kacang parse. Jika Anda mengatur SQLSessionFactory saat ini, itu akan menyebabkan beberapa kelas diinisialisasi sebelumnya. Pada saat ini, PropertyplaceHolderConfigurer tidak punya waktu untuk mengganti variabel dalam definisi, menghasilkan ekspresi yang disalin sebagai string. Namun, jika properti SQLSessionFactory tidak ditetapkan, perlu untuk memastikan bahwa nama sesiFactory di musim semi harus SQLSessionFactory, jika tidak itu tidak akan disuntikkan secara otomatis.
Di atas adalah jebakan musim semi mengintegrasikan mybatis saat menggunakan <konteks: property-placeHolder> yang telah saya perkenalkan kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!