3.spring+mybatis+uncode dal
spring applicationcontext.xml
1.配置多个数据源,建议使用druiddatasource
<bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource"
...
</bean>
<bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
...
</bean>
2.配置uncode动态数据源,指定主库,备库(用于写操作),从库(用于读操作)
<bean id="dynamicDataSource" class="cn.uncode.dal.datasource.DynamicDataSource">
<property name="slaveDataSources”>//设置从库,读操作从这些数据库中读
<map key-type="java.lang.String">
<entry key="readDataSourceOne" value-ref="dataSource2"/> (可配置多个)
</map>
</property>
<!-- 主数据库配置 -->
<property name="masterDataSource" ref="dataSource1" />
<property name="standbyDataSource" ref=“dataSource2”/ >
</bean>
<bean id="transactionManager" class="cn.uncode.dal.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dynamicDataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
3.指定mybatis mapper配置文件及dao类位置,需指定datasource为上面定义的动态数据源
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dynamicDataSource" />
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"></property>
</bean>
<bean id="sqlSessionTemplateSimple" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
<!--更新采用单个模式 -->
<constructor-arg index="1" value="SIMPLE" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="...dao(包名)" />
<property name="sqlSessionTemplateBeanName" value="sqlSessionTemplateSimple" />
</bean>
4.那么在使用dao的时候,可以先指定是读操作还是写操作,然后再调用相应的操作
DBContextHolder.swithToRead();//这里可以定义dao的拦截器,指定某一类方法调用时都先执行这个操作
userDao.getNewAccount("1");
如果想使用其提供的baseDal(但是只支持单表操作)
在上面的applicationcontext.xml中再增加spring-jdbc配置(参加uncode-dal wiki)
java代码调用,见其说明
遇到的问题:
1.流复制从数据库不能启动
原因是主库保留的wal log数目太少,等从库配好启动的时候主库已经有些wal log被删除了
导致从库启动的时候从主库获得不了需要的wal log,需要不能启动
2.虚拟机上各种网络的含义,为啥有时候能联网,有时候不能联网(绕过)
怎么设置静态ip地址(通过界面settings,网络解决,后面看一些怎么通过修改配置文件解决)
3.迁移之后插入新的数据会报
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "index_28"
org.postgresql.util.PSQLException: ERROR: function geometry(text) does not exist
查看已经安装的extension,查看pg_extension视图
说明迁移的时候序列,extension有问题,后面看怎么解决,先绕过
4.如何纪录在每个数据库上执行了哪些操作
通过修改postgresql的log配置解决
5.在maven库中找不到uncode-dal的一些包?
解决方法:将uncode-dal的代码下载下来,重新编译生成jar包在本地