Spring与Mybatis相结合实现多数据源切换功能
废话不多说,关键代码如下所示:
1. 代码: DbContextHolder
public class DbContextHolder { //线程安全的ThreadLocal private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); public static void setDbType(String dbType) { contextHolder.set(dbType); } public static String getDbType() { return ((String)contextHolder.get()); } public static void clearDbType() { contextHolder.remove(); } }
2. 代码 : DynamicDataSource
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource { @Override public Object determineCurrentLookupKey() { return DbContextHolder.getDbType(); } }
3.代码: spring.xml
<!-- 数据源属性配置文件 --> <context:property-placeholder location="classpath:ibatis.properties" /> <bean id="jksh" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${driver.jksh}" /> <property name="url" value="${url.jksh}" /> <property name="username" value="${username.jksh}" /> <property name="password" value="${password.jksh}" /> <!-- Connection Pooling Info --> <property name="maxIdle" value="${maxIdle.jksh}" /> <property name="maxActive" value="${maxActive.jksh}" /> <property name="defaultAutoCommit" value="false" /> <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis.jksh}" /> <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis.jksh}" /> </bean> <bean id="jclt" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${driver.jclt}" /> <property name="url" value="${url.jclt}" /> <property name="username" value="${username.jclt}" /> <property name="password" value="${password.jclt}" /> <!-- Connection Pooling Info --> <property name="maxIdle" value="${maxIdle.jclt}" /> <property name="maxActive" value="${maxActive.jclt}" /> <property name="defaultAutoCommit" value="false" /> <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis.jclt}" /> <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis.jclt}" /> </bean> <bean id="dataSource" class="com.jclt.service.commons.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry key="jksh" value-ref="jksh" /> <entry key="jclt" value-ref="jclt" /> </map> </property> <property name="defaultTargetDataSource" ref="jksh" /> </bean>
4. 代码:main方法
import javax.sql.DataSource; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import com.jclt.service.commons.DbContextHolder; import com.jclt.service.model.User; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; public class Text { /** * @param args */ public static void main(String[] args) { ApplicationContext appContext = new ClassPathXmlApplicationContext("client-beans.xml"); DbContextHolder.setDbType("jclt"); String res="src/main/resources/ibatis-config.xml"; DataSource datasource=(DataSource) appContext.getBean("dataSource"); SqlSessionFactoryBean bean=new SqlSessionFactoryBean(); bean.setDataSource(datasource); Resource resource=new FileSystemResource(res); bean.setConfigLocation(resource); try { SqlSessionFactory sessionfactory = bean.getObject(); SqlSession session=sessionfactory.openSession(); User user=session.selectOne("com.jclt.service.Dao.readJKSH.findOne"); System.out.println(user.getName()); } catch (Exception e) { e.printStackTrace(); } DbContextHolder.setDbType("jksh"); String res1="src/main/resources/ibatis-config.xml"; DataSource datasource1=(DataSource) appContext.getBean("dataSource"); SqlSessionFactoryBean bean1=new SqlSessionFactoryBean(); bean1.setDataSource(datasource1); Resource resource1=new FileSystemResource(res1); bean1.setConfigLocation(resource1); try { SqlSessionFactory sessionfactory = bean.getObject(); SqlSession session=sessionfactory.openSession(); User user=session.selectOne("com.jclt.service.Dao.readJKSH.findOne"); System.out.println(user.getName()); } catch (Exception e) { e.printStackTrace(); } } }
以上所述是小编给大家介绍的Spring与Mybatis相结合实现多数据源切换功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHP中文网的支持!
更多Spring与Mybatis相结合实现多数据源切换功能相关文章请关注PHP中文网!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.
