当前位置: 首页 > news >正文

网站怎么做搜素引擎如何建网站商城

网站怎么做搜素引擎,如何建网站商城,网站备案个人好还是企业好,港海建设网站既然在整理Mybatis那就把经常用的这个多数据源的笔记也整一下吧。 Spring集成Mybatis在之前就已经提到了。Spring集成Mybatis 集成Mybatis多数据源有两种方式#xff1a; 1、创建多个SqlSessionFactory#xff0c;扫描每个SqlSessionFactoryBean对应的包#xff0c;形成了…既然在整理Mybatis那就把经常用的这个多数据源的笔记也整一下吧。 Spring集成Mybatis在之前就已经提到了。Spring集成Mybatis 集成Mybatis多数据源有两种方式 1、创建多个SqlSessionFactory扫描每个SqlSessionFactoryBean对应的包形成了每个Factory对应一个数据源。 2、创建一个SqlSessionFactory通过动态切换数据源对象达到多数据源操作功能。 第一种方式 通过在Spring的配置文件中配置多个SqlSessionFactoryBean对象每个对应不同的MapperScannerConfigurer每个MapperScannerConfigurer扫描不同的包路径接口 另外一个数据源也如上配置只需替换对应的扫描包即可这样调用指定包下的接口就能访问指定的数据库了。 第二种方式 创建单个SqlSessionFactory指定默认数据源后期查询不同的数据库切换SqlSessionFactory中数据源如果访问次数过多频繁切换的话就会导致一个并发问题。 解决这个问题就应该使用并发中一些机制如果使用锁机制的话那么查询的效率就会降低同时只有当线程去执行采用ThreadLocal的话就能解决这个效率以及线程安全的问题了。 由于需切换数据源所以在创建SqlSessionFactory时需要有几个注意的点 1、设置数据源对象应该为一个支持切换的一个DataSource对象我们先定义为RouteDataSource对象由于是DataSource所以这个RouteDataSource就必须实现DataSource接口但是又不能侵入原本数据库链接池的对象所以这个采用装饰器模式进行装饰这个类 2、支持动态切换即需要一个暴露的静态方法进行切换由于数据源对象都在这个Spring容器当中所以这个类需拿到Spring的容器使用权实现ApplicationContextAware接口 3、需指定切换那个数据源可以采用ENUM枚举进行指定也可以通过String都可以。 创建一个枚举类 public enum DataSourceEnum {DATASOURCE1(null),DATASOURCE2(null);DataSource dataSource;private DataSourceEnum(DataSource dataSource) {this.dataSource dataSource;}public DataSource getValue() {return dataSource;}public DataSourceEnum setDataSource(DataSource dataSource) {this.dataSource dataSource;return this;}} RouteDataSource类如下 Component(routeDataSource) public class RouteDataSource implements DataSource,InitializingBean,ApplicationContextAware {private static final MapDataSourceEnum,DataSource targetDataSources new HashMapDataSourceEnum,DataSource(2); //避免并发问题ThreadLocalDataSource targetDataSource new ThreadLocalDataSource();//装时器模式进行数据源增强private static RouteDataSource route null;public void setDataSource(DataSource targetDataSource) {this.targetDataSource.set(targetDataSource);}Overridepublic PrintWriter getLogWriter() throws SQLException {return targetDataSource.get().getLogWriter();}Overridepublic void setLogWriter(PrintWriter out) throws SQLException {targetDataSource.get().setLogWriter(out);}Overridepublic void setLoginTimeout(int seconds) throws SQLException {targetDataSource.get().setLoginTimeout(seconds);}Overridepublic int getLoginTimeout() throws SQLException {return targetDataSource.get().getLoginTimeout();}Overridepublic Logger getParentLogger() throws SQLFeatureNotSupportedException {return targetDataSource.get().getParentLogger();}Overridepublic T T unwrap(ClassT iface) throws SQLException {return targetDataSource.get().unwrap(iface);}Overridepublic boolean isWrapperFor(Class? iface) throws SQLException {return targetDataSource.get().isWrapperFor(iface);}Overridepublic Connection getConnection() throws SQLException {return targetDataSource.get().getConnection();}Overridepublic Connection getConnection(String username, String password) throws SQLException {return targetDataSource.get().getConnection(username, password);}//初始化枚举数据已经默认数据源Overridepublic void afterPropertiesSet() throws Exception {targetDataSources.put(DataSourceEnum.DATASOURCE1.setDataSource((DataSource) applicationContext.getBean(dataSource)), (DataSource) applicationContext.getBean(dataSource));targetDataSources.put(DataSourceEnum.DATASOURCE2.setDataSource((DataSource) applicationContext.getBean(dataSource1)), (DataSource) applicationContext.getBean(dataSource1));targetDataSource.set(targetDataSources.get(DataSourceEnum.DATASOURCE1));route (RouteDataSource) applicationContext.getBean(routeDataSource);}private ApplicationContext applicationContext;Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext applicationContext;}/*** description 更改数据源方法* param enumDataSource*/public static void setDataSource(DataSourceEnum enumDataSource) {route.setDataSource(targetDataSources.get(enumDataSource));}} 所以在调用Mybatis的接口之前调用RouteDataSource.setDataSource(DataSourceEnum.DATASOURCE);即可切换成对应的数据源进行查询啦。 上面是一个自定义的数据源路由类后来才发现在Spring的jdbc包下有个支持数据源切换的动态数据源类AbstractRoutingDataSource。 如果使用这个类做数据源切换也是可以的实现的思想以及模式都和自定义的那个是一致的 示例 public class ThreadLocalRountingDataSource extends AbstractRoutingDataSource {Overrideprotected Object determineCurrentLookupKey() {// TODO Auto-generated method stub//在这里做数据源切换return DataSourceTypeManager.get();}} //管理数据源类 public class DataSourceTypeManager {//数据源保存private static final ThreadLocalMybatisDataSource dataSourceTypes new ThreadLocalMybatisDataSource() {Overrideprotected MybatisDataSource initialValue() {return MybatisDataSource.JKDSJ;}};public static MybatisDataSource get() {return dataSourceTypes.get();}public static void set(MybatisDataSource dataSourceType) {dataSourceTypes.set(dataSourceType);}public static void reset() {dataSourceTypes.set(MybatisDataSource.JKDSJ);}} 这个类还是挺好用的
http://wiki.neutronadmin.com/news/261424/

相关文章:

  • 做图片网站会侵权吗永久免费自助建站
  • 企业品牌文化建设学习网站php网站开发师
  • 网站建设免费模板哪家好wordpress4.97
  • 自己电脑做主机怎么做网站桐庐网站制作
  • latex wordpress 怎么用成都网站快速排名优化
  • 商城网站建设资讯百度免费建立网站
  • 上海集团网站制作重庆市设计院
  • 招代理商的网站住房建设建设部网站
  • 交通运输网站建设的方案贵州建设网老网站
  • 成都企业模版网站建设小程序如何开发制作
  • 网站的优势与不足龙华区住房和建设局网站官网
  • 响应式网站设计工具找客源用哪个软件好
  • 杭州网站优化咨询wordpress中文版apk
  • 做网站用什么语言和工具wordpress 主题 乱码
  • 火烈鸟门户网站开发网站的建设与管理系统
  • 班级网站建设模板创建一个网页要钱吗
  • 济南大型网站制作全屏响应式网站建设
  • 网站后台管理员扫描wordpress api下载文件
  • 有个人代做网站的吗黑马程序员视频库
  • 软件工程35岁就失业吗石家庄seo优化公司
  • 唐山网站设计备案网站名称重复
  • 收废品做网站wordpress4.9.8有中文版
  • 当下网站建设平面设计专用网站
  • 网站验收标准网站优化自己可以做吗
  • 烟台网站制作山海云加强学校网站建设的通知
  • 青岛网站建设比较好云服务器便宜
  • 三亚网站建设平台惠州网站建设惠州
  • 做平台网站上海seo优化公司
  • 南昌做网站公司有哪些在线公司网站查询
  • 凯里网站设计制作网站入门